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 08-08-2007
eldiegofg eldiegofg is offline
Miembro
 
Registrado: mar 2007
Ubicación: Colón - Entre Ríos
Posts: 54
Poder: 18
eldiegofg Va por buen camino
Consulta

Tengo un componente al que quiero asignarle un procedimiento a su evento OnClick y otro procedimiento diferente al evento OnDobleClick. Mi problema es que cuando hago doble clic, me ejecuta primero la rutina de OnClick y luego la de OnDobleClick. Hay alguna forma de evitar o controlar esto?
Agradezco su tiempo y dedicacion de antemano y felicito por este fabuloso foro. Saludos
Responder Con Cita
  #2  
Antiguo 08-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me parece dificil, cuando haces click, pues eso, ya lo hiciste, ejecutara el evento, yo te aconsejaria que cambiaras el evento ondobleclick por otro.
Saludos
Responder Con Cita
  #3  
Antiguo 08-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Hola eldiegofg
De lo mas asequible que he visto por ahí, me quedo con esto.
Código Delphi [-]
procedure TForm1.TuComponenteClick(Sender: TObject);
var
  Msg: TMsg;
  TargetTime: Longint;
begin
  TargetTime := GetTickCount + GetDoubleClickTime;

  while GetTickCount < TargetTime do
    if PeekMessage(Msg, TuComponente.Handle, WM_LBUTTONDBLCLK, WM_LBUTTONDBLCLK, PM_NOREMOVE)
      then Exit;
  .... codigo......
end;


procedure TForm1.TuComponenteDblClick(Sender: TObject);
begin
ShowMessage('DOBLE click');
end;

Espero que te sirva.

Saludos
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #4  
Antiguo 08-08-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Lo probaste ArdiIIa? pues a mi no me funciona... analizando un poco tiene entremezclado los conceptos de Caral, el Güindos envía un mensaje a la aplicacion de la "caida" de un boton (WM_?BUTTONDOWN), la VCL traduce mensaje como OnClick, cuando se hace doble click y la ventana creada con el estilo que acepta tal cosa (CS_DBLCLKS), recive el mensaje del doble click (WM_?BUTTONDBLCLK)... sin embargo el problema no es de la VCL del hermoso Delphi, si no del manejo de los mensajes del Güindos... talvez no es falla si no es algo real pues como dijo el amigo Caral "...cuando haces click, pues eso, ya lo hiciste..."

Veamos...
Responder Con Cita
  #5  
Antiguo 08-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Cita:
Empezado por cHackAll Ver Mensaje
Lo probaste ArdiIIa? pues a mi no me funciona... analizando un poco tiene entremezclado los conceptos de Caral, el Güindos envía un mensaje a la aplicacion de la "caida" de un boton (WM_?BUTTONDOWN), la VCL traduce mensaje como OnClick, cuando se hace doble click y la ventana creada con el estilo que acepta tal cosa (CS_DBLCLKS), recive el mensaje del doble click (WM_?BUTTONDBLCLK)... sin embargo el problema no es de la VCL del hermoso Delphi, si no del manejo de los mensajes del Güindos... talvez no es falla si no es algo real pues como dijo el amigo Caral "...cuando haces click, pues eso, ya lo hiciste..."

Veamos...


Que quieres que te diga cHackAll.
Si no lo hubiera probado, no lo hubiera puesto, y si no funcionara, tampoco.

Esta cuestión no es la primera que que se plantea, sino que ya es muy antigua.
Como puedes ver puse "de lo mas asequible", que no la mas convincente...

No se de que tipo de componente estamos hablando y que requerimientos tiene eldiegofg.

Quizas, lo mas conveniente sería hacer una derivación del componente y controlar todos los mensajes que recibe a su WndProc, y ahí si se podría discernir si ha sido un Click o un DblClick....

¿Merece la pena ....?

Saludos
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #6  
Antiguo 09-08-2007
eldiegofg eldiegofg is offline
Miembro
 
Registrado: mar 2007
Ubicación: Colón - Entre Ríos
Posts: 54
Poder: 18
eldiegofg Va por buen camino
Muchas gracias a todos por su tiempo y ayuda. Voy a probar lo propuesto por ArdiIIa a ver si me funciona y les cuento. El componente es un calendario sobre el cual estoy haciendo un sistema de reservas. Con el doble click doy de alta una nueva reserva, mientras que el click simple en una fecha lo utilizaba para mostrar (usando el Hint) informacion sobre la reservas de dicha fecha. Tal vez deberia hacer que el Hint se muestre al pasar el puntero del mouse sobre cada dia, pero soy nuevo en esto y sinceramente no se como hacer... Que dicen ustedes?
Responder Con Cita
  #7  
