Question:
An ordinary Stringgrid with 5 columns and 7 rowsThe user wants to add 1 or 2 more rows. So farI know how to write the code! But where do I putthe code so it knows that there are 1 or 2 or evenmore new rows added? Where do I store the new infoin the programm that now there should be e.g. 7rows instead, when it is reopened(in Create?)
Answer:
The easiest way to implement a component “remembering” what it contains is to use streams to write and read a persistent copy of the component to and from the disk. Here’s an example:
//This writes a component to diskprocedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);var strm : TFileStream;begin strm := TFileStream.Create('SGrid.DAT', fmCreate); strm.WriteComponent(StringGrid1); strm.Free;end;//This reads a component from diskprocedure TForm1.FormCreate(Sender: TObject);var strm : TFileStream;begin if FileExists('SGrid.DAT') then begin strm := TFileStream.Create('SGrid.DAT', fmOpenRead); strm.ReadComponent(StringGrid1); strm.Free; end;end;
The key procedures above are the Write- and ReadComponent procedures. They enable any component to write itself to a persistent state.Another way of doing this is to use the registry, but that’s a far more complicated method, and for simple apps, I usually don’t recommend doing it that way.