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
old,now:Int64;
public
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