Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2015-06

Ayuda con POO

7 messages · 4 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Juan Perles

Quiero hacer una serie de comprobaciones que son iguales a un Control TEdit y a un TMemo.
Como se ve en el ejemplo de mas abajo, el cuerpo de los procedimientos es el mismo, lo �nico que cambia es la cabecera. �No puedo hacer un �nico procedimiento?

function TForm1.EditCorrecto(Control: TEdit): Boolean;
begin
  if length(Trim(Control.Text))= 0 then
    RESULT := False
  else
    RESULT := True;
end;
function TForm1.MemoCorrecto(Control: TMemo): Boolean;
begin
  if length(Trim(Control.Text))= 0 then
    RESULT := False
  else
    RESULT := True;
end;

He intentado unificarlos haciendo el siguiente procedimiento

function TForm1.ControlCorrecto(Sender: TObject): Boolean;
begin
  if length(Trim(Sender.Text))= 0 then
    RESULT := False
  else
    RESULT := True;
end;

El resultado es que no me reconoce el Atributo Text.

Muchas gracias por anticipado por vuestras molestias. ------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20150622/e37256e8/attachment.html>

Reply by email

Maxi
to Juan Perles

lo que tienes que saber que clase de objeto es en realidad. Si heredan del mismo padre podrias hacer eso. Pero el memo tiene lines.text

llamas

ControlCorrecto(Edit1);
ControlCorrecto(Memo1);
function TForm1.ControlCorrecto(Sender: TObject): Boolean;
begin
  Result:=False; //por si no es ninguno de los esperados
  if Sender is TMemo then //preguntamos si es un objeto memo
  Begin
      result:= length(Trim(Sender as TMemo.Lines.Text))= 0; //tratamos
al objeto como un memo
  end
  Else
    if Sender is TEdit then //preguntamos si es un objeto Edit
    Begin
        result:= length(Trim(TEdit(Sender).Text))= 0; //tratamos al
objeto como un edit en formato Cast estilo C++
    end
end;

El d�a 22 de junio de 2015, 4:23, Juan Perles <perlesj en gmail.com> escribi�:

Show quoted text 41 lines
Quiero hacer una serie de comprobaciones que son iguales a un Control TEdit y a un TMemo. Como se ve en el ejemplo de mas abajo, el cuerpo de los procedimientos es el mismo, lo �nico que cambia es la cabecera. �No puedo hacer un �nico procedimiento? function TForm1.EditCorrecto(Control: TEdit): Boolean; begin if length(Trim(Control.Text))= 0 then RESULT := False else RESULT := True; end; function TForm1.MemoCorrecto(Control: TMemo): Boolean; begin if length(Trim(Control.Text))= 0 then RESULT := False else RESULT := True; end; He intentado unificarlos haciendo el siguiente procedimiento function TForm1.ControlCorrecto(Sender: TObject): Boolean; begin if length(Trim(Sender.Text))= 0 then RESULT := False else RESULT := True; end; El resultado es que no me reconoce el Atributo Text. Muchas gracias por anticipado por vuestras molestias. _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
El que pregunta aprende, y el que contesta aprende a responder. No a la obsolecencia programada: http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml Linux User #495070 http://domonetic.com/blog

Reply by email

Juan Perles
to Maxi

Muchas gracias Maxi, tras probar el ejemplo que t� me has mandado me daban estos errores:
Unit1.pas(69,41) Error: Only class methods, class properties and class variables can be referred with class references
Unit1.pas(69,46) Error: Only class class methods, class properties and class variables can be accessed in class methods
Unit1.pas(73,40) Error: Only class methods, class properties and class variables can be referred with class references
Unit1.pas(73,40) Error: Only class class methods, class properties and class variables can be accessed in class methods
Pero tu ayuda me ha sido valiosisima pues me has abierto un camino en el que he profundizado y ya me funciona
con este c�digo:

