Entwickler-Ecke

Dateizugriff - TMemoryStream kopieren


Jakane - Mo 15.10.18 10:41
Titel: TMemoryStream kopieren
Hallo liebe Delphi-Helfer :)

Ich habe ein TcMemo-Objekt mit dem ich Memo-Felder aus der Datenbank verarbeite, bzw. verarbeiten will.
Solange ich von TcMemo zu TRichEdit oder umgekehrt arbeite, funktioniert mein Objekt wunderbar.

Delphi-Quelltext
1:
2:
  A.Teilebezeichnung.SetRichEdit(reRichEdit);
  B.Teilebezeichnung.GetRichEdit(reRichEdit);

So hat meine B.Teilebezeichnung die Bezeichnung von A übernommen.

Mein Problem ist nun aber, dass ich die Bezeichnung von A zu B haben will, ohne ein TRichEdit dazwischen zu klemmen.
Zumindest nicht, in dem Formular wo ich das anwende:

Delphi-Quelltext
1:
  A.Teilebezeichnung.AsRTF := B.Teilebezeichnung.AsRTF;                    

Funktioniert aber nicht. B.Teilebezeichnung bleibt leer.

Wie muss meine Procedur TcMemo.SetRTF ausgehen damit das klappen könnte?
Gern auch ganz ohne ein TRichEdit das darin erzeugt werden muss.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
  TcMemo = class
  private
    FRTF: TMemoryStream;
    FString: String;
    procedure SetString(const psWert: String);
    procedure SetRTF(pcWert: TMemoryStream);
  public
    constructor Create;
    procedure GetRichEdit(pcRichEdit: TRichEdit);
    procedure SetRichEdit(pcRichEdit: TRichEdit);
  published
    property AsString: String read FString write SetString;
    property AsRTF: TMemoryStream read FRTF write SetRTF;
  end;

constructor TcMemo.Create;
begin
  FRTF := TMemoryStream.Create;
  FString := '';
end;

procedure TcMemo.GetRichEdit(pcRichEdit: TRichEdit);
begin
  // Initialisieren
  FString := pcRichEdit.Text;
  FRTF := TMemoryStream.Create;

  // RTF speichern
  pcRichEdit.Lines.SaveToStream(FRTF);
  FRTF.Position := 0;
end;

procedure TcMemo.SetRichEdit(pcRichEdit: TRichEdit);
begin
  // TODO: RichEdit im 2. Register nicht formatiert
  pcRichEdit.Text := FString;
end;

procedure TcMemo.SetRTF(pcWert: TMemoryStream);
var
  cRichEdit: TRichEdit;
begin
  cRichEdit := TRichEdit.Create(Application.MainForm);
  cRichEdit.ParentFont := False;
  cRichEdit.Parent := Application.MainForm;

  pcWert.Position := 0;
  cRichEdit.Lines.LoadFromStream(pcWert);

  cRichEdit.Lines.SaveToStream(FRTF);
  FRTF.Position := 0;

  FreeAndNil(cRichEdit);
end;

procedure TcMemo.SetString(const psWert: String);
begin
  FString := Trim(psWert);
end;


GuaAck - Mo 15.10.18 16:19

Hallo Jakane,

die Methode "LoadfromStream" macht das, was Du brauchst.

Gruß
GuaAck


Delete - Mo 15.10.18 23:25

- Nachträglich durch die Entwickler-Ecke gelöscht -