FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
'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 |
#2
|
|||
|
|||
Abort¿?
(para hacer la competencia en la respuesta mas corta y valida) Pero ampliandola un poco y sacado de la ayuda de Delphi..... Cita:
|
#3
|
||||
|
||||
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; Última edición por roman fecha: 10-06-2003 a las 16:43:42. |
#4
|
||||
|
||||
Cita:
Prueba nooooo superada! 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 |
#5
|
|||
|
|||
Cita:
|
#6
|
|||
|
|||
Cada día se aprende algo nuevo. Gracias por sus respuestas....
Roy |
#7
|
||||
|
||||
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; Un Saludo. |
#8
|
|||
|
|||
Cadetill escribió:
Cita:
¡¡ 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.
__________________
Guía de Estilo |
#9
|
||||
|
||||
Cita:
|
#10
|
|||
|
|||
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
__________________
Guía de Estilo |
|
|
|