3 Gadget-Probleme

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

3 Gadget-Probleme

Beitrag von Mok »

Hi!

Also... ich mach für meinen "Aimer v1.00" eine art Start Manager, wo man die ScreenWidth, die ScreenHeight und die ScreenDepth einstellen kann. All das erfolgt per GUI. (Mit ein paar RadioGadgets und einem ComboGadget)
Die Standardwerte, also die Voreinstellungen sollen die außerhalb des Programmes sein (also mit der Desktop-Library zu berechnen).
Aber iregendwie sind alle 3 Komponenten (Width, Height und Depth) 0. Hier mal ein Code-Snippet (unübersichtlich und ünschön programmiert und vom VD exportiert)

Code: Alles auswählen

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_0
  #Combo_0
  #Text_1
  #Radio_0
  #Radio_1
  #Radio_3
  #Radio_5
  #Radio_7
  #Button_0
  #Button_1
  #Button_3
EndEnumeration

ExamineDesktops()


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 242, 46, 610, 310, "Aimer – Start Manager",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
    ;If CreateGadgetList(WindowID(#Window_0))
      TextGadget(#Text_0, 10, 20, 110, 20, "Auflösung auswählen:")
      ComboBoxGadget(#Combo_0, 10, 50, 120, 20)
      TextGadget(#Text_1, 210, 20, 110, 20, "Farbtiefe auwählen")
      OptionGadget(#Radio_0, 210, 40, 240, 30, "4 Bit.........16 Farben / nicht empfehlenswert")
      OptionGadget(#Radio_1, 210, 70, 250, 30, "8 Bit.........256 Farben / nicht empfehlenswert")
      OptionGadget(#Radio_3, 210, 100, 280, 30, "16 Bit.......65 536 Farben / nur für alte Grafikkarten")
      OptionGadget(#Radio_5, 210, 130, 260, 30, "24 Bit.......16 777 216 Farben / empfehlenswert")
      OptionGadget(#Radio_7, 210, 160, 380, 30, "32 Bit.......16 777 216 Farben, schneller als 24 Bit / sehr empfehlenswert")
      ButtonGadget(#Button_0, 10, 230, 130, 30, "Aimer v1.00 starten")
      ButtonGadget(#Button_1, 470, 230, 130, 30, "Beenden")
      ButtonGadget(#Button_3, 230, 230, 130, 30, "Speichern ohne beenden")
     
      AddGadgetItem(#Combo_0,0,"640x480")
      AddGadgetItem(#Combo_0,1,"600x800")
      AddGadgetItem(#Combo_0,2,"1024x768")
      AddGadgetItem(#Combo_0,3,"1152x864")
      AddGadgetItem(#Combo_0,4,"1280x768")
      AddGadgetItem(#Combo_0,5,"1440x900")
     
    ;EndIf
  EndIf
EndProcedure 


Open_Window_0()

Select DesktopDepth(0)
  Case 4
    SetGadgetState(#Radio_0, 1)
  Case 8
    SetGadgetState(#Radio_1, 1)
  Case 16
    SetGadgetState(#Radio_3, 1)
  Case 24
    SetGadgetState(#Radio_5, 1)
  Case 32
    SetGadgetState(#Radio_7, 1)
EndSelect

SetGadgetText(#Combo_0,Str(DesktopHeight(0))+"x"+Str(DesktopWidth(0)))

Debug widht
Debug height
Debug depth

Was ist daran falsch?

MfG, Mok (hat nichts mit Muzik oder Knast zu tun)
Zuletzt geändert von Mok am 16.01.2009 22:58, insgesamt 1-mal geändert.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

LOL!?

Code: Alles auswählen

Debug widht
Debug height
Debug depth 
und wo FÜLLST du diese Variablen?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Beitrag von Mok »

Ach, das ist noch ein überbleibsel von vorher...
aktueller Code... Kot.. hust... Plumpaquatsch...

Code: Alles auswählen

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_0
  #Combo_0
  #Text_1
  #Radio_0
  #Radio_1
  #Radio_3
  #Radio_5
  #Radio_7
  #Button_0
  #Button_1
  #Button_3
EndEnumeration

ExamineDesktops()


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 242, 46, 610, 310, "Aimer – Start Manager",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
    ;If CreateGadgetList(WindowID(#Window_0))
      TextGadget(#Text_0, 10, 20, 110, 20, "Auflösung auswählen:")
      ComboBoxGadget(#Combo_0, 10, 50, 120, 20)
      TextGadget(#Text_1, 210, 20, 110, 20, "Farbtiefe auwählen")
      OptionGadget(#Radio_0, 210, 40, 240, 30, "4 Bit.........16 Farben / nicht empfehlenswert")
      OptionGadget(#Radio_1, 210, 70, 250, 30, "8 Bit.........256 Farben / nicht empfehlenswert")
      OptionGadget(#Radio_3, 210, 100, 280, 30, "16 Bit.......65 536 Farben / nur für alte Grafikkarten")
      OptionGadget(#Radio_5, 210, 130, 260, 30, "24 Bit.......16 777 216 Farben / empfehlenswert")
      OptionGadget(#Radio_7, 210, 160, 380, 30, "32 Bit.......16 777 216 Farben, schneller als 24 Bit / sehr empfehlenswert")
      ButtonGadget(#Button_0, 10, 230, 130, 30, "Aimer v1.00 starten")
      ButtonGadget(#Button_1, 470, 230, 130, 30, "Beenden")
      ButtonGadget(#Button_3, 230, 230, 130, 30, "Speichern ohne beenden")
     
      AddGadgetItem(#Combo_0,0,"640x480")
      AddGadgetItem(#Combo_0,1,"600x800")
      AddGadgetItem(#Combo_0,2,"1024x768")
      AddGadgetItem(#Combo_0,3,"1152x864")
      AddGadgetItem(#Combo_0,4,"1280x768")
      AddGadgetItem(#Combo_0,5,"1440x900")
     
    ;EndIf
  EndIf
EndProcedure 


Open_Window_0()

Select DesktopDepth(0)
  Case 4
    SetGadgetState(#Radio_0, 1)
  Case 8
    SetGadgetState(#Radio_1, 1)
  Case 16
    SetGadgetState(#Radio_3, 1)
  Case 24
    SetGadgetState(#Radio_5, 1)
  Case 32
    SetGadgetState(#Radio_7, 1)
EndSelect

SetGadgetText(#Combo_0,Str(DesktopHeight(0))+"x"+Str(DesktopWidth(0)))
Edit:
Tiefe funzt, aber Höhe/breite nicht.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
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

Beitrag von ts-soft »

Immer noch Plumperquatsch!
Wo ist das EventLoop?
Du erstellst bisher lediglich ein Fenster, das auch kurz aufblitzt :mrgreen:
Da kann noch nicht viel passieren
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

och Moki...

da seh ich immer noch nix, du hast ja nicht mal ne rudimentäre Eventschleife drin, damit das Fenster sichtbar bleibt.

...

und wenn ich eine schleife einsetze, ok, dann seh ich keine aktuelle zeile in der auflösungs-combo...



btw...

du solltest vielleicht die verfügbaren Screenmodi abfragen, bevor du irgendwelche anbietest.

ein (etwas knappes) beispiel findest du im Screen3DRequester.pb im Examples Ordner.

etwas Anregung verschafft dir evtl. auch dieser thread:
http://www.purebasic.fr/german/viewtopic.php?t=17250
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Beitrag von Mok »

Ich wollte es vermeiden den ganzen Plumpaquatsch zu posten, aber... what shell's:

Code: Alles auswählen

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_0
  #Combo_0
  #Text_1
  #Radio_0
  #Radio_1
  #Radio_3
  #Radio_5
  #Radio_7
  #Button_0
  #Button_1
  #Button_3
EndEnumeration

ExamineDesktops()


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 242, 46, 610, 310, "Aimer – Start Manager",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
    ;If CreateGadgetList(WindowID(#Window_0))
      TextGadget(#Text_0, 10, 20, 110, 20, "Auflösung auswählen:")
      ComboBoxGadget(#Combo_0, 10, 50, 120, 20)
      TextGadget(#Text_1, 210, 20, 110, 20, "Farbtiefe auwählen")
      OptionGadget(#Radio_0, 210, 40, 240, 30, "4 Bit.........16 Farben / nicht empfehlenswert")
      OptionGadget(#Radio_1, 210, 70, 250, 30, "8 Bit.........256 Farben / nicht empfehlenswert")
      OptionGadget(#Radio_3, 210, 100, 280, 30, "16 Bit.......65 536 Farben / nur für alte Grafikkarten")
      OptionGadget(#Radio_5, 210, 130, 260, 30, "24 Bit.......16 777 216 Farben / empfehlenswert")
      OptionGadget(#Radio_7, 210, 160, 380, 30, "32 Bit.......16 777 216 Farben, schneller als 24 Bit / sehr empfehlenswert")
      ButtonGadget(#Button_0, 10, 230, 130, 30, "Aimer v1.00 starten")
      ButtonGadget(#Button_1, 470, 230, 130, 30, "Beenden")
      ButtonGadget(#Button_3, 230, 230, 130, 30, "Speichern ohne beenden")
     
      AddGadgetItem(#Combo_0,0,"640x480")
      AddGadgetItem(#Combo_0,1,"600x800")
      AddGadgetItem(#Combo_0,2,"1024x768")
      AddGadgetItem(#Combo_0,3,"1152x864")
      AddGadgetItem(#Combo_0,4,"1280x768")
      AddGadgetItem(#Combo_0,5,"1440x900")
     
    ;EndIf
  EndIf
EndProcedure 


Open_Window_0()

Select DesktopDepth(0)
  Case 4
    SetGadgetState(#Radio_0, 1)
  Case 8
    SetGadgetState(#Radio_1, 1)
  Case 16
    SetGadgetState(#Radio_3, 1)
  Case 24
    SetGadgetState(#Radio_5, 1)
  Case 32
    SetGadgetState(#Radio_7, 1)
EndSelect

SetGadgetText(#Combo_0,Str(DesktopHeight(0))+"x"+Str(DesktopWidth(0)))

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadget() ; Is it a gadget event?
  
  EventType = EventType() ; The event type
  
  ;You can place code here, and use the result as parameters for the procedures
  
  If Event = #PB_Event_Gadget
    
    If GadgetID = #Combo_0
      
    ElseIf GadgetID = #Radio_0
      
    ElseIf GadgetID = #Radio_1
      
    ElseIf GadgetID = #Radio_3
      
    ElseIf GadgetID = #Radio_5
      
    ElseIf GadgetID = #Radio_7
      
    ElseIf GadgetID = #Button_0
    
    ElseIf GadgetID = #Button_1
      End
    ElseIf GadgetID = #Button_3
      
    EndIf
    
  EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
;
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Code: Alles auswählen

Select DesktopDepth(0)
  Case 4
    SetGadgetState(#Radio_0, 1)
  Case 8
    SetGadgetState(#Radio_1, 1)
  Case 16
    SetGadgetState(#Radio_3, 1)
  Case 24
    SetGadgetState(#Radio_5, 1)
  Case 32
    SetGadgetState(#Radio_7, 1)
EndSelect
Es macht hier schonmal keinen Unterschied was DesktopDepth() ausgibt, du setzt das Gadget immer auf 1...

Code: Alles auswählen

SetGadgetText(#Combo_0,Str(DesktopHeight(0))+"x"+Str(DesktopWidth(0)))
PB-Hilfe zu SetGadgetText() hat geschrieben:ComboBoxGadget(): ändert den angezeigten Text. Ist das ComboBoxGadget nicht editierbar, muss sich der Text in der Aufklapp-Liste befinden.
Um etwas zu aktivieren was nich in der Liste is musst du das ComboboxGadget Editierbar machen oder alle Möglichen Auflösungen einfügen...
Zuletzt geändert von KeyKon am 16.01.2009 23:01, insgesamt 1-mal geändert.
(\/) (°,,,°) (\/)
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Beitrag von Mok »

KeyKon hat geschrieben:

Code: Alles auswählen

Select DesktopDepth(0)
  Case 4
    SetGadgetState(#Radio_0, 1)
  Case 8
    SetGadgetState(#Radio_1, 1)
  Case 16
    SetGadgetState(#Radio_3, 1)
  Case 24
    SetGadgetState(#Radio_5, 1)
  Case 32
    SetGadgetState(#Radio_7, 1)
EndSelect
Es macht hier schonmal keinen Unterschied was DesktopDepth() ausgibt, du setzt das Gadget immer auf 1...
Irgendwie komisch dass gerade der Part meines Programmes funzt :?
Müsste man nach den CASEs leicht auch immer ein break dazumachen, so wie in Java?
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
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

Beitrag von ts-soft »

Meine Auflösung ist natürlich nicht bei, kann er als nicht Anzeigen :mrgreen:
Aber hier haste wohl höhe und breite verdreht, sollte so heissen:

Code: Alles auswählen

SetGadgetText(#Combo_0,Str(DesktopWidth(0))+"x"+Str(DesktopHeight(0)))
War das das Problem? Habs nicht so ganz erkannt vor lauter leerem code
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also, wie oben gesagt, beschäftige dich vorher noch mal mit den verfügbaren screenmodes.

die meisten, die dort in der Liste stehen, hab ich nicht, und die, die ich hab, stehen nicht drin.

... und ich hab deinen Eventloop mal gepimpt, damit du siehst, wie's besser aussieht:

Code: Alles auswählen

Repeat
 
  Event = WaitWindowEvent() 
  WindowID = EventWindow() 
  GadgetID = EventGadget() 
  EventType = EventType() 
 
  Select Event
    Case #PB_Event_CloseWindow
      EXIT = 1

    Case #PB_Event_Gadget
      Select GadgetID
        Case #Combo_0
          
        Case #Radio_0
          
        Case #Radio_1
          
        Case #Radio_3
          
        Case #Radio_5
          
        Case #Radio_7
          
        Case #Button_0
          
        Case #Button_1
          EXIT = 1

        Case #Button_3
          
      EndSelect
  EndSelect
Until EXIT

End
dein einziges "problem" ist wohl m moment, dass anscheinend das SetGadgetText von Combo nicht richtig funktioniert...
das kenn ich so garnicht, hab ich mich noch nicht mit beschäftigt.
würde aber mal ins blaue raten, dass du die ermittelte auflösung als element aufnehmen musst, und nicht als text setzen.


[edit]
Mok hat geschrieben:
KeyKon hat geschrieben:Es macht hier schonmal keinen Unterschied was DesktopDepth() ausgibt, du setzt das Gadget immer auf 1...
Irgendwie komisch dass gerade der Part meines Programmes funzt :?
Müsste man nach den CASEs leicht auch immer ein break dazumachen, so wie in Java?
ne, das hat KeyKon nicht richtig gesehen, das stimmt schon so.

... und in PB braucht man kein "break"...

@KeyKon:
er setzt den betreffenden RadioButton auf Active, das stimmt so.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten