PanelGadget und StringGadget's = fehlerhaft

Anfängerfragen zum Programmieren mit PureBasic.
DoubleDee
Beiträge: 8
Registriert: 08.06.2011 17:41

PanelGadget und StringGadget's = fehlerhaft

Beitrag von DoubleDee »

Hallo @all,

seit Tagen versuche ich nun die paar Programmzeilen zum Laufen zu bringen - leider ohne Erfolg.
Zuerst strickte ich mir das Proggi in einem stinknormalen Fenster mit der kompletten Berechnung. Das läuft auch zu meiner vollsten Zufriedenheit. Es handelt sich hierbei um die Procedure "Open_Individuell()". Da ich es aber erweitern und dementsprechend den Bedürfnissen anpassen wollte, nahm ich die Vorlage "PanelGadget" aus der Hilfe. Nun habe ich das Problem, daß in Zeile 22 eigentlich "#Gadget_Frq" als StringGadget zur Anwendung kommen soll. Trage ich dies hier ein, so hängt sich das Proggi ohne Fehlermeldung auf und läßt sich nur im Editor beenden. Wird hier "#PB_Any" eingetragen, dann erscheint das Eingabefenster. Die Fenster in Zeile 27 u. 32 werden auch nicht angezeigt, aber das Proggi läuft weiter. Nun werden in Zeile 37 u. 42 wiederholt Fenster aufgerufen, die komischerweise angezeigt werden. Kann mir evtl. jemand dabei helfen. Habe ich etwas übersehen? Funktioniert dieses in einem PanelGadget nicht? Was könnte man ersatzweise hernehmen? Um Code-Zeilen zu sparen, wollte ich nur diese beiden Prozeduren für die Ein- / Ausgabefenster verwenden. Ist es evtl. hier besser, die Prozeduren über ein Menü aufzurufen?

Vielen Dank und Gruß
'DD'


Hier die paar Codezeilen meines Veruches #3:

Code: Alles auswählen

;
; Zeigt die Verwendung mehrerer Panels..
;.
; Berechnungsprogramm zum Bau von kleinen Kurzwellen-Antennen
;

  Define WindowX=0, WindowY=0, WindowWidth=500, WindowHeight=400, lg=105, h=20
  
  Enumeration
  #Gadget_Frq
  #Gadget_DZd
  #Gadget_DZl
  #Gadget_DSp
  #Gadget_DDr
  EndEnumeration
  
  
; Prozedur für erstes Panel "Frequenz (individuell)"  
  Procedure Open_Individuell(WindowX=5, WindowY=35, WindowWidth=500, WindowHeight=400, lg=105, h=20, abst=25)
