Ereignismethode programmieren

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Marco
Rookie
Rookie
Beiträge: 4
Registriert: Mi, 08. Sep 2010 12:56

Ereignismethode programmieren

Beitrag 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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Ereignismethode programmieren

Beitrag 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.
Gruß
Hubert
Dieter Stelzner
UDF-Programmierer
UDF-Programmierer
Beiträge: 72
Registriert: Fr, 09. Jun 2006 13:31
Wohnort: Friesenried
Danksagung erhalten: 5 Mal
Kontaktdaten:

Re: Ereignismethode programmieren

Beitrag 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
DS-Datasoft Gmbh & Co.KG
www.ds-datasoft.de
Xbase++ Addon tools
Marco
Rookie
Rookie
Beiträge: 4
Registriert: Mi, 08. Sep 2010 12:56

Re: Ereignismethode programmieren

Beitrag 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.
Dieter Stelzner
UDF-Programmierer
UDF-Programmierer
Beiträge: 72
Registriert: Fr, 09. Jun 2006 13:31
Wohnort: Friesenried
Danksagung erhalten: 5 Mal
Kontaktdaten:

Re: Ereignismethode programmieren

Beitrag von Dieter Stelzner »

Hallo,
die Ctrl Taste und andere kannst du mit AppKeyState() abfragen.
DS-Datasoft Gmbh & Co.KG
www.ds-datasoft.de
Xbase++ Addon tools
Marco
Rookie
Rookie
Beiträge: 4
Registriert: Mi, 08. Sep 2010 12:56

Re: Ereignismethode programmieren

Beitrag 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!
Antworten