Seite 1 von 1
PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget
Verfasst: 08.08.2010 10:23
von Regenduft
... alle guten Dinge sind drei ...
Falsches Zusammenspiel EventWindow/EventGadget
PB 4.51 RC 1
Windows XP SP3
Unter gewissen umständen liefert bei 2 oder mehr Fenstern
EventWindow() einen falschen Wert in Relation zu
EventGadget().
Dieser Bug ist ziemlich hinterhältig und tritt nur auf, wenn genau folgender Ablauf stattfindet:
- Zwei (oder mehr) Fenster erstellen mit jeweils einem Editor-Gadget
- Zuerst in das Gadget des einen Fenster (A) klicken.
- Dann das andere Fenster (B) durch klicken aktivieren ohne dabei in das Editor-Gadget zu klicken! EventWindow() meldet nun Fenter B und EventGadget() meldet das Gadget aus Fenster A.
Sobald alle Fenster ein aktives (bzw. fokusiertes) Gadget besitzen sind die alle Meldungen immer korrekt.
Code: Alles auswählen
; Window 0
OpenWindow(0,0,0,400,200,"0")
EditorGadget(0,0,0,200,200)
AddGadgetItem(0,-1,"Nicht mich anklicken!")
AddGadgetItem(0,-1,"Folge den Instruktionen in Fenter 1!")
; Window 1
OpenWindow(1,410,0,400,200,"1")
EditorGadget(1,0,0,400,200)
AddGadgetItem(1,-1,"1. Klicke in DIESES Gadget!")
AddGadgetItem(1,-1,"2. Aktiviere Fenster 0 (OHNE das Gadget anzuklicken)")
AddGadgetItem(1,-1,"")
AddGadgetItem(1,-1,"EventWindow() sagt Window 0")
AddGadgetItem(1,-1,"EventGadget() sagt Gadget 1")
AddGadgetItem(1,-1,"")
AddGadgetItem(1,-1,"Das ist falsch oder?")
AddGadgetItem(1,-1,"")
AddGadgetItem(1,-1,"Dies scheint nur unter genau")
AddGadgetItem(1,-1,"diesen Umständen zu geschehen:")
AddGadgetItem(1,-1,"Window 0 -> hat KEIN aktives Gadget")
AddGadgetItem(1,-1,"Window 1 -> hat EIN aktives Gadget")
; Eventloop
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Debug "EventWindow() = "+Str(EventWindow())
Debug "EventGadget() = "+Str(EventGadget())
; Debug "EventType() = "+Str(EventType())
Debug ""
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget
Verfasst: 08.08.2010 11:41
von HeX0R
Die Meldung die du da erhältst verschickt das Richedit Control und nennt sich:
auszulesen über EventType().
Kein Bug.
Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget
Verfasst: 08.08.2010 11:48
von STARGÅTE
Richtig, du hast ja schon das EventType() drin, da hättest du eigentlich sehen müssen das es genau bei 0,1 oder 1,0
ein andere Type von Event gibs (512)
nämlich genau nur dann wenn Fokus zu keinem Fokus wechselt.
anstens erhält ja immer ein andere gadgets den Fokus, oder garkeins ...
also kein BUG !
Und auch das da "andere" Window ausgespukt wird, ist kein BUG, sonden gibt halt an welches Fenster den Fokus des alten aktiven gekillt hat (denke ich ^^)
Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget
Verfasst: 08.08.2010 12:11
von Regenduft
Aber auch wenn die Fokus-Meldung vom Editor-Gadget stammt, so ist es doch trotzdem das flasche Fenster. Der Event stammt vom Gadget 1 aus Fenster 1.
Also müsste es doch auch so ablaufen:
1. Meldung:
WindowEvent() = #PB_Event_Gadget
EventWindow() = 1
EventGadget() = 1
EventType() = #EN_KILLFOCUS
1. Meldung:
WindowEvent() = #PB_Event_ActivateWindow
EventWindow() = 0
Oder verstehe ich das jetzt so grundlegent falsch? Heißt das EventWindow() bezieht sich immer nur auf Events die
direkt das Fenster betreffen? (z.B. #PB_Event_CloseWindow, #PB_Event_SizeWindow, #PB_Event_MaximizeWindow...) In Bezug auf Gadgets ist der von EventWindow() rückgegebene Wert nicht aussagekräftig?
@Stargate: Ja, das hatte ich erkannt und deshalb auch das EventType() nur auskommentiert. Ich dachte aber (aus gerade beschriebenem Grund) trotzdem, dass das EventWindow falsch ist.
Edit:
STARGÅTE hat geschrieben:Und auch das da "andere" Window ausgespukt wird, ist kein BUG, sonden gibt halt an welches Fenster den Fokus des alten aktiven gekillt hat (denke ich ^^)
Das kam erst beim zweiten lesen in der Richtigen Hirnwindung an!

Ja... dann würde alles Sinn ergeben!

Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget
Verfasst: 08.08.2010 13:08
von Vera
Hallo Regenduft,
da ja inzwischen alles geklärt ist, kann ich Dir nur noch den Tip geben,
hinter dem ersten Fensteraufbau ein
SetActiveGadget(0) zu setzen, dann hast Du von Anfang an, die Events paarig
Apropos: Linux ist diesbezüglich etwas genauer und zeigt beim Start auch schon die Events vom ersten Fenster an (incl. kurzfristige Fokussetzung)
Da es hier grad passt, ich hab seit ein paar Tagen eine Frage: kann man via Debug auch die namentliche Konstante erhalten oder nur dessen numerischen Wert ?
Debug ???? -> #PB_...
Gruß ~ Vera
ps: schön das Du wieder da bist
~ und ein tolles Avatar
Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget
Verfasst: 08.08.2010 13:33
von HeX0R
Vera hat geschrieben:
Da es hier grad passt, ich hab seit ein paar Tagen eine Frage: kann man via Debug auch die namentliche Konstante erhalten oder nur dessen numerischen Wert ?
Debug ???? -> #PB_...
Nicht so ohne weiteres, aber mithilfe
dieser Include.
Allerdings nicht solche Konstanten wie EN_KILLFOCUS, die sind zu Controlspezifisch und würden den Rahmen sprengen.
Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget
Verfasst: 08.08.2010 13:54
von STARGÅTE
SelectBlock
Ich meine klar, manche Werte sind recht groß, aber meiner Meinung nach wäre ein Array "einfacher", wenn nicht sogar n MAP mit den Zahlen als String als Keys.
Zumindest habe ich das so bei einigen wichtigen Konstantenreichen gemacht:
Als Beispiel XML-Fehler:
Code: Alles auswählen
Global Dim XMLStatusText.s(40)
XMLStatusText(#PB_XML_Success) = "kein Fehler"
XMLStatusText(#PB_XML_NoMemory) = "Speicher voll"
XMLStatusText(#PB_XML_Syntax) = "Syntax-Fehler"
XMLStatusText(#PB_XML_NoElements) = "kein Element gefunden"
XMLStatusText(#PB_XML_InvalidToken) = "nicht wohlgeformt (ungültiger Token)"
XMLStatusText(#PB_XML_UnclosedToken ) = "nicht abgeschlossener Token"
XMLStatusText(#PB_XML_PartialCharacter) = "teilweises Zeichen"
XMLStatusText(#PB_XML_TagMismatch ) = "falscher Tag"
; [...]
Debug XMLStatusText(XMLStatus(XML)) würde dann die Text ausgeben.
Vllt willst du es ja mal umschreiben

bei diesen Werten wäre aber n MAP besser um nicht so viel leere Stellen zu haben
Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget
Verfasst: 08.08.2010 13:57
von Vera
HeX0R hat geschrieben:Nicht so ohne weiteres, aber mithilfe
dieser Include.
Danke, das probier ich nacher mal aus

Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget
Verfasst: 08.08.2010 14:23
von HeX0R
STARGÅTE hat geschrieben:SelectBlock
[...]
Vllt willst du es ja mal umschreiben

bei diesen Werten wäre aber n MAP besser um nicht so viel leere Stellen zu haben
Meine Güte, das ist eine DEBUGHILFE!
Wen interessiert es auf welche Weise sie tut was sie tut, hauptsache sie tut.
Ausserdem wurde der Selectblock automatisch generiert, ich hab das bestimmt nicht getippt...
Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget
Verfasst: 08.08.2010 15:05
von Regenduft
@Vera: Danke für den Tipp. Genau so mache ich's (prophylaktisch) mit der Initialisierung + andere Verschachtelung. Jedes Gadget hat ja eine eindeutige ID, braucht man ja kein Fenster abfragen. Das war eigentlich schon ein Grundlegender Strukturfehler meinerseits.
PS: Mein Workbench 3.1 Pointer muss noch ins Ava. I ♥ Oldschool! ^^
@HeX0R: Feine Sache mit der Include!
