#PB_Any liefert gleiche Wert

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

#PB_Any liefert gleiche Wert

Beitrag 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
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: #PB_Any liefert gleiche Wert

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: #PB_Any liefert gleiche Wert

Beitrag 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?
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
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Re: #PB_Any liefert gleiche Wert

Beitrag 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.)
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: #PB_Any liefert gleiche Wert

Beitrag von ts-soft »

Statt lauter Dateien zu erstellen, was wohl unzumutbar ist, jedenfalls für mich :mrgreen:
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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Demivec
Beiträge: 49
Registriert: 22.02.2008 20:49
Wohnort: Utah, USA

Re: #PB_Any liefert gleiche Wert

Beitrag 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
Bild
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Re: #PB_Any liefert gleiche Wert

Beitrag 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 :praise: 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. :bluescreen:
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: #PB_Any liefert gleiche Wert

Beitrag 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 :praise: 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?
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Re: #PB_Any liefert gleiche Wert

Beitrag 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.
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: #PB_Any liefert gleiche Wert

Beitrag 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. :wink:

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten