Problema con procedimiento

Quiero escribir un procedimiento en el cual el texto de un tedit lo paso a una variable y luego con showmessage(variable); mostrar lo que le asigne a la varieble, esbribo lo de abajo y me salen puros errores, por ejemplo que no esta la variable memo1, siendo que inserte el memo1 en el formulario. Lo declaro y después me dice que no puede ser inicializado, ¿cómo lo hago?
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure mirar();
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
mirar();
end;
procedure mirar();
var
edit1:tedit;
fras:string;
begin
fras:=edit1.text;
ShowMessage(fras);
end;
end.

3 respuestas

Respuesta
1
El problema que tienes es que, el procedimiento mirar, no pertenece al formulario ym, por lo tanto no tiene acceso directo al tedit Edit1.
Luego, al declarar una variable tedit, como al declarar cualquier variable que sea de un tipo descendiente de tobject o una clase, no creas un objeto de dicha clase, sino que simpmente, reservas espacio para un puntero a un objeto de la clase. Para obtener un objeto, debes crearlo utilizando el procedimiento create (en tu caso edit1:=Tedit. Create(self); (el parámetro no estoy seguro) ).
Ojo. Si tu creas un objeto, tu tienes que encargarle de destruirlo mediante la llamada a free (edit1. Free) cuando no lo necesites más. En la clase tform, el constructor y el destructor de dicha clase ya se encargan de eso por defecto automáticamente con los objetos que tu insertas en el formulario.
Pero aun así, ese edit1, no es el edit1 que tu quieres del formulario. Puesto que serian dos objetos distintos.
Para que tu programafuncione, tienes dos opcioes:
1) Poner el código del procedimiento mirar en el procdimiento Tform1. Buton1Click, quitando la definición de la variable edit1.
2) Quitar la definición de edit1, y cambiar la linea
fras:=edit1.text;
por
fras:=Form1.Edit1.Text;
Así, le indicas que el edit1 que buscas es el que esta en el formulario form1.
A simple vista, así no veo ningún otro error. Con esos cambios ya debería funcionarte sin problemas.
Respuesta
1
Veo que eres nuevo en Delphi, ok, veamos...
Primero, Delphi no utiliza como lenguaje base a pascal, sino a Object pascal, lo cual hace que se haga referencia a los objetos mediante su clase, sus métodos o propiedades y así sucesivamente.
Lo que quieres hacer seria así:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Edit1.text);
end;
Mandas a un dialogo standard (showmessage) el contenido de la propiedad Text (tipo string) del objeto Edit1 (tipo TEdit).
Espero y te sirva.
P.D. Lee la ayuda de cada componente (F1) normalmente vienen ejemplos de las propiedades y métodos más comunes.
Respuesta
1
El código que me has enviado tiene varios errores. Lo que me comentas del memo1 es un poco extraño ya que según el código no tienes ningún componente memo. Asegúrate que en la Form solo tienes los componentes que me comentas (para este trozo de código). Puesto que has declarado la variable edit1 de tipo tedit en mirar() esta se comportará como local al procedimiento. No declares esta variable ya que el componente lo puedes utilizar como global.
Tampoco es necesario que declares una variable para acceder al texto que has introducido en el tedit ya que en programación orientada a objetos cada componente (objeto) tiene sus métodos definidos o los que tu definas. Con edit1.Text tendrás el texto que hay en tedit (igual que has hecho con fras. Pero si lo quieres hacer como propones el código correcto sería este:
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure mirar(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.mirar(Sender: TObject);
var
fras:string;
begin
fras:=Edit1.text;
ShowMessage(fras);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
mirar(Sender);
end;
end.
Fíjate que aunque mirar se declara como procedure mirar(Sender: TObject) a la hora de implementarla se hace como TForm1. Mirar(-----) ya que se trata de una función de dicha Form.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas