Entwickler-Ecke

Datenbanken - TDBGridColumns in TMemoryStream zwischenspeichern


wwwdirk - Mo 16.07.07 09:02
Titel: TDBGridColumns in TMemoryStream zwischenspeichern
Hallo zusammen,

habe folgendes Problem. Hab ne Maske mit nem TDBGrid und möchte in einem zusätzlichen Dialog die Anzeige der Spalten konfigurieren. Hierzu übergebe ich die Collection TDBGridColumns (TDBGrid.Columns) an meine TForm-Instanz und kann die dann dort bearbeiten (Anzuzeigende Spalten, Spaltebreite u. Spaltentitel). Funktioniert alles prächtig!

Jetzt das Problem: Den Dialog kann man mit einer "Abbrechen"-Schaltfläche beenden, d.h. das die Änderungen nicht übernommen werden sollen. Hierzu hab ich meine TDBGridColumns vor dem Öffnen des Dialogs in einem TMemoryStream gespeichert, die bei "Abbrechen" wieder hergestellt werden sollen.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
  vStream := TMemoryStream.Create;
  FGridColumns.SaveToStream (vStream);

  with TfrmConfigUserView.Create (nil, FGridColumns) do
  try
    if ShowModal = mrCancel then
    begin
      FGridColumns.Clear;
      FGridColumns.LoadFromStream (vStream);
    end;
  finally
    Free;
    vStream.Free;
  end;


Das führt beim "LoadFromStream" aber zu einem Stream-Lesefehler. Leider kenn ich mich zu wenig mit Streams aus, ist vielleicht der MemoryStream nicht geeignet?


wwwdirk - Mo 16.07.07 12:05

Kaum macht man's richtig funktionierts :-)
Nach einem SaveToStream steht man im Stream hinten. Vor dem Laden muss wieder der Anfang des Streams positioniert werden.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
  vStream := TMemoryStream.Create;
  FGridColumns.SaveToStream (vStream);
  with TfrmConfigUserView.Create (nil, FGridColumns) do
  try
    if ShowModal = mrCancel then
    begin
      FGridColumns.Clear;
      vStream.Position := 0;
      FGridColumns.LoadFromStream (vStream);
    end;
  finally
    Free;
    vStream.Free;
  end;