Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   'Return no-apply' (https://www.clubdelphi.com/foros/showthread.php?t=1295)

Roy 10-06-2003 16:07:40

'Return no-apply'
 
Quiero cancelar la ejecución de un evento.

En otro lenguaje que utilizo, cuando estoy en un evento, puedo condicionar su aplicación a una validación. Si esa validación falla, entonces escribo: Return No-Apply, y se produce un 'Exit' del evento pero además, lo que me interesa ahora, éste no se aplica.

Por ejemplo, si escribo Return No-Apply en el On-change de un combo-box, la selección del nuevo ítem en el combo no se realiza.

¿ Existe una sentencia que haga algo parecido en Delphi ?

Gracias desde ya.

Roy

__cadetill 10-06-2003 16:22:50

Abort¿?


(para hacer la competencia en la respuesta mas corta y valida)

Pero ampliandola un poco y sacado de la ayuda de Delphi.....

Cita:

Description

Use Abort to escape from an execution path without reporting an error.

Abort raises a special "silent exception" (EAbort), which operates like any other exception, but does not display an error message to the end user. Abort redirects execution to the end of the last try .. finally block.

roman 10-06-2003 16:31:00

Con los eventos que ya están definidos me parece que no. Muchos de ellos suceden cuando el evento en sí ya ocurrió. Por ejemplo el evento OnChange por lo general es lanzado desde un método protegido Change cuya última acción es lanzar el evento, es decir, una vez que ya ocurrió el cambio.

Algunos eventos están diseñados específicamente para ser interrumpidos de ser necesario. Por ejemplo, un TreeView tiene el evento OnChanging que ocurre antes del evento OnChange y que pasa un parámetro AllowChange por referencia para que el programador pueda interrumpir el cambio.

En resumen sólo puedes interrumpir los eventos que están diseñados para ello. De la mayoría te enteras cuando en realidad ya ocurrieron.

Lo único que ahorita se me ocurre en tu caso específico es guardar el índice (ItemIndex) seleccionado en una variable y si las condiciones no se cumplen restaurarlo en el evento OnChange. Aunque posiblemente tengas que deshabilitar temporalmente el evento para no caer en él recursivamente:

Código:

var
  Evento: TNotifyEvent;

begin
  if not Condicion then
  begin
    Evento := ComboBox.OnChange;
    ComboBox.OnChange := nil;
    ComboBox.ItemIndex := IndexGuardado;
    ComboBox.OnChange := Evento;
  end
  else
  begin
    { Procesar el evento }
    IndexGuardado := ComboBox.ItemIndex;
  end;


roman 10-06-2003 16:33:59

Cita:

Posteado originalmente por cadetill
Abort¿?


(para hacer la competencia en la respuesta mas corta y valida)

Beeeeeeeeeeeee!

Prueba nooooo superada!

:D

Abort ciertamente interrumpe el flujo de ejecución pero el problema es, como le indiqué que cuando el programador se entera del evento, normalmente éste ya ocurrió así que no hay forma de pararlo.

// Saludos

__cadetill 10-06-2003 16:44:31

Cita:

Posteado originalmente por roman
Prueba nooooo superada!
jejeje, bueno bueno, tienes razon, pero ya llegara el dia en que te la igualemos!!!! (porque superar dificil :p)

Roy 10-06-2003 17:16:49

Cada día se aprende algo nuevo. Gracias por sus respuestas....

Roy

marcoszorrilla 10-06-2003 18:31:29

Estoy con Román muchos eventos se producen por eso mismo porque son eventos y pueden o no producirse y no dependen de nosotros sino del usuario y las acciones que realice, por cierto a veces son de lo más peregrinas.

Código:

procedure TForm1.Edit1Change(Sender: TObject);
var
n,n1,n2:Integer;
begin
  if edit1.Text = 'Pepe' then
  begin
  n1:=15;
  n2:=15;
  n:=n1+n2;
  ShowMessage('Resultado:'+IntToStr(n));
  end;
  //Y sino escribes Pepe no hago nada?

end;

Por lo tanto creo que si el evento puede producirse a pesar nuestro, por qué no controlar el propio evento?

Un Saludo.

andres1569 10-06-2003 21:21:42

Cadetill escribió:
Cita:

jejeje, bueno bueno, tienes razon, pero ya llegara el dia en que te la igualemos!!!! (porque superar dificil )
Bueno, bueno, puede que ese día haya llegado ya. Si estás atento mañana por la mañana, a eso de las 8'30 (creo que a esa hora ya duermen en México) lanzo la pregunta de marras en el foro de Varios.

¡¡ No me falles !!, revísate el hilo donde proponías cómo escribir un array a archivo, esa función que empieza por H y acaba por i; ya me encargaré de que esté bien formulada (lo del peso y el valor) para que Roman no puede alegar ninguna objeción.

De ahí al Guinness hay sólo un paso.:D :D :D :D :D

roman 10-06-2003 21:33:34

Cita:

Posteado originalmente por andres1569
Cadetill escribió:
...Si estás atento mañana por la mañana, a eso de las 8'30 (creo que a esa hora ya duermen en México)...

¡Con la cantidad de trabajo que tengo! Estoy yéndome a dormir alrededor de las 3 de la mañana (me parece que en España se están levantando a esa hora...)

:D

andres1569 10-06-2003 22:37:38

Experimento abortado. Esperaremos a que algún iniciado en Delphi formule la preguntita. Además, no tendría validez una pregunta amañada. :(

Un cordial saludo a todos


La franja horaria es GMT +2. Ahora son las 21:21:54.

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