PDA

Ver la Versión Completa : 'Return no-apply'


Roy
10-06-2003, 16:07:40
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.....


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:


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
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
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.


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ó:
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
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