; Eingabefenster Frequenz
    TextGadget(#PB_Any, WindowX, WindowY, lg, h, "Frequenz")               
    StringGadget(#PB_Any, WindowX+100, WindowY-2, lg-62, h, "", #PB_String_Numeric)     ;soll #Gadget_Frq sein
    TextGadget(#PB_Any, WindowX+160, WindowY, lg-80, h, "kHz")                          ;hängt sich dann auf !!!
    WindowY=WindowY+abst
; Eingabefenster Zylinder-Durchmesser  
    TextGadget(#PB_Any, WindowX, WindowY, lg, h, "Zylinder Ø")               
    StringGadget(#Gadget_DZd, WindowX+100, WindowY-2, lg-62, h, "", #PB_String_Numeric) ;??? keine Anzeige
    TextGadget(#PB_Any, WindowX+160, WindowY, lg-80, h, "mm")
    WindowY=WindowY+abst
; Eingabefenster Zylinder-Länge 
    TextGadget(#PB_Any, WindowX, WindowY, lg, h, "Zyl.-Länge")
    StringGadget(#Gadget_DZl, WindowX+100, WindowY-2, lg-62, h, "", #PB_String_Numeric) ;??? keine Anzeige
    TextGadget(#PB_Any, WindowX+160, WindowY, lg-80, h, "mm")
    WindowY=WindowY+abst
; Eingabefenster Spule-Durchmesser
    TextGadget(#PB_Any, WindowX, WindowY, lg, h, "Spule Ø")
    StringGadget(#Gadget_DSp, WindowX+100, WindowY-2, lg-62, h, "", #PB_String_Numeric)
    TextGadget(#PB_Any, WindowX+160, WindowY, lg-80, h, "mm")
    WindowY=WindowY+abst
; Eingabefenster Draht-Durchmesser
    TextGadget(#PB_Any, WindowX, WindowY, lg, h, "Draht Ø")
    StringGadget(#Gadget_DDr, WindowX+100, WindowY-2, lg-62, h, "")
    TextGadget(#PB_Any, WindowX+160, WindowY, lg-80, h, "mm")
    GadgetToolTip(#Gadget_DDr, "Dezimalpunkt statt Komma")
; Hier sollen noch die Ausgabefenster angehängt werden in welchen die Ergebnisse der Berechnung erscheinen
  EndProcedure
  
; Prozedur für alle anderen Bänder mit Frequenzübergabe (Frequenz=12345)
  Procedure Open_Band(WindowX=15, WindowY=35, WindowWidth=470, WindowHeight=360, lg=105, h=20, abst=25)
  ; Eingabefenster Zylinder-Durchmesser  
    TextGadget(#PB_Any, WindowX, WindowY, lg, h, "Zylinder Ø")               
    StringGadget(#Gadget_DZd, WindowX+100, WindowY-2, lg-62, h, "", #PB_String_Numeric)
    TextGadget(#PB_Any, WindowX+160, WindowY, lg-80, h, "mm")
    WindowY=WindowY+abst
; Eingabefenster Zylinder-Länge 
    TextGadget(#PB_Any, WindowX, WindowY, lg, h, "Zyl.-Länge")
    StringGadget(#Gadget_DZl, WindowX+100, WindowY-2, lg-62, h, "", #PB_String_Numeric)
    TextGadget(#PB_Any, WindowX+160, WindowY, lg-80, h, "mm")
    WindowY=WindowY+abst
; Eingabefenster Spule-Durchmesser
    TextGadget(#PB_Any, WindowX, WindowY, lg, h, "Spule Ø")
    StringGadget(#Gadget_DSp, WindowX+100, WindowY-2, lg-62, h, "", #PB_String_Numeric)
    TextGadget(#PB_Any, WindowX+160, WindowY, lg-80, h, "mm")
    WindowY=WindowY+abst
; Eingabefenster Draht-Durchmesser
    TextGadget(#PB_Any, WindowX, WindowY, lg, h, "Draht Ø")
    StringGadget(#Gadget_DDr, WindowX+100, WindowY-2, lg-62, h, "")
    TextGadget(#PB_Any, WindowX+160, WindowY, lg-80, h, "mm")
    GadgetToolTip(#Gadget_DDr, "Dezimalpunkt statt Komma")
; Hier sollen noch die Ausgabefenster angehängt werden in welchen die Ergebnisse der Berechnung erscheinen
  EndProcedure
  
  ; Prozedur Berechnung mit Ausgabe in Ausgabefenster
  Procedure Berechnung()
  EndProcedure
  
  If OpenWindow(0, WindowX, WindowY, WindowWidth, WindowHeight, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    TextGadget(#PB_Any, WindowX+5, WindowY+380, WindowWidth-5, 23, "© blabla",#PB_Text_Center)
    PanelGadget     (0, WindowX+8, WindowY+8, WindowWidth-16, WindowHeight-37)
      
      AddGadgetItem (0, -1,"Frequenz")
      TextGadget(#PB_Any, WindowX+5, WindowY+8, WindowWidth-32, 23, "Individuelle Frequenzeingabe",#PB_Text_Center)
      Open_Individuell()
      
      AddGadgetItem (0, -1, "10m")
      TextGadget(#PB_Any, WindowX+8, WindowY+8, WindowWidth-16, 17, "28.000 - 29.700 MHz",#PB_Text_Center)
      
        PanelGadget (1, WindowX+5, WindowY+25, WindowWidth-32, WindowHeight-94)
          AddGadgetItem(1, -1, "28.000 - 28.190 MHz")
          ;Open_Band(freq=28100)
          AddGadgetItem(1, -1, "28.320 - 29.200 MHz")
          AddGadgetItem(1, -1, "29.520 - 29.700 MHz")
        CloseGadgetList()
        
      AddGadgetItem (0, -1,"11m")
      TextGadget(#PB_Any, WindowX+8, WindowY+8, WindowWidth-16, 17, "26.565 - 27.405 MHz",#PB_Text_Center)
        PanelGadget (2, WindowX+5, WindowY+25, WindowWidth-32, WindowHeight-94)
          AddGadgetItem(2, -1, "28.000 - 28.190 MHz")
          AddGadgetItem(2, -1, "28.320 - 29.200 MHz")
          AddGadgetItem(2, -1, "29.520 - 29.700 MHz")
        CloseGadgetList()
        
      AddGadgetItem (0, -1,"12m")
      TextGadget(#PB_Any, WindowX+8, WindowY+8, WindowWidth-16, 17, "24.890 - 24.990 MHz",#PB_Text_Center)
      AddGadgetItem (0, -1,"15m")
      TextGadget(#PB_Any, WindowX+8, WindowY+8, WindowWidth-16, 17, "21.000 - 21.450 MHz",#PB_Text_Center)
      AddGadgetItem (0, -1,"17m")
      TextGadget(#PB_Any, WindowX+8, WindowY+8, WindowWidth-16, 17, "18.068 - 18.168 MHz",#PB_Text_Center)
      AddGadgetItem (0, -1,"20m")
      TextGadget(#PB_Any, WindowX+8, WindowY+8, WindowWidth-16, 17, "14.000 - 14.350 MHz",#PB_Text_Center)
      AddGadgetItem (0, -1,"30m")
      TextGadget(#PB_Any, WindowX+8, WindowY+8, WindowWidth-16, 17, "10.100 - 10.150 MHz",#PB_Text_Center)
      AddGadgetItem (0, -1,"40m")
      TextGadget(#PB_Any, WindowX+8, WindowY+8, WindowWidth-16, 17, "7.000 - 7.200 MHz",#PB_Text_Center)
      AddGadgetItem (0, -1,"80m")
      TextGadget(#PB_Any, WindowX+8, WindowY+8, WindowWidth-16, 17, "3.500 - 3.800 MHz",#PB_Text_Center)

    CloseGadgetList()
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

EndIf
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: PanelGadget und StringGadget's = fehlerhaft

Beitrag von Bisonte »

Also bei mir wird ein Fenster mit diversen Gadgets angezeigt und es hängt sich nichts auf...

Auch Panel, durchgängig anklickbar ...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
HeX0R
Beiträge: 3042
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: PanelGadget und StringGadget's = fehlerhaft

Beitrag von HeX0R »

Mach mal den Debugger an, dann siehst du eine Fehlermeldung.
DoubleDee
Beiträge: 8
Registriert: 08.06.2011 17:41

Re: PanelGadget und StringGadget's = fehlerhaft

Beitrag von DoubleDee »

Bisonte hat geschrieben:Also bei mir wird ein Fenster mit diversen Gadgets angezeigt und es hängt sich nichts auf...

Auch Panel, durchgängig anklickbar ...
... so wie der Code im Forum steht, hängt er sich freilich nicht auf. Erst wenn "#Gadget_Frq" statt "#PB_Any" eingesetzt wird ... nacha geht's in's Nirwana..!
Und wieso werden ein Teil der Eingabefenster nicht angezeigt, der Rest aber doch? Ich rede hier nur von dem ersten Panel, da ich erst weitermache, wenn's funktioniert ....

Gruß 'DD'
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: PanelGadget und StringGadget's = fehlerhaft

Beitrag von Pelagio »

Hallo DoubleDee.

denke bitte daran das das Panel auch ein Gadget ist und deswegen wäre es ratsam dem Panel nicht die gleiche 'GadgetNr' zu geben wie dem Stringgadget. Ich würde Dir also raten das Panel in deine Enumeration aufzunehmen (#Gadget_Pan).
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Benutzeravatar
HeX0R
Beiträge: 3042
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: PanelGadget und StringGadget's = fehlerhaft

Beitrag von HeX0R »

Tja, nun hast du die Überraschung verdorben, ich hatte gehofft er würde den Fehler selbst finden ;)
DoubleDee
Beiträge: 8
Registriert: 08.06.2011 17:41

Re: PanelGadget und StringGadget's = fehlerhaft

Beitrag von DoubleDee »

Pelagio hat geschrieben:Hallo DoubleDee.

denke bitte daran das das Panel auch ein Gadget ist und deswegen wäre es ratsam dem Panel nicht die gleiche 'GadgetNr' zu geben wie dem Stringgadget. Ich würde Dir also raten das Panel in deine Enumeration aufzunehmen (#Gadget_Pan).
... vielen Dank, dies war schon mal ein riesiger Fortschritt ... aaaaber

nachdem den Eingabefenstern ihre Gadgets zugewiesen wurden, werden die ersten beiden (außer den Texten vorne und hinten) leider immer noch nicht angezeigt, während die darauffolgenden einwandfrei zu sehen sind. Ich hab's leider noch nicht begriffen, wo ich die sogen. Gadget-Nummern sehe, wenn einem Gadget ein String zugewiesen wurde (z.B.: "#Gadget_Freq")

Vielen Dank für den Tip muß nun die nächsten Stunden mit der Hilfe zubringen, da eine Schnellsuche bisher leider keinen Erfolg brachte... :roll:

Gruß 'DD'
DoubleDee
Beiträge: 8
Registriert: 08.06.2011 17:41

Re: PanelGadget und StringGadget's = fehlerhaft

Beitrag von DoubleDee »

HeX0R hat geschrieben:Tja, nun hast du die Überraschung verdorben, ich hatte gehofft er würde den Fehler selbst finden ;)
... es ist ja bekannt, daß ein Fehler (wenn man ihn stundenlang sucht) nicht in's Auge springt. Daher meine verzweifelte Anfrage ... :wink:
( Ein "Profi" sieht's sofort ! )
Gruß 'DD'

PS: Gibt's eigentlich ein Equivalent zu JAVA: value.replace(/,/,".") ? Bei falscher Eingabe von einem Komma wird ein Dezimal-Punkt gesetzt.
Benutzeravatar
HeX0R
Beiträge: 3042
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: PanelGadget und StringGadget's = fehlerhaft

Beitrag von HeX0R »

Das war auch nicht böse gemeint ;)

Das Pendant zu deiner Java-Funktion wäre wohl ReplaceString()
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: PanelGadget und StringGadget's = fehlerhaft

Beitrag von STARGÅTE »

nachdem den Eingabefenstern ihre Gadgets zugewiesen wurden, werden die ersten beiden (außer den Texten vorne und hinten) leider immer noch nicht angezeigt.
Also, Enumeration macht nichts anderes, als den Aufgelisteten Konstanten Nummer zuzuweisen.
Und zwar wenn keine Angabe gemacht wird, ab 0.
In deinem Fall wäre also:

Code: Alles auswählen

  #Gadget_Frq = 0
  #Gadget_DZd = 1
  #Gadget_DZl = 2
  #Gadget_DSp = 3
Das heißt diese Nummern bekomme auch deine StringGadgets.

Nun definierst du aber schon unten 3 PanelGadgets welche auch die Nummer 0, 1 und 2 bekomme.
Schlussfolgern ersetzen die PanelGadgets die vorher definierten StringGadgets

Darum: Wenn du mit Enumeration Gadget-Konstanten definierst, dann musst du das mit allen machen, um keine Überscheidung zu bekommen. (wenn diese mit nicht Any erstelt werden)
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
Antworten