function TForm1.ControlCorrecto(Sender: TObject): Boolean;
begin
  RESULT := False;
  if Sender is TMemo then begin
    // RESULT:= length(Trim(Sender as TMemo.Lines.Text)) = 0;
    if length(Trim(Tmemo(Sender).Text)) = 0 then
      EXIT;
  end;
  if Sender is TEdit then begin
    if length(Trim(TEdit(Sender).Text)) = 0 then
      EXIT;
  end;
  RESULT := True;
end;

Te repito much�simas gracias.

El 22 de junio de 2015, 14:51, Maxi <maximiliano.duarte en gmail.com> escribi�:

Show quoted text 91 lines
lo que tienes que saber que clase de objeto es en realidad. Si heredan del mismo padre podrias hacer eso. Pero el memo tiene lines.text llamas ControlCorrecto(Edit1); ControlCorrecto(Memo1); function TForm1.ControlCorrecto(Sender: TObject): Boolean; begin Result:=False; //por si no es ninguno de los esperados if Sender is TMemo then //preguntamos si es un objeto memo Begin result:= length(Trim(Sender as TMemo.Lines.Text))= 0; //tratamos al objeto como un memo end Else if Sender is TEdit then //preguntamos si es un objeto Edit Begin result:= length(Trim(TEdit(Sender).Text))= 0; //tratamos al objeto como un edit en formato Cast estilo C++ end end; El d�a 22 de junio de 2015, 4:23, Juan Perles <perlesj en gmail.com> escribi�: > Quiero hacer una serie de comprobaciones que son iguales a un Control TEdit > y a un TMemo. > Como se ve en el ejemplo de mas abajo, el cuerpo de los procedimientos es el > mismo, lo �nico que cambia es la cabecera. �No puedo hacer un �nico > procedimiento? > > function TForm1.EditCorrecto(Control: TEdit): Boolean; > begin > if length(Trim(Control.Text))= 0 then > RESULT := False > else > RESULT := True; > end; > > function TForm1.MemoCorrecto(Control: TMemo): Boolean; > begin > if length(Trim(Control.Text))= 0 then > RESULT := False > else > RESULT := True; > end; > > He intentado unificarlos haciendo el siguiente procedimiento > > function TForm1.ControlCorrecto(Sender: TObject): Boolean; > begin > if length(Trim(Sender.Text))= 0 then > RESULT := False > else > RESULT := True; > end; > > El resultado es que no me reconoce el Atributo Text. > > Muchas gracias por anticipado por vuestras molestias. > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus.freepascal.org > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es > -- El que pregunta aprende, y el que contesta aprende a responder. No a la obsolecencia programada: http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml Linux User #495070 http://domonetic.com/blog _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20150622/4a4a9c80/attachment.html>

Reply by email

Maxi
to Juan Perles

jeje, faltaron unos parentesis.... es que no lo hice sobre el ide

El d�a 22 de junio de 2015, 15:57, Juan Perles <perlesj en gmail.com> escribi�:

Show quoted text 131 lines
Muchas gracias Maxi, tras probar el ejemplo que t� me has mandado me daban estos errores: Unit1.pas(69,41) Error: Only class methods, class properties and class variables can be referred with class references Unit1.pas(69,46) Error: Only class class methods, class properties and class variables can be accessed in class methods Unit1.pas(73,40) Error: Only class methods, class properties and class variables can be referred with class references Unit1.pas(73,40) Error: Only class class methods, class properties and class variables can be accessed in class methods Pero tu ayuda me ha sido valiosisima pues me has abierto un camino en el que he profundizado y ya me funciona con este c�digo: function TForm1.ControlCorrecto(Sender: TObject): Boolean; begin RESULT := False; if Sender is TMemo then begin // RESULT:= length(Trim(Sender as TMemo.Lines.Text)) = 0; if length(Trim(Tmemo(Sender).Text)) = 0 then EXIT; end; if Sender is TEdit then begin if length(Trim(TEdit(Sender).Text)) = 0 then EXIT; end; RESULT := True; end; Te repito much�simas gracias. El 22 de junio de 2015, 14:51, Maxi <maximiliano.duarte en gmail.com> escribi�: > > lo que tienes que saber que clase de objeto es en realidad. Si heredan > del mismo padre podrias hacer eso. Pero el memo tiene lines.text > > > llamas > > ControlCorrecto(Edit1); > ControlCorrecto(Memo1); > > function TForm1.ControlCorrecto(Sender: TObject): Boolean; > begin > Result:=False; //por si no es ninguno de los esperados > > if Sender is TMemo then //preguntamos si es un objeto memo > Begin > result:= length(Trim(Sender as TMemo.Lines.Text))= 0; //tratamos > al objeto como un memo > end > Else > if Sender is TEdit then //preguntamos si es un objeto Edit > Begin > result:= length(Trim(TEdit(Sender).Text))= 0; //tratamos al > objeto como un edit en formato Cast estilo C++ > end > > > end; > > El d�a 22 de junio de 2015, 4:23, Juan Perles <perlesj en gmail.com> > escribi�: > > Quiero hacer una serie de comprobaciones que son iguales a un Control > > TEdit > > y a un TMemo. > > Como se ve en el ejemplo de mas abajo, el cuerpo de los procedimientos > > es el > > mismo, lo �nico que cambia es la cabecera. �No puedo hacer un �nico > > procedimiento? > > > > function TForm1.EditCorrecto(Control: TEdit): Boolean; > > begin > > if length(Trim(Control.Text))= 0 then > > RESULT := False > > else > > RESULT := True; > > end; > > > > function TForm1.MemoCorrecto(Control: TMemo): Boolean; > > begin > > if length(Trim(Control.Text))= 0 then > > RESULT := False > > else > > RESULT := True; > > end; > > > > He intentado unificarlos haciendo el siguiente procedimiento > > > > function TForm1.ControlCorrecto(Sender: TObject): Boolean; > > begin > > if length(Trim(Sender.Text))= 0 then > > RESULT := False > > else > > RESULT := True; > > end; > > > > El resultado es que no me reconoce el Atributo Text. > > > > Muchas gracias por anticipado por vuestras molestias. > > > > _______________________________________________ > > Lazarus-es mailing list > > Lazarus-es en lists.lazarus.freepascal.org > > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es > > > > > > -- > El que pregunta aprende, y el que contesta aprende a responder. > > No a la obsolecencia programada: > > http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml > > Linux User #495070 > http://domonetic.com/blog > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus.freepascal.org > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
El que pregunta aprende, y el que contesta aprende a responder. No a la obsolecencia programada: http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml Linux User #495070 http://domonetic.com/blog

Reply by email

Jose antonio Cuello Principal
to Juan Perles: Quiero hacer una serie de comprobaciones que son iguales a un Control TEdit y a un TMemo.…

Hola, si solo necesitas verificaciones con el contenido, no necesitas el objeto sino la cadena por lo que la funci�n ser�a

function TForm1.VerificarLongitud(AValue: String): Boolean;
begin
Result := (Length(Trim(AValue)) > 0);
end;
y la llamas con VerificarLongitud(Edit1.Text) o VerificarLongitud(Memo1.Lines.Text);

Un saludo

Earlier message 40 lines
----- Mensaje original ----- De: "Juan Perles" <perlesj en gmail.com> Para: lazarus-es en lists.lazarus.freepascal.org Enviados: Lunes, 22 de Junio 2015 9:23:25 Asunto: [Lazarus-es] Ayuda con POO Quiero hacer una serie de comprobaciones que son iguales a un Control TEdit y a un TMemo. Como se ve en el ejemplo de mas abajo, el cuerpo de los procedimientos es el mismo, lo �nico que cambia es la cabecera. �No puedo hacer un �nico procedimiento? function TForm1.EditCorrecto(Control: TEdit): Boolean; begin if length(Trim(Control.Text))= 0 then RESULT := False else RESULT := True; end; function TForm1.MemoCorrecto(Control: TMemo): Boolean; begin if length(Trim(Control.Text))= 0 then RESULT := False else RESULT := True; end; He intentado unificarlos haciendo el siguiente procedimiento function TForm1.ControlCorrecto(Sender: TObject): Boolean; begin if length(Trim(Sender.Text))= 0 then RESULT := False else RESULT := True; end; El resultado es que no me reconoce el Atributo Text. Muchas gracias por anticipado por vuestras molestias.

