Seite 1 von 2

Rebar speichern und wiederherstellen

Verfasst: 15.05.2009 15:54
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

Verfasst: 15.05.2009 21:05
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.

Verfasst: 15.05.2009 21:40
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

Verfasst: 15.05.2009 23:05
von ts-soft
Das war es leider nicht :cry:

Komme immer noch nicht weiter.

Verfasst: 16.05.2009 10:41
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

Verfasst: 16.05.2009 17:20
von ts-soft
:allright:
Das sieht gut aus, werde es nachher mal einbauen und testen.

Verfasst: 17.05.2009 15:33
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

Verfasst: 17.05.2009 15:38
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 :?

Verfasst: 17.05.2009 18:20
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.

Re: Rebar speichern und wiederherstellen

Verfasst: 05.04.2011 20:52
von marco2007
@Thomas: Du nutzst doch auch ProGui, oder? Hast du eine Idee, wie man den Code von Andreas bei ProGui einsetzen kann?