Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Controles (https://www.clubdelphi.com/foros/showthread.php?t=70676)

dao_ar 04-11-2010 14:47:28

Controles
 
Amigos, estoy dandole vueltas a un tema que no puedo definir

Tengo unos controles (puede ser cualquiera) para introducir datos, con una validacion que obliga a introducir un dato, sino no puede salir (onExit). pero si el usuario se arrepiente debo dejarlo volver a los controles anteriores o pulsar el boton de cancelar, pero no debo dejarlo continuar con la carga, sin completar los datos en su totalidad.
Como puedo detectar cuando pulsa sobre un control anterior, o posterior o sobre un boton ? (en este caso solo cancelar)
No quiero hacerlo al final, antes de grabar verificar que todos los controles esten correctos, quiero hacerlo a medida que lo carga.


Gracias a todos

noshy 04-11-2010 15:48:44

No se si entendi bien, pero creo que quieres hacer una validacion individual para cada edit por ejemplo y no hacerlo en el boton grabar, si es asi la puedes hacer en el evento onexit de cada control, o sea la vaidas cuando intenta salir del control, cuando todos los controles esten validados recien activas el boton grabar, de lo contrario puede dejar activo el boton cancelar.

Espero que te sirva y yo haya captado la idea, si no es asi, pon algun ejemplo y te ayudo con gusto.

dao_ar 04-11-2010 16:02:03

Controles
 
No es eso. En cada control estoy validando y no puede sarlir salvo que introduzca un dato. El tema es que si quierecancelar o ir a los controles anteriores no puede hacerlos por el valid en el onExit. y es esos casos, solo en esos, si tiene que salir, pero no debe poder ir a los controles siguientes si no introduce un dato. Se entiende.
Lo que necesito es que en el caso de que sea el boton de cancelar o en los casos de que sean controles anteriores pueda salir del control, pero no pueda avanzar. Tengo que detectar que control pulsa para saber si lo dejo salir o no.
Espero que se entienda

noshy 04-11-2010 16:10:04

deberias ver que control focusea, en el evento onExit fijate a donde quiere ir...

Código Delphi [-]
if (not canterior1.Focused) or (not canterior2.Focused) then
  begin    
    showmessage('no puedes avanzar a ese control...');
    this.setfocus;
    exit;
  end;

dao_ar 04-11-2010 16:40:09

controles
 
Ok.

Estaba intentando hacer algo asi, tambien queria probar con ControlState. pero me devuelve un error. Muchas gracias

ecfisa 04-11-2010 16:48:25

Hola dao_ar.

Fijate si no te da alguna idea este tema.

Saludos. :)

dao_ar 04-11-2010 17:07:25

Controles
 
Gracias

Tambien puede ser una buena alternativa, se entiende perfectamente.

Gracias a todos.

roman 04-11-2010 17:59:32

Otra idea:

El formulario tiene una propiedad ActiveControl, cuyo valor es el control activo en cada momento. En el evento OnExit de un control, ActiveControl contiene ya el control al que se va a desplazar el foco mientras que (Sender as TWinControl) contiene el control que se está abandonando. Entonces, podemos comparar la propiedad TabOrder de ambos controles para saber si estamos avanzando o retrocediendo:

Código Delphi [-]
{
  Asignamos este evento a todos los Edit.
}
procedure TForm1.EditExit(Sender: TObject);
begin
  if ((Sender as TEdit).Text = '') and ((Sender as TWinControl).TabOrder < ActiveControl.TabOrder) then
  begin
    ShowMessage('Falta capturar el dato');
    (Sender as TWinControl).SetFocus;
  end;
end;

// Saludos

dao_ar 09-11-2010 14:00:22

Contorles
 
Gracias por las ideas, con ellas pude resolver el problema decentemente !!!

roman 09-11-2010 17:31:19

dao_ar:

Siempre es bueno que aclares cuál fue tu solución final para que otros con dudas similares puedan aprovecharla.

// Saludos

dao_ar 17-11-2010 15:23:51

Controles
 
Ok.

Lo solucione con preguntando a donde va el foco (Noshy).

if (not canterior1.Focused) or (not canterior2.Focused) then ...

Tambien anduvo la idea de Roman
if ((Sender as TEdit).Text = '') and ((Sender as TWinControl).TabOrder < ActiveControl.TabOrder) then
..
pero la otra es mas simple. Y como no dejo muchas alternativas donde ir, solo para los anteriores o Cancelar
se puede controlar con la alternativa de Noshy.

Gracias a todos.


La franja horaria es GMT +2. Ahora son las 23:32:50.

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