[PB 4.5] Fehler bei Indexierung / Aufzählung
[PB 4.5] Fehler bei Indexierung / Aufzählung
Ich meine einen Fehler gefunden zu haben, sich bin ich mir nicht!
Ihr erhaltet ein Archiv, darin ist eine exe und einige PNG Dateien sowie die Bispiel-.pb Datei.
Kommentar ist ebenfalls in der Quellcode-Datei -> .pb
Fehler:
Bei der Debugausgabe nachdem man auf eines der Navigationspunkte klickt, oberhalb des Fensters, gibt der Debugger sowohl bei der Methode "Indexierung" (Gadgets mit Zahlen) als auch bei der Methode "Aufzählung" (Gadgets mit Konstanten) immer die gleiche EventGadget() ID.
Lösung:
Noch keine gefunden
Erste Ansätze:
Konstanten welche zuvor so hießen "#GadgetStart", "#GadgetVideos", ... wurden in "1", "2", ... umbenannt, jedoch ohne Erfolg!
Archiv:
PB 4.5 Fehler
Gruß
Ihr erhaltet ein Archiv, darin ist eine exe und einige PNG Dateien sowie die Bispiel-.pb Datei.
Kommentar ist ebenfalls in der Quellcode-Datei -> .pb
Fehler:
Bei der Debugausgabe nachdem man auf eines der Navigationspunkte klickt, oberhalb des Fensters, gibt der Debugger sowohl bei der Methode "Indexierung" (Gadgets mit Zahlen) als auch bei der Methode "Aufzählung" (Gadgets mit Konstanten) immer die gleiche EventGadget() ID.
Lösung:
Noch keine gefunden
Erste Ansätze:
Konstanten welche zuvor so hießen "#GadgetStart", "#GadgetVideos", ... wurden in "1", "2", ... umbenannt, jedoch ohne Erfolg!
Archiv:
PB 4.5 Fehler
Gruß
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: [PB 4.5] Fehler bei Indexierung / Aufzählung
Wieso steht
vor
? Das macht keinen Sinn. Außerdem brauchst du das 'If EventGadget()' nicht. Wenn die Gadget-ID nämlich 0 ist, dann gibt das 'Debug' nichts aus.
Wieso lagerst du die Initialisierung von globalen Variablen, von Enums und DataSections in einzelnen Procedures aus? Das macht vor allem bei Enum und DataSection keinen Sinn, weil diese schon initialisiert werden, ohne dass du die Procedure aufrufst.
Du hast einen merkwürdigen Stil deinen Code zu strukturieren.
Code: Alles auswählen
If Event = #PB_Event_Gadget
If EventGadget()
Debug EventGadget()
EndIf
EndIf
Code: Alles auswählen
Event = WaitWindowEvent()
Wieso lagerst du die Initialisierung von globalen Variablen, von Enums und DataSections in einzelnen Procedures aus? Das macht vor allem bei Enum und DataSection keinen Sinn, weil diese schon initialisiert werden, ohne dass du die Procedure aufrufst.
Du hast einen merkwürdigen Stil deinen Code zu strukturieren.
Re: [PB 4.5] Fehler bei Indexierung / Aufzählung
Weil ich irgendwann mal so angefangen bin mir alles schön zu unterteilen.
Um meine Technik mal zu optimieren, müsste ich was tun, die Enumeration zusammen mit DataSection in eine Proc?
Also erst Enumeration und dann DataSection in eine Procedure schreiben?
Du meinst ich kann statt eine globals() -procedure einfach sobald ich ein Wort Global haben möchte, gleich Global schreiben ohne diese vorher in eine seperate Proc zu schreiben?
Zurück zum Fehler, ist das jemanden aufgefallen oder liegt das wirklich an meine Art wie ich den Code aufbaue?
Denn in PB 4.3 hat das so alles wunderbar geklappt mit den Enumerations.
Gruß
Um meine Technik mal zu optimieren, müsste ich was tun, die Enumeration zusammen mit DataSection in eine Proc?
Also erst Enumeration und dann DataSection in eine Procedure schreiben?
Du meinst ich kann statt eine globals() -procedure einfach sobald ich ein Wort Global haben möchte, gleich Global schreiben ohne diese vorher in eine seperate Proc zu schreiben?
Zurück zum Fehler, ist das jemanden aufgefallen oder liegt das wirklich an meine Art wie ich den Code aufbaue?
Denn in PB 4.3 hat das so alles wunderbar geklappt mit den Enumerations.
Gruß
Re: [PB 4.5] Fehler bei Indexierung / Aufzählung
@Code-Strukturierung
Du kannst bzw. solltest auch die Faltungen (Einleiten mit ";{" am Anfang der Zeile, Beenden mit ";}") und Includes verwenden. Macros würden sich z.T. auch als Ersatz für Prozeduren anbieten.

