Bei Touch-Monitor gedrückte Schaltfläche erkennen?

Rund um die LCL und andere Komponenten
Antworten
aseitzinger
Beiträge: 10
Registriert: Mi 18. Apr 2012, 15:07

Bei Touch-Monitor gedrückte Schaltfläche erkennen?

Beitrag von aseitzinger »

Hallo Forum,
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

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Bei Touch-Monitor gedrückte Schaltfläche erkennen?

Beitrag von m.fuchs »

OnMouseDown und OnMouseUp helfen dir dabei nicht? Die Touchscreeneingaben werden doch AFAIK in Mausereignisse übersetzt.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Bei Touch-Monitor gedrückte Schaltfläche erkennen?

Beitrag von Komoluna »

was ist denn mit multi-touch?
Dia maus kann doch nicht an 2 positionen gleichzeitig sein oder?

Edit: nicht maus sondern cursor.
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Philos
Beiträge: 43
Registriert: Mo 3. Mär 2014, 16:06
OS, Lazarus, FPC: Ubuntu Linux 14.04, Windows 7/8, Lazarus 1.2.2, Delphi XE5
CPU-Target: amd64
Wohnort: Rostock
Kontaktdaten:

Re: Bei Touch-Monitor gedrückte Schaltfläche erkennen?

Beitrag von Philos »

multitouch- mehrere gleichzeitige Berührungen (meistens langanhaltend) werden vom OS dann ja auch nicht in Mausklicks gewandelt, sondern als Strecken/Ziehen/Etc. Von daher sollte für das Klicken ja der Tipp von m.fuchs reichen.
((2*b) || !(to_be)) ... that's the question.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Bei Touch-Monitor gedrückte Schaltfläche erkennen?

Beitrag von Komoluna »

Aber bei spielen, wo man z.B. mit einem virtuellen Joystick läuft, und mit einem anderen zielt/schießt, wird ja die jeweilige Fingerposition vom Programm ausgewertet. Kein Zoom oder Slide...
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

aseitzinger
Beiträge: 10
Registriert: Mi 18. Apr 2012, 15:07

Re: Bei Touch-Monitor gedrückte Schaltfläche erkennen?

Beitrag von aseitzinger »

Hallo Forum,

hier habe ich etwas dazu gefunden
http://www.mycsharp.de/wbb2/thread.php?postid=3710846

Anscheinend muss man die WM_TOUCH-Nachrichten handeln.
Kann aber etwas dauern, bis ich Zeit finde, das umzusetzen.
OnMouseDown bzw. OnMouseUp wird leider nicht erzeugt. Bei Drücken der Schaltfläche passiert noch gar nichts, erst beim Loslassen gibt es ein OnClick-Ereignis (Windows7)

Viele Grüße

Arno

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Bei Touch-Monitor gedrückte Schaltfläche erkennen?

Beitrag von m.fuchs »

Hm, ich habe das hier auf einem Dell-Notebook mit Touchscreen und Windows 7 getestet. Da werden OnMouseDown und OnMouseUp gesendet. Läuft bei dir ein spezielle Programm für den Touchscreen oder setzt Windows das direkt um?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

aseitzinger
Beiträge: 10
Registriert: Mi 18. Apr 2012, 15:07

Re: Bei Touch-Monitor gedrückte Schaltfläche erkennen?

Beitrag von aseitzinger »

Ich werde in den nächsten Tagen den Rechner für eine neue Anlage herrichten, dann probiere ich das noch mal aus. Vielleicht ist das ja eine Treibergeschichte und lässt sich konfigurieren...
melde mich wieder

vg
Arno

aseitzinger
Beiträge: 10
Registriert: Mi 18. Apr 2012, 15:07

Re: Bei Touch-Monitor gedrückte Schaltfläche erkennen?

Beitrag von aseitzinger »

Hallo Forum,

leider keine positiven Erkenntnisse...
Ich habe eine Maschine hergerichtet mit WIndows 7, der Touch-Monitor ist ein ViewSonic TD2220-2, OnMouseDown und OnMouseUp-Events werden nicht generiert.
Auch Einstellungen des Treibers (Systemsteuerung, Fingereingabe) hatten keinen Erfolg.
Da bleibt dann wohl nur der Weg über WM_TOUCH

Wird aber bisschen dauern, bis ich das umsetze.

Viele Grüße

Arno

aseitzinger
Beiträge: 10
Registriert: Mi 18. Apr 2012, 15:07

Re: Bei Touch-Monitor gedrückte Schaltfläche erkennen?

Beitrag von aseitzinger »

Hallo Forum,

ein Kollege von mir hat sich mal die Zeit genommen, das Problem zu bearbeiten.
Hier seine Lösung:

Wenn man ein OnMouseDown (bzw OnButtonDown) Event verarbeiten möchte und das auch in Zusammenhang mit einem Touchmonitor verwendet, gibt es unter Windows 7 das Problem, dass der Treiber nicht zwischen OnClick und On…Down unterscheidet.

Um dies zu beheben, muss man im Geräte-Manager unter “Eingabegeräte (HID)” das Gerät / die Geräte, welche auf den Treiber “C:\Windows\system32\DRIVERS\MTConfig.sys” verweisen deaktivieren. Meist heißen diese “Microsoft Input Configuration Device”.

Anschließend den PC neustarten und man kann die Events genauso wie mit Maus und/oder Tastatur unterscheiden.

Nachteil: Multi-Touch ist damit auch deaktiviert.



Gefunden u.a. auf: http://forums.ni.com/t5/LabVIEW-Idea-Ex ... -p/1891087
Viele Grüße

Arno

Antworten