Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   creacion (https://www.clubdelphi.com/foros/showthread.php?t=26614)

armando 28-10-2005 01:23:34

creacion
 
:) hola a todos nuevamente
utilizo delphi 5 y paradox
he creado unos componentes( tedit) en timpo de ejecucion

Código Delphi [-]
 procedure TFormulario.crear;
 var
   edt1:tedit;
 begin
   edt1 := TEdit.CReate(Formulario);
   edt1.Parent :=PANEL2;
   edt1.Name :='R1';
   edt1.Top := 40;
   edt1.Left := 16;
   edt1.Width := 33;
   Edt1.Text :=DM.QPTT1.ASSTRING;//query
   EDT1.TabOrder:=0;
   EDT1.OnKeyPress:=Edit1KeyPress;
   edt1.OnChange:=Edit1Change;
   {...}
hasta aqui todo bien

quiero crear un procedimiento para este objeto creado,

similar a este

Código Delphi [-]
 procedure TFormulario.Edit1Change(Sender: TObject);
 begin
   IF EDT1.TEXT='' THEN
   BEGIN
     EDT1.TEXT:='0';
     EDT1.SelectAll;
   END;
 end;
como lo hago en tiempo de ejecucion
gracias por su pronta respuesta

:D

jachguate 28-10-2005 01:26:04

Hola Armando.

Creo que ya es hora de usar la etiqueta [ delphi ], no:

Código Delphi [-]
begin
  if UsoEtiqueta('Delphi') then
    Writeln('Esto es mas legible, porque está indentado y tiene ' 
      + 'resaltada la sintaxis!')
  else
    Writeln('Ya tenes mas de 20 mensajes en el foro, es hora que te '
      + 'preocupes por seguir las reglas!');
end;

Hasta luego.

;)

vtdeleon 28-10-2005 01:35:31

Saludos
Cita:

Empezado por jachguate
Creo que ya es hora de usar la etiqueta [ delphi ], no:

Dando un empujonsito (Delphi-SQL).
:rolleyes:
Cita:

Empezado por Armando
quiero crear un procedimiento para este objeto creado,

Crearlos o Asignarlos?? :confused:

armando 28-10-2005 02:04:16

signarlo
 
hola
si es cierto
prometo que utilizar la etiquetas
y con respecto a la pregunta
es asignarlos

gracias.. :(

vtdeleon 28-10-2005 02:09:32

Saludos
Código Delphi [-]
Edit1.OnChange:=Edit1Change;
Suerte

jachguate 28-10-2005 16:44:29

Ampliando lo ya dicho por vtdeleon, solamente quiero apuntar que en la implementación que tenes del método Edit1Change, aunque efectivamente este se disparará para todos los edits que crees dinamicamente, en realidad seguirá actuando sobre Edit1, es decir, aún cuando el que esté cambiando es edit3, seguirá evaluando el valor de edit1 (y cambiandolo).

Supongo que lo que queres es que si Edit3 es el que cambia, sea el valor de este el que se modifique. En este caso, podes valerte del parámetro Sender del método, que traerá una referencia al edit que en realidad ha disparado el evento. Así, podes tener un solo método atendiendo los eventos de muchos objetos.

La codificación debiera lucir algo similar a lo siguiente:

Código Delphi [-]
procedure TFormulario.Edit1Change(Sender: TObject);
var
  EditCambia : TEdit; 
begin
  EditCambia := Sender as TEdit;
  if EditCambia.Text = '' then
  begin
    EditCambia.Text := '0';
    EditCambia.SelectAll;
  end;
end;

Hasta luego.

;)

roman 28-10-2005 16:49:31

Los muy puntillosos añadirían al principio:

Código Delphi [-]
if Sender is TEdit

Es que hay cada exagerado :rolleyes:

// Saludos

delphi.com.ar 28-10-2005 17:22:29

Otra opción puede ser que el scope de la variable edt1 en lugar de estar dentro del procedimiento create, pertenezca a la clase...
¿Porqué creas un objeto tan estático, que aparentemente siempre se crea, en tiempo de ejecución?

jachguate 28-10-2005 18:08:21

Cita:

Empezado por roman
Los muy puntillosos añadirían al principio:

Código Delphi [-]
if Sender is TEdit

Es que hay cada exagerado :rolleyes:

// Saludos

Suelo implementar esta interfaz "TPuntilloso", por eso he hecho un casteo seguro, con as. Si el sender no fuese un TEdit, saltará la excepción EInvalidTypeCast, protegiendo el código a la perfección, y siguiendo correctamente las sanas prácticas de programación: Si se rompe el contrato, se eleva una excepción.

Claro, con is se podria evitar esta excepción y no hacer nada, pero parece que en esta situación bastará con que se eleve. ;)

Hasta luego.

;)

roman 28-10-2005 20:29:37

¡Ah maestrooo! ¡Cuánta razón tienes! (De verdad)

Es esa costumbre mía de evitar el salto de excepciones si puedo verificarla previamente.

// Saludos


La franja horaria es GMT +2. Ahora son las 18:41:15.

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