Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Llamar a Evento OnKeyUp (https://www.clubdelphi.com/foros/showthread.php?t=82573)

Novás 20-03-2013 11:20:48

Llamar a Evento OnKeyUp
 
Hola, en mi aplicación necesito llamar a la función OnKeyUp de un TLabelEdit desde el evento OnActivate del Formulario.

El caso es el siguiente, tengo varios TLabelEdit en mi formulario a los cuales les asigno un valor en el OnActivate del Formulario. Una vez rellenados estos valores necesito que los TLabelEdit ejecuten el evento OnKeyUp el cual realiza unos cálculos pero no consigo ejecutar la llamada.

He probado de la siguiente forma:

Código Delphi [-]
letra:=word('a');
LabelEdit1.OnKeyUp(nil,letra,ssShift);

Esto me lanza el error "Incompatible types: TShifState and Enumeration".

Estoy casi seguro que el error lo tengo en el tercer parámetro del evento pero no se que debo poner ahí para que funcione.

Agradezco cualquier ejemplo de llamada a este evento que me podáis proporcionar.

Muchas gracias.

dec 20-03-2013 11:35:51

Hola,

Prueba, de momento, con algo así:

Código Delphi [-]
LabelEdit1.OnKeyUp( nil, letra, [ ssShift ] );

Novás 20-03-2013 11:36:16

He decido cambiar el evento OnKeyUp por el OnChange y solucioné mi problema.
De todas formas si alguién me puede responder a mi pregunta anterior lo agradecería, nunca está de más aprender algo nuevo.

Gracias a todos nuevamente.

Novás 20-03-2013 11:38:26

Muchas gracias DEC, efectivamente ha funcionado.

Hoy ya he aprendido algo nuevo. XD

ozsWizzard 20-03-2013 12:24:14

De todas formas, no es buena idea eso de forzar eventos, así nos engañamos. Si se quiere ejecutar el mismo código, lo mejor es tener un procedimiento que espere la mismas variables que espera el evento y poner ahí el código. Una vez hecho esto, el evento llamaría al procedimiento que hemos hecho al uso.

Al menos, bajo mi opinión, aunque el resultado sea el mismo, a mi manera es más claro. Llamando a los eventos directamente, puede haber un momento en el futuro que no me acuerde de que llamaba al evento y volverme loco pensando por qué pasa por un sitio que no debería pasar.

dec 20-03-2013 16:40:44

Hola,

Cita:

Empezado por ozsWizzard (Mensaje 457170)
De todas formas, no es buena idea eso de forzar eventos, así nos engañamos. Si se quiere ejecutar el mismo código, lo mejor es tener un procedimiento que espere la mismas variables que espera el evento y poner ahí el código. Una vez hecho esto, el evento llamaría al procedimiento que hemos hecho al uso.

Al menos, bajo mi opinión, aunque el resultado sea el mismo, a mi manera es más claro. Llamando a los eventos directamente, puede haber un momento en el futuro que no me acuerde de que llamaba al evento y volverme loco pensando por qué pasa por un sitio que no debería pasar.

Por eso digo... :)

Cita:

Prueba, de momento, con algo así:
Código Delphi [-]
LabelEdit1.OnKeyUp( nil, letra, [ ssShift ] );


ecfisa 20-03-2013 17:14:05

Hola.

También hay otra opción para prescindir de un procedimiento adicional, algo así como un "tiro libre indirecto"... :D
Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
begin
  with LabeledEdit1 do
  begin
    Perform(WM_LBUTTONDOWN, MK_LBUTTON, 0);
    Perform(WM_LBUTTONUP, MK_LBUTTON, 0);
  end;
end;

Saludos. :)

ozsWizzard 20-03-2013 17:22:45

Cita:

Empezado por dec (Mensaje 457190)
Hola,



Por eso digo... :)

Buen matiz ese :)

Al González 20-03-2013 20:41:25

Comparto el parecer de ozsWizzard y dec:

Cita:

Empezado por dec (Mensaje 320314)
Es posible "llamar" a un evento como a cualquier otro procedimiento, empero, no es una práctica recomendada. Tal vez deberías plantearte sacar del evento el código que se encarga de hacer lo que te interesa, y situarlo en un procedimiento aparte. Entonces, podrías llamar a dicho procedimiento cuando te fuera menester, bien en el evento a que haces referencia, bien desde otro lugar.

Un saludo histórico.

roman 20-03-2013 20:45:35

Es que con los años se vuelve flojo :D

Por cierto, ¡vaya memoria Al! :)

// Saludos

dec 20-03-2013 20:54:13

Sobreviviré en Internet. :D

Al González 20-03-2013 21:33:25

Cita:

Empezado por roman (Mensaje 457233)
Por cierto, ¡vaya memoria Al! :)

Cita:

Empezado por dec (Mensaje 457237)
Sobreviviré en Internet. :D

¡Memoria la de Google! :)

Confieso que buscaba un hilo donde yo había dicho algo similar, pero al ver ese mensaje de David me dije: ¿para qué buscar más? Este lo dice todo y sin rodeos. ^\||/

dec, tus enseñanzas serán trasmitidas por los siglos de los siglos. v:-)v


La franja horaria es GMT +2. Ahora son las 07:27:34.

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