XbpMenu:itemMarked asynchron?

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2825
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 96 Mal
Danksagung erhalten: 13 Mal

XbpMenu:itemMarked asynchron?

Beitrag von georg »

Hallo,


mir fiel gerade ein sehr seltsames Verhalten von XbpMenuBar() bzw. XbpMenu() auf.

Im Rahmen eines Auftrags suche ich nach ein paar Möglichkeiten, das Menü-System ein wenig aufzubohren. Ein erster Ansatzpunkt war der Callback :itemMarked.

Ich lasse also mein Programm über XppDbg laufen - in dem Moment, wo ich das erste Element des XbpMenu() mit der Maus "berühre" (nicht: klicke!) hält der Debugger in meiner Funktion an, die ich im Callback-Slot eingetragen habe, da ein Menü-Eintrag "marked" ist. Aber das Menü wird weiterhin bedient, d.h. ich kann mit der Maus drüberfahren, andere Untermenüs aufmachen, sogar einen Eintrag auswählen, während das Programm im Debugger steht.

Ich habe sogar die Thread-IDs in Main() und in meiner Funktion abgerufen, um sicherzustellen, dass meine Funktion nicht in einem anderen Thread ausgeführt wird. (Da es sich noch um einen Test handelt, verwende ich aktuell keine Threads.)

Meine Vermutung ist, dass grosse Teile der XbpMenuBar()/XbpMenu() NICHT über den Event-Loop laufen, sondern nur eine Handvoll Ereignisse tatsächlich durch den Event-Loop laufen, darunter :itemMarked.

Sobald ich übrigens im Debugger F5 drücke, wird die Funktion ausgeführt, die ich - während der Debugger in der Callback-Funktion stand - ausgewählt habe.

Also, das Programm steht quasi in dieser Anweisung:

Code: Alles auswählen

oXbp:handleEvent(nEvent, mp1, mp2)
und die Menü-Oberfläche reagiert auf die Maus, während ich das Fenster weder verschieben noch in der Grösse verändern kann.

Hat einer von Euch eine Erklärung?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XbpMenu:itemMarked asynchron?

Beitrag von AUGE_OHR »

georg hat geschrieben:Meine Vermutung ist, dass grosse Teile der XbpMenuBar()/XbpMenu() NICHT über den Event-Loop laufen, sondern nur eine Handvoll Ereignisse tatsächlich durch den Event-Loop laufen, darunter :itemMarked.
es kommt nur ein Bruchteil der Windows Events in die Xbase++ Event-loop an :!:

da du beim Xbase++ Menu nur 1 Item auswählen kannst wird das Item gleich als "marked" gekennzeichnet wie bei einer Listbox.

wenn du in das Menu-System eingreifen willst solltest du Ownerdraw verwenden.
c:\ALASKA\XPPW32\Source\samples\basics\OWNERDRW\OWNERDRW.prg
gruss by OHR
Jimmy
Antworten