Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   donde está el error? :S (https://www.clubdelphi.com/foros/showthread.php?t=22496)

jorodgar 17-06-2005 00:32:33

donde está el error? :S
 
Tengo el siguiente codigo y el mensaje de error es el siguiente : Incompatible tipos string y TMemo

procedure TForm1.Button3Click(Sender: TObject);
begin
memo2.text:=obtenermemo;
end;

function Tform1.obtenermemo:Tmemo;
var
memo1:Tmemo;
begin
memo1:=Tmemo.Create(self);
memo1.Lines.Add('hola');
obtenermemo:=memo1;
end;

La verdad que ya he probado varias combinaciones y na de na. alguien sabe que sucede? Gracias.

roman 17-06-2005 00:53:18

Quita el .Text de la tercera línea.Tu función ObtenerMemo devuelve un Memo no un String.

// Saludos

jorodgar 17-06-2005 01:27:14

Esa opción ya la habia probado y nada :(
el error que me sale ahora es : project2.exe raises exception class EinvalidOperation with message control has no parent windows. Proccess stopped.

El codigo es :
procedure TForm1.Button3Click(Sender: TObject);
begin
memo2:=obtenermemo;
end;

function Tform1.obtenermemo:Tmemo;
var
memo1:Tmemo;
begin
memo1:=Tmemo.Create(self);
memo1.Lines.Add('hola');
obtenermemo:=memo1;
end;

jachguate 17-06-2005 03:01:39

Hola.

Ya es hora de usar la etiqueta [ delphi ], no te parece.

la solución podria ser:
Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
begin
  memo2:=obtenermemo;
end;

function Tform1.obtenermemo:Tmemo;
var
  memo1:Tmemo;
begin
  memo1:=Tmemo.Create(self);
  memo1.Lines.Add('hola');
  memo1.Parent := self; //o panel1 si queres que aparezca dentro del panel
  obtenermemo:=memo1;
end;

ojo!! que estas haciendo una asignación "a lo pelado" de un puntero. Si memo2 apuntaba a un memo creado con anterioridad, estas perdiendo la forma fácil de acceder a él, y dejandolo en memoria hasta que se libere la forma (gracias al ownership, que si no la memoria se quedaba tirada para siempre).

Espero que sepas realmente lo que queres conseguir con esto.

Hasta luego.

;)

jorodgar 17-06-2005 11:58:59

Nada, no hay manera de hacer una funcion que devuelva un TMemo1. :(

Ni lo mas simple funciona : Memo2 es un memo en el formulario con datos.
Lo que sucede es que memo1 no se llena con los datos del memo2.

procedure TForm1.Button3Click(Sender: TObject);
begin
memo1:=obtenermemo;
end;

function Tform1.obtenermemo:Tmemo;
begin
obtenermemo:=memo2;
end;

Lepe 17-06-2005 12:34:25

Haber dicho desde un principio lo que querias :D
Código Delphi [-]
function tform1.obtenermemo:tmemo;
begin
  Result := Form1.memo2;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  Memo1.Lines.Assign(obtenermemo.lines);

end;

En tu mensaje anterior, en button3Click escribe:
Código Delphi [-]
Memo1 := obtenermemo;
memo1.lines.Add('¿En que memo sale este mensaje en el 1 o el 2?');

Y verás lo que estas haciendo ;). Ahora mira la ayuda de Assign para comprobar que es lo que hace.

Un saludo

jorodgar 17-06-2005 15:27:49

asias por la ayuda :):rolleyes:

jachguate 17-06-2005 15:32:08

Cita:

Empezado por jorodgar
Lo que sucede es que memo1 no se llena con los datos del memo2.

Si ya lo habia dicho yo... :rolleyes:
Cita:

Empezado por jachguate
Espero que sepas realmente lo que queres conseguir con esto.

Es como si sos médico y al consultorio viene alguien a preguntarte la dosis correcta de diazepan. Pues le decis cual es la dosis y punto. En cambio si viene y te dice que quiere estar despiérto toda la noche, pues es distinto, no.

Si lo que queres es que el memo1 tenga las líneas que produce la función, pues hay varias formas "sanas" de hacerlo.

Una:

Código Delphi [-]
Function TForm1.CrearLineas : TStringList;

Begin
  result := TStringList.Create;
  result.Add('Esto es una prueba, línea 1');
  result.Add('Esto es una prueba, línea 2');
  result.Add('Esto es una prueba, línea 3');
  result.Add('Esto es una prueba, línea 4');
  result.Add('Esto es una prueba, línea 5');
end;

Procedure TForm1.Button1Click(Sender : TObject);

Var
  Líneas : TStringList;

Begin
  Lineas := CrearLineas;
  try
    Memo1.Lines.Assign(Lineas);
  finally
    Lineas.Free; //siempre liberar la memoria!
  end;
end;

Habrán otras formas de hacerlo... esta al menos debiera funcionar correctamente.

Hasta luego

;)


La franja horaria es GMT +2. Ahora son las 09:52:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi