Seite 3 von 3

Verfasst: 17.01.2009 12:15
von Mok
Ich hab jezt den Code von Dare Devil genommen... aber wie kann ich jetzt die Ausgewählte Breite/Höhe und Tiefe in eine PREFS-Datei eintragen? Also eigentlich sind die Probs nur:
  • Das Prog wird bei jedem Bildschirm andere Höhen/Breiten anzeigen, da ja nicht alle auf allen Bildschirmen funzen.
  • Mit CountGadgetItems() funzt GetGadgetState() nicht, oder doch? Und selbst wenn es funzen würde, würde bei einem Bildschirm der Eintrag Nummer 4 ein anderer sein als bei einem anderen Bildschirm, weill der zuletzt genannte vllt. nicht alle Breite/Höhen-Verhältnisse verwalten kann.
Mein vollständiger Code:

Code: Alles auswählen

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

; 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

InitSprite()
ExamineDesktops()
Global NewList Aufloesungen.s()
Global NewList Tiefe.l()
Global NewList Alle.s()


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")
     
      If ExamineScreenModes()
        While NextScreenMode()
          AddElement(Alle())
          Alle() = Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())+"x"+Str(ScreenModeDepth())
          aufChange = 1
          tiefChange = 1
          ForEach Aufloesungen()
            If Aufloesungen() = Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())
              aufChange = 0
            EndIf
          Next
         
          If aufChange = 1
            AddElement(Aufloesungen())
            Aufloesungen() = Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())
          EndIf
         
          ForEach Tiefe()
            If Tiefe() = ScreenModeDepth()
              tiefChange = 0
            EndIf
          Next
         
          If tiefChange = 1
            AddElement(Tiefe())
            Tiefe() = ScreenModeDepth()
          EndIf
        Wend
      EndIf
     
      ForEach Aufloesungen()
        AddGadgetItem(#Combo_0, CountGadgetItems(#Combo_0), Aufloesungen())
      Next
     
    ;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(DesktopWidth(0))+"x"+Str(DesktopHeight(0)))


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
;


PrefsWirte:
If CreatePreferences("settings.prefs")
  PreferenceGroup("StartSettings")
  If GetGadgetState(#Combo_0) = 0 Or GetGadgetState(#Combo_0) = 1
    hoehe$ = Left(GetGadgetText(#Combo_0),3)
    WritePreferenceLong("ScreenWidth",Val(hoehe$))
  Else
    breite$ = Left(GetGadgetText(#Combo_0),4)
    WritePreferenceLong("ScreenWidth",Val(breite$))
  EndIf
    hoehe$ = Right(GetGadgetText(#Combo_0),3)
    WritePreferenceLong("ScreenHeight",Val(hoehe$))
    
  If GetGadgetState(#Radio_0) = 1
    WritePreferenceLong("Depth",4)
  ElseIf GetGadgetState(#Radio_1) = 1
    WritePreferenceLong("Depth",8)
  ElseIf GetGadgetState(#Radio_3) = 1
    WritePreferenceLong("Depth",16)
  ElseIf GetGadgetState(#Radio_5) = 1
    WritePreferenceLong("Depth",4)
  EndIf
Else
  MessageRequester("Fehler!","Konnte die Voreinstellungen nicht laden/speichern."+Chr(10)+"Neuinstallation könnte den Fehler beheben")
EndIf
Return

Verfasst: 17.01.2009 12:54
von Kaeru Gaman
also ich hab jetzt zu wenig zeit die ganzen codes durchzuforsten,
muss jetz in die küche und den chinamann spielen...

wo ist das problem, auf die aktuell ausgewählte einstellung zuzugreifen,
wenn man eine LISTE erstellt, wie in dem Screen3DRequester Beispiel,
auf das ich jetzt zum DRITTEN mal hinweise?

Verfasst: 17.01.2009 13:07
von Mok
@ober mir:
Meinst du eine "Purebasic-Liste" oder eine "echte Liste"? Und dürfte das nicht egal sein? ich mach's einfach mit einem ComboBoxGadget... irgendwie versteh ich jetz gar nix mehr

Verfasst: 17.01.2009 13:25
von KeyKon
Er will damit nur sagen das dus dir schrecklich umständlich machst...
Hier ist deine Variante funktionierend:

Code: Alles auswählen

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

; 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

InitSprite()
ExamineDesktops()
Global NewList Aufloesungen.s()
Global NewList Tiefe.l()
Global NewList Alle.s()


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")
     
      If ExamineScreenModes()
        While NextScreenMode()
          AddElement(Alle())
          Alle() = Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())+"x"+Str(ScreenModeDepth())
          aufChange = 1
          tiefChange = 1
          ForEach Aufloesungen()
            If Aufloesungen() = Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())
              aufChange = 0
            EndIf
          Next
         
          If aufChange = 1
            AddElement(Aufloesungen())
            Aufloesungen() = Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())
          EndIf
         
          ForEach Tiefe()
            If Tiefe() = ScreenModeDepth()
              tiefChange = 0
            EndIf
          Next
         
          If tiefChange = 1
            AddElement(Tiefe())
            Tiefe() = ScreenModeDepth()
          EndIf
        Wend
      EndIf
     
      ForEach Aufloesungen()
        AddGadgetItem(#Combo_0, CountGadgetItems(#Combo_0), Aufloesungen())
      Next
     
    ;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(DesktopWidth(0))+"x"+Str(DesktopHeight(0)))

If OpenPreferences("settings.prefs")
  ExaminePreferenceGroups()
  
  While NextPreferenceGroup()
    
    If PreferenceGroupName() = "StartSettings"
      Break
    EndIf
    
  Wend
  
  
  breite$ = ReadPreferenceString("ScreenWidth","")
  hoehe$  = ReadPreferenceString("ScreenHeight","")
  
  SetGadgetText(#Combo_0,breite$+"x"+hoehe$)
  
  Select ReadPreferenceLong("Depth",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
EndIf
  

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


;



If CreatePreferences("settings.prefs")
  PreferenceGroup("StartSettings")
  res$ = GetGadgetText(#Combo_0)
  WritePreferenceString("ScreenWidth" ,StringField(res$,1,"x"))
  WritePreferenceString("ScreenHeight",StringField(res$,2,"x"))
   
  If GetGadgetState(#Radio_0) = 1
    WritePreferenceLong("Depth",4)
  ElseIf GetGadgetState(#Radio_1) = 1
    WritePreferenceLong("Depth",8)
  ElseIf GetGadgetState(#Radio_3) = 1
    WritePreferenceLong("Depth",16)
  ElseIf GetGadgetState(#Radio_5) = 1
    WritePreferenceLong("Depth",24)
  ElseIf GetGadgetState(#Radio_7) = 1
    WritePreferenceLong("Depth",32)
  EndIf
  ClosePreferences()
Else
  MessageRequester("Fehler!","Konnte die Voreinstellungen nicht laden/speichern."+Chr(10)+"Neuinstallation könnte den Fehler beheben")
EndIf
Spar dir in zukunft Sprungmarken, das ganze is mit einer Prozedur viel eleganter, und in Prefereces eine Gruppe zu erstellen obwohl nur drei Daten drinstehen sind auch mehr Hindernis als Hilfe... Wenn du ein bisschen übersicht haben willst nimm PreferenceComment()

Verfasst: 17.01.2009 14:03
von Mok
thx @ober mir

irgendwie löse ich alle programmierbaren Probleme umständlich

EDIT
WTF?
Die Werte richten sich nach den Zahlen, die in der PREFS-Datei stehen... sie sollen sich aber nach dem Desktop richten

Verfasst: 17.01.2009 15:49
von KeyKon
hä? welchen sinn haben dann bitte die prefs?

Verfasst: 17.01.2009 15:58
von Kaeru Gaman
ich verstehe schon, worauf Moki hinauswill - aber ich sehe nicht ein, ihm ne Komplettlösung vorzukaun,
wo ich ihm ausreichend Beispiel an die Hand gegeben hab.

die momemtane Desktopauflösung soll in die liste der möglichen auflösungen übernommen werden.
da ist ja schon mal ein Kerndenkfehler, das als momentanwert in die Combo eintragen zu wollen,
anstatt diesen entsprechenden eintrag herauszusuchen und zu aktivieren.
alternativ kann die einstellung aus den prefs aktiviert werden, wenn eine vorhanden ist.

und ja Miko, nein KeyKon, ich meine wirklich eine PB-Native LinkedList.
in die kann man die Rückgaben der ExamineScreenModes-Routine speichern,
kann die sortieren und überzählige aussortieren
(wie gesagt, die meisten GraKa-Moni-Kombinationen können über hundert verschiedene)
und kann dann eine überschaubare Anzahl an wirklich einstellbaren screenmodes in einem combo anbieten.
die Farbtiefen 4, 8 und 24 bit zur auswahl anzuzeigen ist sowieso unsinn.

Verfasst: 17.01.2009 20:40
von Mok
@Karu Gaman (neues Ava?^^)
Tatsächlich soll aus der Liste der eingetragenen Werte die Desktopauflösung herausgesucht werden, und nicht aus der PREFS ausgelesen werden... aber ich versteh nicht, warum mein Prog die Infos überhaupt aus der PREFS ausliest, und nicht (wie vorgesehen) den Ubser rumfuhrwerken lässt.
Kaeru Gaman hat geschrieben:aber ich sehe nicht ein, ihm ne Komplettlösung vorzukaun,
Pfuiteubel, vorgekauter Code/Kot...

Verfasst: 17.01.2009 21:11
von KeyKon
Naja, mein Beispiel macht das so weil ich dachte das du in die Prefs schreibst damit man es beim nächsten start nich nochmal auswählen muss...

Verfasst: 18.01.2009 11:55
von Mok
KeyKon hat geschrieben:Naja, mein Beispiel macht das so weil ich dachte das du in die Prefs schreibst damit man es beim nächsten start nich nochmal auswählen muss...
Ich hab in dem Snippet von dir aber keinerlei Preference-Befehle gefunden:

Code: Alles auswählen

If ExamineScreenModes()
        While NextScreenMode()
          AddElement(Alle())
          Alle() = Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())+"x"+Str(ScreenModeDepth())
          aufChange = 1
          tiefChange = 1
          ForEach Aufloesungen()
            If Aufloesungen() = Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())
              aufChange = 0
            EndIf
          Next
         
          If aufChange = 1
            AddElement(Aufloesungen())
            Aufloesungen() = Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())
          EndIf
         
          ForEach Tiefe()
            If Tiefe() = ScreenModeDepth()
              tiefChange = 0
            EndIf
          Next
         
          If tiefChange = 1
            AddElement(Tiefe())
            Tiefe() = ScreenModeDepth()
          EndIf
        Wend
      EndIf
     
      ForEach Aufloesungen()
        AddGadgetItem(#Combo_0, CountGadgetItems(#Combo_0), Aufloesungen())
      Next
EDIT:
SCHON GEFUNDEN!!!11

EDIT 2:
Finale Lösung: (ok, Wayne...)

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_3
  #Radio_5
  #Radio_7
  #Button_0
  #Button_1
  #Button_3
  #Liste
EndEnumeration

InitSprite()
ExamineDesktops()
Global NewList Aufloesungen.s()
Global NewList Tiefe.l()
Global NewList Alle.s()


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 242, 46, 370+130+10, 200+30, "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")
      ButtonGadget(#Button_0, 10, 180, 130, 30, "Aimer v1.00 starten")
      ButtonGadget(#Button_1, 370, 180, 130, 30, "Beenden")
      ButtonGadget(#Button_3, 190, 180, 130, 30, "Speichern ohne beenden")
     
      If ExamineScreenModes()
        While NextScreenMode()
          AddElement(Alle())
          Alle() = Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())+"x"+Str(ScreenModeDepth())
          aufChange = 1
          tiefChange = 1
          ForEach Aufloesungen()
            If Aufloesungen() = Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())
              aufChange = 0
            EndIf
          Next
         
          If aufChange = 1
            AddElement(Aufloesungen())
            Aufloesungen() = Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())
          EndIf
         
          ForEach Tiefe()
            If Tiefe() = ScreenModeDepth()
              tiefChange = 0
            EndIf
          Next
         
          If tiefChange = 1
            AddElement(Tiefe())
            Tiefe() = ScreenModeDepth()
          EndIf
        Wend
      EndIf
     
      ForEach Aufloesungen()
        AddGadgetItem(#Combo_0, CountGadgetItems(#Combo_0), Aufloesungen())
      Next
     
      ListViewGadget(#liste, 210, 50, 200, 100)
      ForEach Tiefe()
        AddGadgetItem(#liste, CountGadgetItems(#liste), Str(Tiefe()))
      Next
     
    ;EndIf
  EndIf
EndProcedure


Open_Window_0()

Select DesktopDepth(0)
  Case 16
    SetGadgetText(#Liste, "16")
  Case 24
    SetGadgetText(#Liste, "24")
  Case 32
    SetGadgetText(#Liste, "32")
EndSelect

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

If OpenPreferences("settings.prefs")
  ExaminePreferenceGroups()
 
  While NextPreferenceGroup()
   
    If PreferenceGroupName() = "StartSettings"
      Break
    EndIf
   
  Wend
 
 
  breite$ = ReadPreferenceString("ScreenWidth","")
  hoehe$  = ReadPreferenceString("ScreenHeight","")
 
  SetGadgetText(#Combo_0,breite$+"x"+hoehe$)
 
  Select ReadPreferenceLong("Depth",0)
    Case 16
      SetGadgetText(#Liste, "16")
    Case 24
      SetGadgetText(#liste, "24")
    Case 32
      SetGadgetText(#Liste, "32")
  EndSelect
EndIf
 

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_3
         
        Case #Radio_5
         
        Case #Radio_7
         
        Case #Button_0
         If GetGadgetState(#Liste) = -1
           MessageBox_(#Null,"Es muss eine Auflösung ausgewählt sein!","Fehler",#MB_OK | #MB_ICONERROR | #MB_DEFBUTTON1)
         Else
           Gosub PrefsWrite
         EndIf
         
         Delay(500)
         
         If RunProgram("aimer.exe")
           End
         Else
           MessageBox_(#Null,"aimer.exe kann nicht gefunden werden!"+Chr(10)+"Neuinstallation könnte den Fehler beheben","Fehler",#MB_OK | #MB_ICONERROR | #MB_DEFBUTTON1)
           End
         EndIf
        Case #Button_1
          EXIT = 1

        Case #Button_3
         If GetGadgetState(#Liste) = -1
           MessageBox_(#Null,"Es muss eine Auflösung ausgewählt sein!","Fehler",#MB_OK | #MB_ICONERROR | #MB_DEFBUTTON1)
         Else
           Gosub PrefsWrite
         EndIf
      EndSelect
  EndSelect
Until EXIT

End
;


PrefsWrite:
If CreatePreferences("settings.prefs") <> 0
  PreferenceGroup("StartSettings")
  res$ = GetGadgetText(#Combo_0)
  WritePreferenceString("ScreenWidth" ,StringField(res$,1,"x"))
  WritePreferenceString("ScreenHeight",StringField(res$,2,"x"))
  
  WritePreferenceString("Depth",GetGadgetText(#Liste))
  
  ClosePreferences()
Else
  MessageRequester("Fehler!","Konnte die Voreinstellungen nicht laden/speichern."+Chr(10)+"Neuinstallation könnte den Fehler beheben")
  End
EndIf
Return