NextPreferenceGroup

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

NextPreferenceGroup

Beitrag von kunstlust »

Ich möchte gerne aus einer Prefsdatei Inhalte in ein StringGadget anzeigen lassen und diese per Button Vor- und Zurückblättern, mein Problem ist "Zurück"!
Habt Ihr eine Idee?

Code: Alles auswählen

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Button_zurueck
  #Button_vor
  #String_2
  #String_4
  #String_5
  #String_6
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 450, 200, 400, 289, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
      ButtonGadget(#Button_zurueck, 55, 220, 95, 40, "<")
      ButtonGadget(#Button_vor, 235, 220, 95, 40, ">")
      StringGadget(#String_2, 150, 30, 205, 20, "Name")
  EndIf
EndProcedure
OpenWindow_Window_0()
OpenPreferences("C:\temp\test.prefs")
 ExaminePreferenceGroups()
;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Button_zurueck
   
     SetGadgetText(#String_2, ReadPreferenceString("Name",""))
   
      ElseIf EventGadget = #Button_vor
    NextPreferenceGroup()
     SetGadgetText(#String_2, ReadPreferenceString("Name",""))
      ElseIf EventGadget = #String_2
      ElseIf EventGadget = #String_4
      ElseIf EventGadget = #String_5
      ElseIf EventGadget = #String_6
      EndIf
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver
;
;}
ClosePreferences()
Hier die kleine Prefs

Code: Alles auswählen

[User1]
Name=Mueller
[User2]
Name=Meier
[User3]
Name=Richter
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: NextPreferenceGroup

Beitrag von Kiffi »

kunstlust hat geschrieben:Habt Ihr eine Idee?
ich würde die Pref-Datei zu Programmstart in einem Rutsch
in eine geeignete Struktur einlesen und diese dann durchblättern.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: NextPreferenceGroup

Beitrag von kunstlust »

Hallo Kiffi,

das wollte ich vermeiden, gibt es keine einfache Möglichkeit?

Gruß Lars
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: NextPreferenceGroup

Beitrag von STARGÅTE »

Ich vermute mal das du auch XML ausschlagen wirst, wenn ich es dir jetzt vorschlage.

Von daher bleibt dir nur die möglichkeit die Preferenzdatei selbst du parsen, bzw. einen Parser zu schreiben
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
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

NextPreferenceGroup

Beitrag von kunstlust »

Hallo Stargate,

XML könnte doch gehen, das muss ich mir noch mal anschauen, aber die Idee ist gut, Danke.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: NextPreferenceGroup

Beitrag von Kiffi »

kunstlust hat geschrieben:gibt es keine einfache Möglichkeit?
das hier finde ich schon recht einfach:

Code: Alles auswählen

Structure sPreferenceKey
  Name.s
  Value.s
EndStructure

Structure sPreferenceGroup
  Name.s
  List myPreferenceKey.sPreferenceKey()
EndStructure

NewList myPreferenceGroup.sPreferenceGroup()

If OpenPreferences("C:\temp\test.prefs")
  
  If ExaminePreferenceGroups()
    
    While NextPreferenceGroup()
      
      AddElement(myPreferenceGroup())
      myPreferenceGroup()\Name=PreferenceGroupName()
      
      If ExaminePreferenceKeys()
        
        While NextPreferenceKey()
          
          AddElement(myPreferenceGroup()\myPreferenceKey())
          myPreferenceGroup()\myPreferenceKey()\Name=PreferenceKeyName()
          myPreferenceGroup()\myPreferenceKey()\Value=PreferenceKeyValue()
          
        Wend
        
      Else
        Debug "!ExaminePreferenceKeys()"
      EndIf
      
    Wend
    
  Else
    Debug "!ExaminePreferenceGroups()"
  EndIf
  
  ClosePreferences()
  
Else
  Debug "!OpenPreferences()"
EndIf

ForEach myPreferenceGroup()
  Debug "PreferenceGroupName: " + myPreferenceGroup()\Name
  ForEach myPreferenceGroup()\myPreferenceKey()
    Debug "  PreferenceKeyName: " + myPreferenceGroup()\myPreferenceKey()\Name
    Debug "  PreferenceKeyValue: " + myPreferenceGroup()\myPreferenceKey()\Value
  Next
  Debug "---"
Next
Navigiert wird dann mit den üblichen LinkedList-Befehlen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: NextPreferenceGroup

Beitrag von kunstlust »

Danke dir sehr Kiffi,

ich setze wie von dir Empfohlen die Daten so:

Code: Alles auswählen

PreviousElement(myPreferenceGroup())
        SetGadgetText(#String_2, myPreferenceGroup()\myPreferenceKey()\Value_Name)
        SetGadgetText(#String_4, myPreferenceGroup()\myPreferenceKey()\Value_Typ)
Da ich verschiedene Values nutzen will habe ich es gleich erweitert.

Nochmal Danke für den Tip, der Anfang ist oft immer das Problem :D
Antworten