Ver Mensaje Individual
  #3  
Antiguo 01-11-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 31
Lepe Va por buen camino
Pon un label en un Form y un Memo, pega este código.
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Memo1: TMemo;
    procedure Label1Click(Sender: TObject);
    procedure Label1DblClick(Sender: TObject);
    procedure FormDblClick(Sender: TObject);
    procedure FormClick(Sender: TObject);
  private
    { Private declarations }
   old,now:Int64;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Label1Click(Sender: TObject);
begin
   now := GetTickCount;
  if now - old > GetDoubleClickTime then
  begin
   Memo1.lines.Add('uno');
  end;
  Memo1.lines.Add(IntToStr(now)+ ' ' +IntToStr(old)+' DIF ' +
 IntToStr(now-old)+ ' gettick ' + IntToStr(GetDoubleClickTime));
  old :=  GetTickCount;

end;

procedure TForm1.Label1DblClick(Sender: TObject);
begin
   Memo1.lines.Add('dos');
   old:= GetTickCount;
end;

procedure TForm1.FormDblClick(Sender: TObject);
begin
  Memo1.Lines.Add('compuesto')
end;

procedure TForm1.FormClick(Sender: TObject);
begin
Memo1.Lines.Add('simple')
end;

end.
La verdad es que GetDoubleClickTime es de 500 por tanto, si tardas en hacer el doble clic más de 500 milisegundos, el evento Onclic tambien se activará.

El problema no es tuyo, es de la VCL o de windows, de hecho, si haces un Doble clic en el Form verás que sale 'Simple' y 'Compuesto' es decir, ha detectado el clic y el doble clic, cuando solo debería coger el doble clic.

Modificando en el panel de control de windows la rapidez del doble clic puedes variar desde 200 hasta 900 (muy poco márgen). Podrías usar en tu aplicación SetDoubleClickTime(intervalo en milisegundos) Pero afectaría a todo windows, y al ser un componente.... no lo creo conveniente.

Tambien puedes chequear cuando entra el foco en tu componente, modificar el tiempo de doble clic y al perder el foco ponerlo todo como estaba .... tú verás si es posible.


Conclusión rápida: No se puede
Conclusión Exhaustiva: Varios días de prueba y error y con suerte lo sacas

Saludos
Responder Con Cita