Antiguo 09-08-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por ArdiIIa
...Quizas, lo mas conveniente sería hacer una derivación del componente y controlar todos los mensajes que recibe a su WndProc, y ahí si se podría discernir si ha sido un Click o un DblClick....
Estimado compañero, el comentario fue de las mejores intenciones no era para que respondas de esa forma y casi que ni estaba orientado a "alguien". Me parece un tema curioso por eso yo participo. Lo que comentabas del WndProc tampoco funcionará por la explicacion que di con anterioridad.

Cita:
Empezado por ArdiIIa
... ¿Merece la pena ....? ...
Yo creo que si.

Saludos y haber que hacemos...
Responder Con Cita
  #8  
Antiguo 09-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
ArdiIIa y cHackAll, ya os pasasteis de copas, a la casa.
La verdad mejor no, vamos a la taberna, yo invito.
Saludos, niños.
Responder Con Cita
  #9  
Antiguo 09-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Cita:
Empezado por cHackAll
Estimado compañero, el comentario fue de las mejores intenciones no era para que respondas de esa forma y casi que ni estaba orientado a "alguien". Me parece un tema curioso por eso yo participo. Lo que comentabas del WndProc tampoco funcionará por la explicacion que di con anterioridad.



Yo creo que si.

Saludos y haber que hacemos...
Estimado cHackAll, solamente respondí a tu pregunta
Cita:
Lo probaste ArdiIIa?
Tal vez no del modo adecuado, pero ahora me surge la duda de si tú lo has probado?, porque reitero que SI FUNCIONA.

En cuando a lo de capturar los mensajes del componente, bueno pues... en vez de andar "hackeando componentes", la prueba que hago es ir directamente a por su WndProc y el resultado es este....

Código Delphi [-]
procedure TFormMain.Button1Click(Sender: TObject);
begin
FNuevaInstancia := MakeObjectInstance(NuevoWndProc);
FPrevInstancia  := Pointer(GetWindowLong(ScrollBox1.Handle,GWL_WNDPROC));
SetWindowLong(ScrollBox1.Handle,GWL_WNDPROC, LongInt(FNuevaInstancia));
end;



procedure TFormMain.NuevoWndProc(var Message: TMessage);
begin
   with Message do
     case Msg of
       WM_RBUTTONDBLCLK :
       begin
          ShowMessage('DOBLE CLICK');
          Result := 1;
       end;
       WM_LBUTTONUP :
       begin
          ShowMessage('UN CLICK');
          Result := 1;
       end;

       else
         Result := CallWindowProc(FPrevInstancia,
                                  ScrollBox1.Handle,
                                  Msg,
                                  wParam,
                                  lParam);
   end;


 end;



Ciertamente, NO FUNCIONA.

Pero para salir del paso, observarás que he cambiado lo que debería ser el botón izquierdo por el derecho, y de ese modo SI FUNCIONA... Aunque cambia la mecánica, podría ser una solución.


Saludos.
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #10  
Antiguo 09-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Leyendo a eldiegofg he de decir que tal vez a la vista de componente con lo que quieres utilizar el sistema, si utilizas el segundo sistema propuesto, el de WndProc, cuando efectúes un solo click, tal vez se reciban dos mensajes de un solo click...


Leyendo a Caral: Es que el día de hoy (Ayer), ha estado repledo de celebraciones y .... ya se sabe...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #11  
Antiguo 12-08-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Vaya, creo que lo que debías hacer a continuación es revisar éste truco.

Saludos!
Responder Con Cita
  #12  
Antiguo 12-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Esto me suena.... parece un "Deja Vu"
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #13  
Antiguo 12-08-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por ArdiIIa
Esto me suena.... parece un "Deja Vu"
Así es, solo falta la respuesta
Responder Con Cita
  #14  
Antiguo 12-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Ya la sabes, y parece que al interesado, no le interesa...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #15  
Antiguo 12-08-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por ArdiIIa
Ya la sabes, y parece que al interesado, no le interesa...
Vaya, será que se asustó con mi nick???
Responder Con Cita
  #16  
Antiguo 13-08-2007
eldiegofg eldiegofg is offline
Miembro
 
Registrado: mar 2007
Ubicación: Colón - Entre Ríos
Posts: 54
Poder: 18
eldiegofg Va por buen camino
Hola muchachos, como estan?? Perdon por la demora, no me asuste ni nada de eso. Es que no tengo conexion a Internet en mi casa y puedo entrar cuando voy a algun cybercafe. Ya consegui una solucion alternativa a mi problema, igual ahora veo que hay otro metodo que publicaron para solucionar este inconveniente. Lo voy a probar. Agradezco mucho su ayuda y espero que puedan seguir colaborando con gente nueva como yo y teniendo tanta paciencia . Saludos y muchas gracias
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta dentro de otra consulta judit25 Conexión con bases de datos 1 25-06-2007 15:52:15
consulta sobre consulta superhopi SQL 2 16-05-2003 19:01:47


La franja horaria es GMT +2. Ahora son las 03:26:52.


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