Du kannst bzw. solltest auch die Faltungen (Einleiten mit ";{" am Anfang der Zeile, Beenden mit ";}") und Includes verwenden. Macros würden sich z.T. auch als Ersatz für Prozeduren anbieten.
An deinem Satzbau solltest du auch nochmal feilen.Weil ich irgendwann mal so angefangen bin mir alles schön zu unterteilen.
Um meine Technik mal zu optimieren, müsste ich was tun, die Enumeration zusammen mit DataSection in eine Proc?

"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Re: [PB 4.5] Fehler bei Indexierung / Aufzählung
Akzeptieren Du solltest die Bildung von Satz deiner Mitmenschen!c4s hat geschrieben:@Code-Strukturierung
Du kannst bzw. solltest auch die Faltungen (Einleiten mit ";{" am Anfang der Zeile, Beenden mit ";}") und Includes verwenden. Macros würden sich z.T. auch als Ersatz für Prozeduren anbieten.
An deinem Satzbau solltest du auch nochmal feilen.Weil ich irgendwann mal so angefangen bin mir alles schön zu unterteilen.
Um meine Technik mal zu optimieren, müsste ich was tun, die Enumeration zusammen mit DataSection in eine Proc?

So, nun habe ich das mal selbst KOMPLETT OHNE Prozeduren getestet.
Funktioniert!
Wird irgendwie an meinen vielen Prozeduren liegen, wodran genau weiß ich allerdings nicht!
Merkwürdig ist auch das wenn ich mir mit "Debug #Constant" alle Konstanten anzeigen lasse, das die Enumeration richtig funktioniert.
Nur eben nicht wenn ich dann auf ein ImageGadget klicke, dann erhalte ich jedes verdammte mal diese völlig unterpriviligierte 21. xD
Gruß
//EDIT:
Ich habe so das Gefühl das PB 4.5 wirklich mehr Fehler hat als sein Vorgänger!
Funktionsfähiges Beispiel:
Code: Alles auswählen
;- Aufzählung der Konstanten
Enumeration
#Window
#Gadget1
#Gadget2
EndEnumeration
;- Globale Variablen setzen
Global Event
Global Quit
;- Öffnen des Hauptfensters
OpenWindow(#Window, 25, 25, 800, 600, "Konstanten Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
ButtonGadget(#Gadget1, 5, 5, 100, 20, "Gadget 1")
StringGadget(#Gadget2, 5, 35, 100, 20, "Gadget 2")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Debug EventGadget()
EndIf
Until Event = #PB_Event_CloseWindow
Re: [PB 4.5] Fehler bei Indexierung / Aufzählung
4.5.x hat einfach nur mehr Informationen:
Füge das mal ein
Füge das mal ein
Code: Alles auswählen
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
NR=EventGadget()
Select EventType()
Case #PB_EventType_LeftClick : Debug Str(NR) + ":Klick mit der linken Maustaste"
Case #PB_EventType_RightClick : Debug Str(NR) + ":Klick mit der rechten Maustaste"
Case #PB_EventType_LeftDoubleClick : Debug Str(NR) + ":Doppelklick mit der linken Maustaste"
Case #PB_EventType_RightDoubleClick : Debug Str(NR) + ":Doppelklick mit der rechten Maustaste"
Case #PB_EventType_Focus : Debug Str(NR) + ":Fokus erhalten"
Case #PB_EventType_LostFocus : Debug Str(NR) + ":Fokus verloren"
Case #PB_EventType_Change : Debug Str(NR) + ":Inhalt hat sich geändert"
Case #PB_EventType_DragStart : Debug Str(NR) + ":Der Anwender versucht, eine Drag & Drop Operation zu starten"
Default
Debug Str(NR) + ":unknown event"
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
Rings hat geschrieben:ziert sich nich beim zitieren
Re: [PB 4.5] Fehler bei Indexierung / Aufzählung
Sry da muss ich widersprechen!
PB 4.5 hat zu deinem Beispiel nicht mehr Informationen, denn EventType war schon in der PB 4.3 vorhanden.
Davon abgesehen habe ich immernoch für jedes Gadget eine Debug-Ausgabe von 21.
PB 4.5 hat zu deinem Beispiel nicht mehr Informationen, denn EventType war schon in der PB 4.3 vorhanden.

Davon abgesehen habe ich immernoch für jedes Gadget eine Debug-Ausgabe von 21.
Re: [PB 4.5] Fehler bei Indexierung / Aufzählung
Erstmal sorry für den DP, nur war mir zu blöd jedesmal mein Post zu editieren.
Fehler könnt ihr nun selbst testen mit einem Funktionsfähigen Beispiel:
Analyse:
Wenn ihr nun das zweite ImageGadget auf die Y Koordinate 0 setzt, was ich ja in meiner Anwendung vorhabe, dann bekomme ich jedesmal die gleiche EventGadget()-ID.
Begründung:
PureBasic ist es nicht möglich, soweit ich das sehe, mit ImageGadgets die übereinander positioniert sind, umzugehen!
In CascadingStyleSheets (Zum Beispiel bei einem Einsatz für Homepage-Navigationen) ist es möglich durch Index die Grafiken unabhängig reagieren zu lassen da diese sich "nicht wirklich" den selben Platz teilen durch die Index(-Trennung).
Lösung:
Mehrere ImageGadgets nicht an der selben Position erstellen.
Ist das eine Lösung?:
Nein!
Denn dann müsste ich für jeden Navigations-Punkt (jedes Icon) einen Schnitt in den Hintergrund machen und so tun als ob es ein Hintergrundbild gibt, welches in wirklichkeit mit in dem Navi-Icon gemalt ist.
Ist das nun ein Fehler in PureBasic 4.5?:
Das würde ich gern von EUCH wissen?
Gruß
Renovatio
Fehler könnt ihr nun selbst testen mit einem Funktionsfähigen Beispiel:
Code: Alles auswählen
;{- Initiieren von Umgebungen und Plugins
InitSprite()
;}
;{- Aufzählung der Konstanten
Enumeration
#Window
#GadgetHead
#GadgetNaviStart
#GFXHead
#GFXNavi
EndEnumeration
;}
;{- Bilder vorbereiten
CreateImage(#GFXHead,800,50)
StartDrawing(ImageOutput(#GFXHead))
DrawingMode(#PB_2DDrawing_Default)
Box(0,0,800,600,RGB(200,200,200))
StopDrawing()
CreateImage(#GFXNavi,50,50)
StartDrawing(ImageOutput(#GFXNavi))
DrawingMode(#PB_2DDrawing_Default)
Box(0,0,50,50,RGB(200,200,150))
StopDrawing()
;}
;{- Öffnen und Ausführen des Hauptfensters
OpenWindow(#Window, 25, 25, 800, 600, "Konstanten Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
ImageGadget(#GadgetHead, 0, 0, 800, 600, ImageID(#GFXHead))
ImageGadget(#GadgetNaviStart, 0, 50, 50, 50, ImageID(#GFXNavi))
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Debug EventGadget()
EndIf
Until Event = #PB_Event_CloseWindow
;}
Wenn ihr nun das zweite ImageGadget auf die Y Koordinate 0 setzt, was ich ja in meiner Anwendung vorhabe, dann bekomme ich jedesmal die gleiche EventGadget()-ID.
Begründung:
PureBasic ist es nicht möglich, soweit ich das sehe, mit ImageGadgets die übereinander positioniert sind, umzugehen!
In CascadingStyleSheets (Zum Beispiel bei einem Einsatz für Homepage-Navigationen) ist es möglich durch Index die Grafiken unabhängig reagieren zu lassen da diese sich "nicht wirklich" den selben Platz teilen durch die Index(-Trennung).
Lösung:
Mehrere ImageGadgets nicht an der selben Position erstellen.
Ist das eine Lösung?:
Nein!
Denn dann müsste ich für jeden Navigations-Punkt (jedes Icon) einen Schnitt in den Hintergrund machen und so tun als ob es ein Hintergrundbild gibt, welches in wirklichkeit mit in dem Navi-Icon gemalt ist.
Ist das nun ein Fehler in PureBasic 4.5?:
Das würde ich gern von EUCH wissen?

Gruß
Renovatio
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: [PB 4.5] Fehler bei Indexierung / Aufzählung
Das liegt nicht an PureBasic. Das liegt am Betriebssystem. Unter Ubuntu läuft das zum Beispiel alles genau so wie du es gerne hättest.
Fakt ist jedenfalls, dass das Übereinander-lagern von ImageGadgets noch nie eine gute Idee war und viele damit ihre Probleme hatten. Wieso nutzt du nicht ein großes 'ImageGadget', 'DrawImage' und eine einfach Funktion, die dir sagt, in welchen Bereich geklickt wurde?
Mittlerweile müsste man auch bestimmt das neue CanvasGadget dafür verwenden können. Ist aber nur eine Vermutung, weil ich damit noch nichts gemacht habe.
Fakt ist jedenfalls, dass das Übereinander-lagern von ImageGadgets noch nie eine gute Idee war und viele damit ihre Probleme hatten. Wieso nutzt du nicht ein großes 'ImageGadget', 'DrawImage' und eine einfach Funktion, die dir sagt, in welchen Bereich geklickt wurde?
Mittlerweile müsste man auch bestimmt das neue CanvasGadget dafür verwenden können. Ist aber nur eine Vermutung, weil ich damit noch nichts gemacht habe.
Re: [PB 4.5] Fehler bei Indexierung / Aufzählung
Würde für den Anfang teilweise funktionieren, so wüsste ich in welchen Bereich geklickt wurde, jedoch nicht welche GadgetID ausgelöst wurde.NicTheQuick hat geschrieben:Wieso nutzt du nicht ein großes 'ImageGadget', 'DrawImage' und eine einfach Funktion, die dir sagt, in welchen Bereich geklickt wurde?
Kenn ich nicht, dass CanvasGadget.NicTheQuick hat geschrieben:Mittlerweile müsste man auch bestimmt das neue CanvasGadget dafür verwenden können. Ist aber nur eine Vermutung, weil ich damit noch nichts gemacht habe.