![]() |
TJvRichEdit in Klasse verwenden
Hi,
ich möchte gerne TJvRichedit in einer Klasse verwenden. Explizit geht es mir darum: Ich habe eine RTF-Text in einem Stream, den ich mit TJvRichedit in ein Picture umwandeln möchte. Logischerweise kann ich in der Klasse kein TJvRichedit.Create(nil) erstellen: EInvalidOperation 'Element hat kein übergeordnetes Fenster'. (TJvRichedit deshalb, weil ich die RTF's auch in diesem erzeugen). Zur Zeit mache ich das (vor allen Dingen erst mal, um zu testen ob es funktioniert) so, dass ich mir einfach eine TForm erzeuge, die dem JvRichedit als Parent zuordne und nach dem SaveToPicture wieder freigebe.
Delphi-Quellcode:
Das scheint zwar im ersten Moment zu funktionieren, erscheint mir aber als fehlerhafte Lösung. (Gefühlt habe ich seitdem Memoryleaks, aber da bin ich noch am erkunden).
var
q: TUniQuery; t: TTerminrtftext; re: TJvRichEdit; f: TForm; begin q:=TUniQuery.Create(nil); f:=TForm.Create(nil); re:=TJvRichEdit.Create(f); re.Parent:=f; re.Width:=2000; re.WordWrap:=False; try self.Clear; q.Connection:=Con; q.SQL.Text:='Select * from rtftexte where betriebguid=:betriebguid order by ID'; q.Params.ParamValues['betriebguid']:=Betriebguid.ToString; q.Active:=True; while not q.Eof do begin t:=self.Items(TTextType(q.FieldByName('texttype').AsInteger)); if t<>nil then begin t.ID:=q.FieldByName('ID').AsInteger; t.guid:=StringToGUID(q.FieldByName('guid').AsString); t.betriebguid:=StringToGUID(q.FieldByName('betriebguid').AsString); t.texttype:=TTextType(q.FieldByName('texttype').AsInteger); t.text.Position:=0; (q.FieldByName('text') as TBlobField).SaveToStream(t.text); t.text.Position:=0; re.Lines.LoadFromStream(t.text); //t.text=TMemoryStream re.SaveToImage(t.pic); //t.pic=TPicture end; q.Next; end; q.active:=False finally q.Free; re.Free; f.Free; end; Wie könnte für sowas eine bessere Lösung aussehen? PS: Zusätzlich sollte ich erwähnen, dass o.g. Prozedur in einem eigenen Thread läuft. |
AW: TJvRichEdit in Klasse verwenden
Hallo,
schaue doch einfach mit FastMM4 nach Deinen MemLeaks. Ich sehe zumindestens keine. Statt dem Form könntest Du eigentlich auch direkt Application übergeben ? Hier ![]() wird ein anderer Constructor aufgerufen. Ist hier zur TRichEdit direkt, aber vielleicht das TJ ja auch so einen Constructor? |
AW: TJvRichEdit in Klasse verwenden
Wenn ich mal ein RichEdit brauche, ohne es anzeigen zu wollen, erzeuge ich es mit CreateParented(HWND_MESSAGE). Das sollte auch mit dem JvRichEdit funktionieren.
[edit] Oops, das stand ja auch in dem SO-Thread, sry [/edit] |
AW: TJvRichEdit in Klasse verwenden
Danke euch beiden.
Createparented kannte ich noch gar nicht ;-) man lernt nie aus. Das war genau das was ich suchte. Keine Speicherleaks mehr :-D (Außer die, die FastMM von den Fremdkomponenten anmeckert. Aber dagegen kann ich nichts tun). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz