Storing TControlbar child positions
I have seen people ask about this since Windows XP was hot, so here (drumroll) is how you save the position of the bars inside a TControlbar control. And also a perfect example of how useful class helpers are 🙂
Just put the code inside it’s own unit, add a reference to the unit in your form – and voila “loadfromstream” and “savetostream” can be used to store the positions of child controls to a stream.
TControlBarHelper = Class helper for TControlBar public Procedure SaveToStream(aStream:TStream); Procedure LoadFromStream(aStream:TStream); End; procedure TControlBarHelper.LoadFromStream(aStream: TStream); var x: Integer; mReader: TReader; mName: String; mObj: TControl; begin if aStream<>NIL then begin mReader:=TReader.Create(aStream,1024); try if mReader.ReadInteger=$BABE then Begin x:=mReader.ReadInteger; while x>0 do begin mName:=mReader.ReadString; mObj:=FindChildControl(mName); if mObj<>NIL then begin with mReader do Begin mObj.Left:=ReadInteger; mObj.Top:=ReadInteger; mObj.Width:=ReadInteger; mObj.Height:=ReadInteger; end; end; dec(x); end; end else Raise Exception.Create ('Failed to read controlbar, header not recognized error'); finally mReader.Free; end; end else Raise Exception.Create ('Failed to load controlbar, source stream was NIL'); end; procedure TControlBarHelper.SaveToStream(aStream: TStream); var x: Integer; mWriter: TWriter; begin if aStream<>NIL then begin mWriter:=TWriter.Create(aStream,1024); try mWriter.WriteInteger($BABE); mWriter.WriteInteger(self.ControlCount); for x:=0 to self.ControlCount-1 do Begin mWriter.WriteString(Controls[x].Name); mWriter.WriteInteger(Controls[x].Left); mWriter.WriteInteger(Controls[x].top); mWriter.WriteInteger(Controls[x].width); mWriter.WriteInteger(Controls[x].Height); end; finally mWriter.FlushBuffer; mWriter.Free; end; end else Raise Exception.Create ('Failed to store controlbar, target stream was NIL'); end;
Comments (0)
Trackbacks (0)
Leave a comment
Trackback
Recent
The vatican vault
- January 2022
- October 2021
- March 2021
- November 2020
- September 2020
- July 2020
- June 2020
- April 2020
- March 2020
- February 2020
- January 2020
- November 2019
- October 2019
- September 2019
- August 2019
- July 2019
- June 2019
- May 2019
- April 2019
- March 2019
- February 2019
- January 2019
- December 2018
- November 2018
- October 2018
- September 2018
- August 2018
- July 2018
- June 2018
- May 2018
- April 2018
- March 2018
- February 2018
- January 2018
- December 2017
- November 2017
- October 2017
- August 2017
- July 2017
- June 2017
- May 2017
- April 2017
- March 2017
- February 2017
- January 2017
- December 2016
- November 2016
- October 2016
- September 2016
- August 2016
- July 2016
- June 2016
- May 2016
- April 2016
- March 2016
- January 2016
- December 2015
- November 2015
- October 2015
- September 2015
- August 2015
- June 2015
- May 2015
- April 2015
- March 2015
- February 2015
- January 2015
- December 2014
- November 2014
- October 2014
- September 2014
- August 2014
- July 2014
- June 2014
- May 2014
- April 2014
- March 2014
- February 2014
- January 2014
- December 2013
- November 2013
- October 2013
- September 2013
- August 2013
- July 2013
- June 2013
- May 2013
- February 2013
- August 2012
- June 2012
- May 2012
- April 2012
You must be logged in to post a comment.