PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget

Beitrag 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:
  1. Zwei (oder mehr) Fenster erstellen mit jeweils einem Editor-Gadget
  2. Zuerst in das Gadget des einen Fenster (A) klicken.
  3. 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
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
HeX0R
Beiträge: 3054
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget

Beitrag von HeX0R »

Die Meldung die du da erhältst verschickt das Richedit Control und nennt sich:

Code: Alles auswählen

#EN_KILLFOCUS
auszulesen über EventType().

Kein Bug.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget

Beitrag 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 ^^)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget

Beitrag 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! :mrgreen: Ja... dann würde alles Sinn ergeben! :allright:
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget

Beitrag 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 :wink:
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Benutzeravatar
HeX0R
Beiträge: 3054
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget

Beitrag 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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget

Beitrag von STARGÅTE »

SelectBlock :freak:

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 :lol: bei diesen Werten wäre aber n MAP besser um nicht so viel leere Stellen zu haben
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget

Beitrag von Vera »

HeX0R hat geschrieben:Nicht so ohne weiteres, aber mithilfe dieser Include.
Danke, das probier ich nacher mal aus :)
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Benutzeravatar
HeX0R
Beiträge: 3054
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget

Beitrag von HeX0R »

STARGÅTE hat geschrieben:SelectBlock :freak:
[...]
Vllt willst du es ja mal umschreiben :lol: 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...
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: PB4.51rc1 Falsches Zusammenspiel EventWindow/EventGadget

Beitrag 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! :allright:
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Antworten