Ereignismethode programmieren

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Ereignismethode programmieren

Beitragvon Marco » Do, 11. Jul 2013 8:08

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
Marco
Rookie
Rookie
 
Beiträge: 4
Registriert: Mi, 08. Sep 2010 11:56

Re: Ereignismethode programmieren

Beitragvon brandelh » Do, 11. Jul 2013 8:18

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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13268
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Ereignismethode programmieren

Beitragvon Dieter Stelzner » Do, 11. Jul 2013 8:40

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
Dieter Stelzner
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 57
Registriert: Fr, 09. Jun 2006 12:31
Wohnort: Friesenried

Re: Ereignismethode programmieren

Beitragvon Marco » Do, 11. Jul 2013 9:31

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.
Marco
Rookie
Rookie
 
Beiträge: 4
Registriert: Mi, 08. Sep 2010 11:56

Re: Ereignismethode programmieren

Beitragvon Dieter Stelzner » Do, 11. Jul 2013 10:17

Hallo,
die Ctrl Taste und andere kannst du mit AppKeyState() abfragen.
DS-Datasoft Gmbh & Co.KG
www.ds-datasoft.de
Xbase++ Addon tools
Dieter Stelzner
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 57
Registriert: Fr, 09. Jun 2006 12:31
Wohnort: Friesenried

Re: Ereignismethode programmieren

Beitragvon Marco » Do, 11. Jul 2013 10:28

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!
Marco
Rookie
Rookie
 
Beiträge: 4
Registriert: Mi, 08. Sep 2010 11:56


Zurück zu OOP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron