Autor Beitrag
wwwdirk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38


D6 Prof / D2005 Prof
BeitragVerfasst: Mo 16.07.07 09:02 
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.

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38


D6 Prof / D2005 Prof
BeitragVerfasst: 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.

ausblenden 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;