Rebar speichern und wiederherstellen

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
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

Rebar speichern und wiederherstellen

Beitrag von ts-soft »

Hab jetzt dies: http://tinyurl.com/ptkpgt in der MSDN gefunden, blicke
aber nicht durch :freak:
Ich hab 3 Bänder, die ich Speichern möchte, hauptsächlich eigentlich die
Postion und natürlich wiederherstellen :wink:

Hat da mal jemand sowas gemacht oder könnte nen Tip abgeben?

Gruß

Thomas
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
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag von Andreas »

Mit RB_GETBANDCOUNT die Anzahl abfragen -
mit RB_GETBANDINFO die Einzelinformationen der Bänder abfragen-
mit RB_GETRECT die Position der Bänder abfragen-
usw.

Hab's selber noch nicht gemacht aber mit den RB - Messages sollte sich etwas anfangen lassen.
Gruss Andreas
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 »

BandCount brauche ich nicht, das ändert sich nicht, RB_GETRECT hört sich
auch einfach an, aber:

> mit RB_GETBANDINFO die Einzelinformationen der Bänder abfragen
Welche, wie was brauche ich?

Ich erstelle die Rebar mit 3 Bändern, danach will ich sie einfach nur noch
so positionieren, wie der User es verlassen hat.

Reicht da vielleicht schon RB_GETRECT und mit RB_SETRECT wieder setzen?

Aus der MSDN werde ich nicht so schlau, da gibst wohl diverse Strukturen,
die anzugeben sind und dann gefüllt werden. Aber welche wofür?
Try & Error wollte ich nicht unbedingt machen.

Danke erstmal für die Info

Gruß

Thomas

// edit:
Ich glaub ich habs, mit der #RB_SIZETORECT sollte ich die Position setzen können :D
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
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 »

Das war es leider nicht :cry:

Komme immer noch nicht weiter.
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
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag von Andreas »

ts-soft hat geschrieben:
> mit RB_GETBANDINFO die Einzelinformationen der Bänder abfragen
Welche, wie was brauche ich?
Alle Infos aller Bänder !

Ich habe mal ein kleines Beispiel auf die Schnelle gemacht. Stör Dich also nich nicht an der Art der Speicherung oder dem Aufbau des Codes. ist alles sehr rudimentär, sollte aber funktionieren.

Code: Alles auswählen

If OpenWindow(0, 0,0,800,600, "Rebar-Test", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)

Edit = StringGadget(0, 0,0,80,20, "StringGadget1")
Edit1 = StringGadget(1, 100,0,80,20, "StringGadget2")
Edit2 = StringGadget(2, 200,0,80,20, "StringGadget3")
Rebar = CreateWindowEx_(0,"ReBarWindow32","",$56800941,0,0,0,0,WindowID(0),2000,0,0)
RB.REBARBANDINFO
RB\cbSize = SizeOf(RB)
RB\fMask = #RBBIM_CHILDSIZE|#RBBIM_HEADERSIZE|#RBBIM_STYLE|#RBBIM_CHILD|#RBBIM_SIZE|#RBBIM_TEXT

RB\fStyle = #RBBS_GRIPPERALWAYS
RB\cxMinChild = 80
RB\cxHeader = 50
RB\cyChild = 24
RB\cyMinChild = 24

