ich habe folgendes Problem: ich will erkennen können, ob per Touch-Bildschirm (Win7) eine Schaltfläche (oder zur Not auch irgend ein anderes rechteckiges Ding) gedrückt ist.
Also kein einzelnes Ereignis wie OnClick, sondern eher eine Abfrage 'IsButtonDown'.
Hat das schon mal jemand gelöst oder gibt es dafür evtl. sogar schon was fertiges, bevor ich mir das selbst erkämpfen muss?
Für Tastatur- und Mausbedienung habe ich das bisher so gelöst:
Code: Alles auswählen
function IsBtnDown(button: TCustomButton): boolean;
// Prüft, ob ein Button mit der Maus oder der Tastatur gedrückt wurde
// leider leider, wenn ein Button unsichtbar oder disabled ist, dann bleibt
// der ControlState auf csLButtonDown...
// deshalb: wenn der Button invisible oder disabled ist, den ControlState
// 'zu Fuß' korrigieren
var
myControlState: TControlState;
begin
result:=(button.Visible and button.Enabled)
and ((csLButtonDown) in button.ControlState)
or (button.Focused and (GetKeyState(32)<0));
if ((csLButtonDown) in button.ControlState)
and not (button.Visible and button.Enabled) then begin
myControlState:=button.ControlState;
exclude(myControlState, csLButtonDown);
button.ControlState:=myControlState;
end;
end;
Ich programmiere Anlagensteuerungen mit Lazarus und benötige die Funktion, um z.B. einen 24V-Ausgang so lange anzuschalten, wie der Button gedrückt ist. Die Steuerungen arbeiten aber nicht eventgesteuert, sondern in jedem Modul wird reihum (ähnlich round robin) eine 'main'-Funktion aufgerufen, in der dann die entsprechenden Aktionen ausgeführt werden.
Viele Grüße
Arno