Autor Beitrag
Jakane
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mo 15.10.18 09:41 
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.
ausblenden 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:
ausblenden 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.

ausblenden volle Höhe 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;

_________________
Die Welt besteht aus Zahlen, also ist alles möglich.
[Delphi 5] - [Delphi XE5]
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Mo 15.10.18 15:19 
Hallo Jakane,

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

Gruß
GuaAck
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 15.10.18 22:25 
- Nachträglich durch die Entwickler-Ecke gelöscht -