RB\cx = 0
RB\hwndChild = edit
RB\lpText=@"Edit0"
SendMessage_(Rebar,#RB_INSERTBAND,0,RB)
RB\cx = 200
RB\hwndChild = edit1
RB\lpText=@"Edit1"
SendMessage_(Rebar,#RB_INSERTBAND,1,RB)
RB\cx = 100
RB\hwndChild = edit2
RB\lpText=@"Edit2"
SendMessage_(Rebar,#RB_INSERTBAND,2,RB)

 If ReadFile(0, "Bandall.data")
   ReadData(0,RB,SizeOf(RB))
   RB\hwndChild = edit
   RB\lpText=@"Edit0"
   SendMessage_(Rebar,#RB_SETBANDINFO,0,RB)

   ReadData(0,RB,SizeOf(RB))
   RB\hwndChild = edit1
   RB\lpText=@"Edit1"
   SendMessage_(Rebar,#RB_SETBANDINFO,1,RB)

   ReadData(0,RB,SizeOf(RB))
   RB\hwndChild = edit2
   RB\lpText=@"Edit2"
   SendMessage_(Rebar,#RB_SETBANDINFO,2,RB)

   CloseFile(0)
 EndIf

  Repeat
    Event = WaitWindowEvent()
    Select Event
      Case #PB_Event_Gadget
         Select EventGadget()
         EndSelect
      Case #PB_Event_CloseWindow
             If CreateFile(0, "Bandall.data")
             For I = 0 To SendMessage_(rebar,#RB_GETBANDCOUNT,0,0)-1
             SendMessage_(Rebar,#RB_GETBANDINFO,I,RB)
             WriteData(0,RB,SizeOf(RB))
             Next I
             CloseFile(0)
             EndIf  
        Quit = 1
    EndSelect
  Until Quit = 1
EndIf
End
Gruss Andreas
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 »

:allright:
Das sieht gut aus, werde es nachher mal einbauen und testen.
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
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag von Andreas »

Habe den Code noch etwas aufbereitet, jetzt werden die Bänder in der richtigen Reihenfolge wiederhergestellt.

Code: Alles auswählen

Global Rebar.l,RB.REBARBANDINFO

Procedure SaveBands()
  If CreateFile(0, "Bandall.data")
    For I = 0 To SendMessage_(rebar,#RB_GETBANDCOUNT,0,0)-1
      SendMessage_(Rebar,#RB_GETBANDINFO,I,RB)
      WriteData(0,RB,SizeOf(RB))
    Next I
    CloseFile(0)
  EndIf  
EndProcedure

Procedure RestoreBands()
 If ReadFile(0, "Bandall.data")
   FreeGadget(0)
   FreeGadget(1)
   FreeGadget(2)

   For I = 0 To SendMessage_(rebar,#RB_GETBANDCOUNT,0,0)-1
     ReadData(0,RB,SizeOf(RB))
     Select RB\lParam
      Case 0
        RB\hwndChild = ToolBarID(0)
        RB\lpText=@"Datei"
      Case 1
        RB\hwndChild = StringGadget(0,0,0,0,0, "Edit 1")
        RB\lpText=@"Edit 1"
      Case 2
        RB\hwndChild = StringGadget(1,0,0,0,0, "Edit 2")
        RB\lpText=@"Edit 2"
      Case 3
        RB\hwndChild = StringGadget(2,0,0,0,0, "Edit 3")
        RB\lpText=@"Edit 3"
      EndSelect
   SendMessage_(Rebar,#RB_SETBANDINFO,I,RB)
   Next I

   CloseFile(0)
 EndIf

EndProcedure


If OpenWindow(0, 0,0,800,600, "Rebar-Test", #PB_Window_SizeGadget|#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)

If CreateToolBar(0, WindowID(0))
 ToolBarStandardButton(0, #PB_ToolBarIcon_New)
 ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
 ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
 ToolBarToolTip(0, 0, "neues Dokument")
 ToolBarToolTip(0, 1, "Dokument öffnen")
 ToolBarToolTip(0, 2, "Dokument speichern")
EndIf
SendMessage_(ToolBarID(0),#TB_SETSTYLE,0,#CCS_NODIVIDER|#CCS_NOPARENTALIGN|#WS_VISIBLE|#WS_CHILD|#TBSTYLE_FLAT|#TBSTYLE_TRANSPARENT|#TB_AUTOSIZE)

Rebar = CreateWindowEx_(0,"ReBarWindow32","",#WS_BORDER|#WS_CHILD|#WS_VISIBLE|#CCS_NODIVIDER|#RBS_BANDBORDERS|#RBS_AUTOSIZE,0,0,WindowWidth(0),120,WindowID(0),2000,0,0)
RB\cbSize = SizeOf(RB)
RB\fMask = #RBBIM_CHILDSIZE|#RBBIM_HEADERSIZE|#RBBIM_STYLE|#RBBIM_CHILD|#RBBIM_SIZE|#RBBIM_TEXT|#RBBIM_LPARAM

RB\cxMinChild = 100
RB\cxHeader = 50
RB\cyChild = 24
RB\cyMinChild = 24

RB\fStyle = #RBBS_GRIPPERALWAYS|#RBBS_CHILDEDGE

RB\cx = 150
RB\hwndChild = ToolBarID(0)
RB\lpText=@"Datei"
RB\lParam = 0
SendMessage_(Rebar,#RB_INSERTBAND,0,RB)

RB\cx = 100
RB\hwndChild = StringGadget(0, 0,0,0,0, "Edit 1")
RB\lParam = 1
RB\lpText=@"Edit 1"
SendMessage_(Rebar,#RB_INSERTBAND,1,RB)

RB\cx = 200
RB\hwndChild = StringGadget(1, 0,0,0,0, "Edit 2")
RB\lpText=@"Edit 2"
RB\lParam = 2
SendMessage_(Rebar,#RB_INSERTBAND,2,RB)

RB\cx = 100
RB\hwndChild = StringGadget(2, 0,0,0,0, "Edit 3")
RB\lpText=@"Edit 3"
RB\lParam = 3
SendMessage_(Rebar,#RB_INSERTBAND,3,RB)

RestoreBands()


  Repeat
    Event = WaitWindowEvent()
    Select Event
      Case #WM_SIZE
      SetWindowPos_(Rebar, #Null, 0, 0, WindowWidth(0),SendMessage_(Rebar,#RB_GETBARHEIGHT,0,0), #SWP_NOMOVE | #SWP_NOZORDER | #SWP_NOACTIVATE)
      Case #PB_Event_Gadget
         Select EventGadget()
         EndSelect
      Case #PB_Event_CloseWindow
             SaveBands()
        Quit = 1
    EndSelect
  Until Quit = 1
EndIf
End
Zuletzt geändert von Andreas am 17.05.2009 18:17, insgesamt 1-mal geändert.
Gruss Andreas
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 »

:allright:

Danke, hab schon geflucht, weil die durcheinander waren :mrgreen:

Hab dann letztendlich erstmal nur das dritte Band gespeichert, das
funktionierte aber nur, solange es hinter den anderen war, ansonsten hats
die dritte Reihe aufgemacht :mrgreen:

Gruß

Thomas

// edit
postitionieren macht er, aber ausser dem Gripper ist nichts zu sehen.
In RB\lParam ist ein viel zu grosser Wert bei mir :?
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
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag von Andreas »

ts-soft hat geschrieben: postitionieren macht er, aber ausser dem Gripper ist nichts zu sehen.
In RB\lParam ist ein viel zu grosser Wert bei mir :?
Code nochmal upgedatet.

RB\lParam geht nur von 0-3, mehr sollte es nicht sein.

Kann den Darstellungsfehler bei mir auch nicht nachvollziehen, hier ist alles sichtbar. Sieht nach dem Starten so aus wie beim Beenden.
Gruss Andreas
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Re: Rebar speichern und wiederherstellen

Beitrag von marco2007 »

@Thomas: Du nutzst doch auch ProGui, oder? Hast du eine Idee, wie man den Code von Andreas bei ProGui einsetzen kann?
Windows 11 - PB 6.03 x64
_________________________________
Antworten