On a déjà eu sur le forum, ce problème du Enabled à false qui met du "temps" à réagir !
Je pense même l'avoir constaté aussi (j'ai utilisé un TPanel à place et jouer sur les Borders)
Ajoute un faux OnDblClick (moi, j'ai triché ainsi sur un projet de media player qui pouvait délirer dans ses handles si l'on brutalisait la touche pause, cela dépendant du matériel vidéo et des libs fournis, selon les marques il faut faire quelques compromis d'ergonomies au profit de la robustesse, important en vidéo-surveillance)
1 2 3 4 5
| procedure TForm1.SpeedButton1.DblClick(Sender: TObject);
begin
if not SpeedButton1.Enabled then
OutputDebugString(PChar('Please do not brutalize the button'));
end; |
C'est problablement lié au que le TSpeedButton est un TGraphicControl, en fait le click est fait sur TWinControl qui le contient et c'est ce parent qui dispatche les clics !
Avec un TButton, normalement on pas ce genre de problème parce que la gestion du click est différente
Pour vider la pile (si elle est déjà présente lors du 1er clic)
utilise un PeekMessage PM_REMOVE sur le Handle du Parent, avoir quel message si c'est WM_MOUSEDOWN ou autre du genre
Le faire aussi en fin de procédure, attention, cela pourrait inhiber d'autres click en cours sur d'autres TGraphicControl du même parent (faudrait filtrer sur les position avec ControlAtPos)
Attention au piège Application.ProcessMessages, ne pas non plus en abuser, car cela met en pause son traitement pour gérer les messages, du coup, si l'on met ça en plus milieu du traitement du click, tu peux avoir un autre click qui commence le sien
comme dans ce sujet
Au début ou en Fin, il aura un peu l'effet d'un PeekMessage
Partager