Seite 1 von 1

Ereignismethode programmieren

Verfasst: Do, 11. Jul 2013 9:08
von Marco
Guten Tag miteinander

Ich habe folgendes Problem:

Wir haben eine eigene Klasse welche von XbpSLE abgeleitet ist.

In dieser Klasse überschreiben wir die Methode lbclick.

Diese Methode wurde vererbt und war deswegen auch leicht zu implementieren.

Nun aber möchten wir eine Methode für ctrl + lbclick. Also eine Ereignismethode für den CTRL + Linksklick.

Ich habe schon versucht in der Methode lbclick irgendwie abzufangen ob nun ctrl gedrückt wurde, aber ich habe das Gefühl, dass ctrl alleine gar nicht erkannt wird von XBase.

Danke euch im voraus!

Grüsse
Marco

Re: Ereignismethode programmieren

Verfasst: Do, 11. Jul 2013 9:18
von brandelh
Tastatur und Maus sind getrennte Geräte und haben getrennte Events.
Ob die STRG ( CTRL ) Taste alleine Events erzeugt weiß ich jetzt gar nicht, das müsste man im KEYBOARD Event abfragen.
Eventuell mit einer eigenen FLAG Variable ( STRG ein / aus), die bei einem LB-Event abgefragt wird.
Ich meine dass man mit den Clipper Tools III den Zustand der STRG Taste abfragen konnte (ich könnte mich aber auch irren),
falls das bei Clipper (DOS) ging, muss das aber bei Xbase++ (Win32) nicht unbedingt auch so sein.

Ich würde ein einfaches Fenster machen und MAUS und KEYBOARD Events dieses Fensters protokollieren, so ermittle ich was wann wo ankommt.

Re: Ereignismethode programmieren

Verfasst: Do, 11. Jul 2013 9:40
von Dieter Stelzner
Es ist einfache das Sle abzuleiten.
z.B.

Code: Alles auswählen

CLass mySLE From xbpSle
Exported:
     Method HandleEvent
ENDCLASS

METHOD mySle:HandleEvent(nEvent, mp1, mp2)

   ::xbpSle:HandleEvent(nEvent, mp1, mp2)

   if nEvent == xbeP_Keyboard .and. mp1 == xbeK_

RETURN self
Im Handleevent kannst du alle Events abfangen.

Grüße
Dieter
DS-Datasoft GmbH & Co.KG

Re: Ereignismethode programmieren

Verfasst: Do, 11. Jul 2013 10:31
von Marco
Hallo nochmals

Danke vielmals für die raschen Antworten!

Habe den Vorschlag von Dieter Stelzner umgesetzt und das HandleEvent eingebaut.

Dann gebe ich mir in einer Nachricht das aktuelle Event aus.

Code: Alles auswählen

  
IF nEvent != 1048626 .AND. nEvent != 1048598
  Pop_Msg( Str(nEvent,,0) )
ENDIF
Die Events 1048626 und 1048598 sind glaube ich Hover Events und erscheinen andauernd wenn ich übers Objekt fahre, deswegen habe ich sie abgefangen.

Bei einem Linksklick kriege ich das Event "1048583". Wenn ich die Maus danach bewege wird "1048658" mitgeschickt.

Allerdings erhalte ich kein Event wenn ich die CTRL-Taste gedrückt habe. Auch in Verbindung mit dem Mausklick erhalte ich nur die Events die ich auch ohne CTRL erhalte.

Re: Ereignismethode programmieren

Verfasst: Do, 11. Jul 2013 11:17
von Dieter Stelzner
Hallo,
die Ctrl Taste und andere kannst du mit AppKeyState() abfragen.

Re: Ereignismethode programmieren

Verfasst: Do, 11. Jul 2013 11:28
von Marco
Super danke!!

Habe es soeben ausprobiert mit AppKeyState(xbeK_CTRL) und es funktioniert!

Kriege 1 bei gedrückter CTRL Taste und 0 wenn sie nicht gedrückt ist.

Genau sowas habe ich gesucht! Danke vielmals für die rasche Hilfestellung!