Reply by email

Juan Perles
to Jose antonio Cuello Principal

Muchas gracias Jos� Antonio, en un principio lo ten�a como t� me indicas, pero luego pens� en que si no estaba relleno el control darle el "focus", tambi�n comprobar que s�lo introduc�an caracteres permitidos. Al encontrar alg�n car�cter no permitido poner el "focus" sobre el car�cter err�neo. As� que necesito "jugar" con todo el control, ya sea Edit o Memo.

Juan Perles
628.482.007
Enviado desde mi iPad

Show quoted text 68 lines
El 23/6/2015, a las 8:23, Jose antonio Cuello Principal <jcuello en artextrading.com> escribi�: Hola, si solo necesitas verificaciones con el contenido, no necesitas el objeto sino la cadena por lo que la funci�n ser�a function TForm1.VerificarLongitud(AValue: String): Boolean; begin Result := (Length(Trim(AValue)) > 0); end; y la llamas con VerificarLongitud(Edit1.Text) o VerificarLongitud(Memo1.Lines.Text); Un saludo De: "Juan Perles" <perlesj en gmail.com> Para: lazarus-es en lists.lazarus.freepascal.org Enviados: Lunes, 22 de Junio 2015 9:23:25 Asunto: [Lazarus-es] Ayuda con POO Quiero hacer una serie de comprobaciones que son iguales a un Control TEdit y a un TMemo. Como se ve en el ejemplo de mas abajo, el cuerpo de los procedimientos es el mismo, lo �nico que cambia es la cabecera. �No puedo hacer un �nico procedimiento? function TForm1.EditCorrecto(Control: TEdit): Boolean; begin if length(Trim(Control.Text))= 0 then RESULT := False else RESULT := True; end; function TForm1.MemoCorrecto(Control: TMemo): Boolean; begin if length(Trim(Control.Text))= 0 then RESULT := False else RESULT := True; end; He intentado unificarlos haciendo el siguiente procedimiento function TForm1.ControlCorrecto(Sender: TObject): Boolean; begin if length(Trim(Sender.Text))= 0 then RESULT := False else RESULT := True; end; El resultado es que no me reconoce el Atributo Text. Muchas gracias por anticipado por vuestras molestias. _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es -- Jos� Antonio Cuello Dpto. Informatica Artex Trading sa Gold Football sl _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20150623/dca2af81/attachment.html>

Reply by email

SocGer

Espero poderte dar la contestaci�n.

El componente Memo no devuelve un text, sino Memo.Lines.Text

Saludos

Show quoted text 35 lines
Quiero hacer una serie de comprobaciones que son iguales a un Control TEdit y a un TMemo. Como se ve en el ejemplo de mas abajo, el cuerpo de los procedimientos es el mismo, lo �nico que cambia es la cabecera. �No puedo hacer un �nico procedimiento? function TForm1.EditCorrecto(Control: TEdit): Boolean; begin if length(Trim(Control.Text))= 0 then RESULT := False else RESULT := True; end; function TForm1.MemoCorrecto(Control: TMemo): Boolean; begin if length(Trim(Control.Text))= 0 then RESULT := False else RESULT := True; end; He intentado unificarlos haciendo el siguiente procedimiento function TForm1.ControlCorrecto(Sender: TObject): Boolean; begin if length(Trim(Sender.Text))= 0 then RESULT := False else RESULT := True; end; El resultado es que no me reconoce el Atributo Text. >

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20150623/47679072/attachment.html>

Reply by email