Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-06-2003
Roy Roy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Entre Ríos/Argentina
Posts: 22
Poder: 0
Roy Va por buen camino
Question '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
Responder Con Cita
  #2  
Antiguo 10-06-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 10-06-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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.
Responder Con Cita
  #4  
Antiguo 10-06-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Posteado originalmente por cadetill
Abort¿?


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

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
Responder Con Cita
  #5  
Antiguo 10-06-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
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 )
Responder Con Cita
  #6  
Antiguo 10-06-2003
Roy Roy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Entre Ríos/Argentina
Posts: 22
Poder: 0
Roy Va por buen camino
Cada día se aprende algo nuevo. Gracias por sus respuestas....

Roy
Responder Con Cita
  #7  
Antiguo 10-06-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 10-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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.
__________________
Guía de Estilo
Responder Con Cita
  #9  
Antiguo 10-06-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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...)

Responder Con Cita
  #10  
Antiguo 10-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 07:26:48.


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
Copyright 1996-2007 Club Delphi