Seite 1 von 2
#PB_Any liefert gleiche Wert
Verfasst: 20.09.2013 20:48
von dietmar
Nach längerer Abstinenz ein föhliches Hallo,
Ich habe mehrere Fenster mit dem Form -> neues Formular erstellt. Dabei liefert #PB_Any für Fenster 1 und 2 die selbe Nummer, daher funktionert die Main-Schleife nicht mehr richtig.
Im Einsatz ist:
PB 5.20 Beta 17
Windows 7 und Windows XP
Main.pbf
Code: Alles auswählen
XIncludeFile "1.pbf"
XIncludeFile "2.pbf"
XIncludeFile "3.pbf"
Exit = #False
Procedure Window_S_Events(event)
Debug "EventWindow() " + EventWindow()
Debug "Window 1 " + Window_1
Debug "Window 2 " + Window_2
Debug "Window 3 " + Window_3
Select EventWindow()
Case Window_1
Select event
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
Case #PB_Event_CloseWindow
CloseWindow(Window_1)
EndSelect
Case Window_2
Select EventGadget()
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
Case #PB_Event_CloseWindow
CloseWindow(Window_3)
Case #PB_Event_Gadget
EndSelect
Case Window_3
Select EventGadget()
Case Button_0
OpenWindow_1()
Case Button_1
OpenWindow_2()
EndSelect
Case #PB_Event_CloseWindow
CloseWindow(Window_3)
ProcedureReturn Exit
EndSelect
EndProcedure
OpenWindow_3()
Repeat
Exit = Window_S_Events(WaitWindowEvent())
Until Exit = #True
End
Fenster 1
Code: Alles auswählen
Global Window_1
Global Button_0
Procedure OpenWindow_1(x = 0, y = 0, width = 600, height = 400)
Window_1 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu)
EndProcedure
Fenster 2
Code: Alles auswählen
Global Window_2
Global Button_0
Procedure OpenWindow_2(x = 0, y = 0, width = 600, height = 400)
Window_2 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu)
Button_0 = ButtonGadget(#PB_Any, 150, 40, 100, 25, "")
EndProcedure
Fenster 3
Code: Alles auswählen
Global Window_3
Global Button_0, Button_1
Procedure OpenWindow_3(x = 0, y = 0, width = 600, height = 400)
Window_3 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu)
Button_0 = ButtonGadget(#PB_Any, 130, 30, 100, 25, "Fenster 1")
Button_1 = ButtonGadget(#PB_Any, 130, 70, 100, 25, "Fenster 2")
EndProcedure
Kann das jemand nachvollziehen und gibt es eine Lösung ohne das ich die Fenster händisch nummeriere?
Gruß und Danke
Dietmar
Re: #PB_Any liefert gleiche Wert
Verfasst: 20.09.2013 20:55
von ts-soft
Kann ich nicht nachvollziehen und auch nicht so richtig Glauben:
Code: Alles auswählen
Debug OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 640, 480, "")
Debug OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 640, 480, "")
Debug OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 640, 480, "")
Debug OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 640, 480, "")
While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
Kann ich noch 100erte Fenster anfügen oder noch 1000x mal testen, es gibt keine doppelte ID.
Re: #PB_Any liefert gleiche Wert
Verfasst: 20.09.2013 20:59
von STARGÅTE
Fenster 1 und 2 existieren beim start nicht, daher ist Window_1 und Window_2 am Anfang 0.
Desweiteren ist deine Eventschleife völlig falsch.
EventWindow() darfst du nur abfragen, wenn es auch ein Window-Event gab!
Also erst Select WindowEvent() und dann Select EventWindow()
Außerdem ist da noch ein Case #PB_Event_CloseWindow bei deinem EventWindow(), da gehört da auch nicht hin.
Im Case Window_2 steht bei Event_CloseWindow ein CloseWindow(Window_3), gewollt?
Re: #PB_Any liefert gleiche Wert
Verfasst: 20.09.2013 22:03
von dietmar
Die genaue Beschreibung eines Problems ist fast die Lösung. Das Beispiel ist auf die schnelle eher Missraten und die wichtige Information das es sich bei den vier Code Schnippslen um vier Dateien handelt fehlte auch noch.
Das die Fenster am Anfang 0 liefern, das verstehe ich sehr gut. Allerdings wenn diese in durch das klicken der Buttons geöffnet wurden liefern diese eine Nummer zurück die trotzdem gleich ist. Auch wenn die Schleife mit Sicherheit nicht die beste ist, zum testen sollte sie reichen. (Im richtigen Programm sieht es besser aus, versprochen.)
Re: #PB_Any liefert gleiche Wert
Verfasst: 20.09.2013 22:21
von ts-soft
Statt lauter Dateien zu erstellen, was wohl unzumutbar ist, jedenfalls für mich
habe ich mal alles in eine Datei zusammen kopiert, was eigentlich Deine Aufgabe wäre
(deshalb auch mein Kurztest oben).
Doppelte IDs kann ich beim besten Willen nicht entdecken, nur das durch Knöpfche drigge,
neue Fenster erstellt werden und somit die globale Variablen nur für die zuletzt erstellten
3 Fenster gültig sind.
Bug sehe ich jedenfalls keinen.
Re: #PB_Any liefert gleiche Wert
Verfasst: 21.09.2013 21:01
von Demivec
@dietmar: Ein Fenster mit # PB_Any erstellt muss geschlossen werden oder Sie werden Probleme haben.
Code: Alles auswählen
;Fenster 1
Global Window_1
Global Button_1_0
Procedure OpenWindow_1(x = 0, y = 0, width = 600, height = 400)
If Window_1 And IsWindow(Window_1)
CloseWindow(Window_1)
EndIf
Window_1 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu)
EndProcedure
;Fenster 2
Global Window_2
Global Button_2_0
Procedure OpenWindow_2(x = 0, y = 0, width = 600, height = 400)
If Window_2 <> 0 And IsWindow(Window_2)
CloseWindow(Window_2)
EndIf
Window_2 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu)
Button_2_0 = ButtonGadget(#PB_Any, 150, 40, 100, 25, "")
EndProcedure
;Fenster 3
Global Window_3
Global Button_3_0, Button_3_1
Procedure OpenWindow_3(x = 0, y = 0, width = 600, height = 400)
If window_3 <> 0 And IsWindow(Window_3)
CloseWindow(Window_1)
EndIf
Window_3 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu)
Button_3_0 = ButtonGadget(#PB_Any, 130, 30, 100, 25, "Fenster 1")
Button_3_1 = ButtonGadget(#PB_Any, 130, 70, 100, 25, "Fenster 2")
EndProcedure
Define Exit = #False
Procedure Window_S_Events(event)
Debug "EventWindow() " + EventWindow()
Debug "Window 1 " + Window_1
Debug "Window 2 " + Window_2
Debug "Window 3 " + Window_3
Select EventWindow()
Case Window_1
Select event
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
Case #PB_Event_CloseWindow
CloseWindow(Window_1)
Window_1 = 0
EndSelect
Case Window_2
Select event
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
Case #PB_Event_CloseWindow
CloseWindow(Window_2)
Window_2 = 0
Case #PB_Event_Gadget
EndSelect
Case Window_3
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case Button_3_0
OpenWindow_1()
Case Button_3_1
OpenWindow_2()
EndSelect
Case #PB_Event_CloseWindow
CloseWindow(Window_3)
Window_3 = 0
ProcedureReturn #True
EndSelect
EndSelect
EndProcedure
OpenWindow_3()
Repeat
Exit = Window_S_Events(WaitWindowEvent())
Until Exit = #True
End
Re: #PB_Any liefert gleiche Wert
Verfasst: 21.09.2013 21:20
von dietmar
@ts-soft
Okay, allerdings hab ich das Problem nicht wenn der Code in der selben Datei steht. Somit haben wir also geklärt wie es bei dir funktioniert. Allerdings noch nicht warum bei mir die selben Werte rauskommen. Die Fenster erstelle ich mit dem Formdesigner und binde diese dann eben als XIncludeFile ein. Hat für mich den Vorteil ich kann die Fenster gleich sehen und muss nicht anhand der meiner Phantasie und Kopfrechenen herausfinden wie das Fenster letzlich aussieht.
@demicvec und alle anderen die am Code rumnörgeln möchten
Vielen Dank für eure konstruktive Kritik, ich habe mir diesen Testcode nach einem langen Arbeitstag zusammengeschustert. Meine beiden Kleinen waren zuvor noch sehr anstrengend.
Daher bitte ich in aller Öffentlichkeit um Abbitte

das ich einen so schlechten Source gepostet habe. Für mich hat er den Dienst getan mir zu zegen warum ein Fenster nicht auf die Anweisung reagiert. Da er dem gehobenen Anspruch in diesem Forum anscheinend nicht genügt, kann jeder der möchte den Code Ausdrucken und verbrennen.
Ein Zitat aus Faust, trifft das meine Situation eigentlich ganz gut:
Da steh ich nun, ich armer Tor,
und bin so klug als wie zuvor.
Ich danke euch für eure Zeit und Mühe, für meinen Teil ist es erledigt ich werden die Fenster nicht mehr mit #PB_Any nummerieren oder Dateien mit XIncludeFile einbinden.
So jetzt ist mir wohler.

Re: #PB_Any liefert gleiche Wert
Verfasst: 22.09.2013 10:10
von Nino
dietmar hat geschrieben:@demicvec und alle anderen die am Code rumnörgeln möchten
Vielen Dank für eure konstruktive Kritik, ich habe mir diesen Testcode nach einem langen Arbeitstag zusammengeschustert. Meine beiden Kleinen waren zuvor noch sehr anstrengend.
Daher bitte ich in aller Öffentlichkeit um Abbitte

das ich einen so schlechten Source gepostet habe. Für mich hat er den Dienst getan mir zu zegen warum ein Fenster nicht auf die Anweisung reagiert. Da er dem gehobenen Anspruch in diesem Forum anscheinend nicht genügt, kann jeder der möchte den Code Ausdrucken und verbrennen.
Wenn ich z.B. glaube dass 2+2 = 5 ist, dann wird das nicht dadurch richtiger, dass ich zuvor einen langen Arbeitstag und eine anstrengende Zeit mit meinen "beiden Kleinen" hatte. Wenn ich dann in einem Forum poste "2+2 = 5" und andere Leute anderer Ansicht sind, so hat das wohl kaum etwas mit "rumnörgeln" zu tun. Auch sind weder der Arbeitstag noch die "beiden Kleinen" für den Fehler verantwortlich.
Du hast außerdem offenbar keine Vorstellung davon, was ein sinnvoller Bug-Report ist.
dietmar hat geschrieben:
Da steh ich nun, ich armer Tor,
und bin so klug als wie zuvor.
Ist das überraschend, wenn jemand nichts dazulernen
will?
Re: #PB_Any liefert gleiche Wert
Verfasst: 23.09.2013 06:41
von dietmar
Mein anliegen, war es herauszufinden ob es tatsächlich ein Fehler ist oder so gewollt. Da die Diskussion allerdings
im Moment mehr um den Code ggeht, bitte ich einen Mod diesen Beitrag zu verschieben bzw. zu schließen.
Die grundlegenden Bedingen für einen sinnvollen Beitrag sind meiner Meinung nach gegeben, auch lerne ich gerne dazu. Aber es geht um alles andere als um meinen vermeintlichen Fehler im Programm.
Re: #PB_Any liefert gleiche Wert
Verfasst: 23.09.2013 12:59
von PMV
dietmar hat geschrieben:Mein anliegen, war es herauszufinden ob es tatsächlich ein Fehler ist oder so gewollt.
Es ist ein Fehler. Allerdings liegt der Fehler im Code. Du hast Button_0
zwei mal als Global definiert und damit verlierst du die ID des erste
Button des ersten Fensters, sobald das 3. Fenster erstellt wird.
Die Variablen der Button anpassen, und es klappt. Wenns der
Formdesigner diesen Code generiert hat, ist es ein Bug des
Formdesigners. Du solltest das aber noch mal mit der fertigen
Version PB 5.20 testen, bevor du das dann im eng. Bugforum meldest.
Nicht das ichs glauben würde, aber es besteht immer die
Möglichkeit, das eine neuere Version einen Bug bereits behoben
hat. Also immer mit der neusten Version testen.
MFG PMV