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 starofftopic star
Beiträge: 299
Erhaltene Danke: 28

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: Mo 15.10.18 15:19 
Hallo Jakane,

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

Gruß
GuaAck
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2245
Erhaltene Danke: 418

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mo 15.10.18 22:25 
Guten Abend Jakane,

wofür steht die Klasse genau? Soll ein Text mit einer Rich Text Formatierung in einem Memo o.ä. ausgegeben werden? Wenn ja, dann käme man durchaus auch ohne dem TRichEdit aus.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)