Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi RichEdit mit einer Ableitung von TStringlist laufen lassen (https://www.delphipraxis.net/130438-richedit-mit-einer-ableitung-von-tstringlist-laufen-lassen.html)

r29d43 8. Mär 2009 15:05


RichEdit mit einer Ableitung von TStringlist laufen lassen
 
Hallo,

angenommen ich habe TStringlist abgeleitet und möchte nun eine RichEdit-Komponente mit diesem abgeleiteten TStringlist-Objekt laufen lassen. Dann habe ich das natürlich vorab auch noch dem RichEdit mitzuteilen. Nur wie? Reicht da eine einfache Zuweisung ala

Delphi-Quellcode:
RichEdit1.Lines := MyOwnLines;
hierfür aus? Denn irgendwie habe ich das Gefühl, dass die von mir überschriebenen Methode gar nicht besucht wird. Habe dort einen Breakpoint gesetzt (und ein Beep), aber der Debugger stoppt da nicht (Beep ist auch nicht zu hören).


Hier event. nochmal die Ableitungsformalismen:

Delphi-Quellcode:
type
  TOStrings = class(TStringList)
  public
    procedure LoadFromStream(Stream: TStream); override;
  end;



procedure TOStrings.LoadFromStream(Stream: TStream);
var
  Size: Integer;
  S: string;
begin                             windows.beep(1000,30);
  BeginUpdate;
  try
    Size := Stream.Size - Stream.Position;
    SetString(S, nil, Size);
    Stream.Read(Pointer(S)^, Size);
    SetTextStr(S);
  finally
    EndUpdate;
  end;
end;
Den Code für die LoadFromStream-Methode habe ich hierfür aus der Classes-Unit herauskopiert.

Thx schonmal im Voraus.

r29d43 8. Mär 2009 16:32

Re: RichEdit mit einer Ableitung von TStringlist laufen lass
 
Eventuell indem ich auch gleich noch das RichEdit mit ableiten muss? Bzw. am Besten gleich auch noch das TCustomRichEdit mit!? Denn in dessen Constructor wird das TString-Objekt ja erzeugt:

Delphi-Quellcode:
FRichEditStrings := TRichEditStrings.Create;

mit:

property Lines: TStrings read FRichEditStrings write SetRichEditStrings;
Ergo, override ich dessen Constructor (mit inherited in Zeile 1), dann free ich dessen FRichEditStrings und weise diesem Identifier als nächstes dann eine eigene Ableitung von TRichEditStrings zu:

Delphi-Quellcode:
FRichEditStrings := TOwnRichEditStrings.Create;

(dat müsste zur Not auch klappen)

Apollonius 8. Mär 2009 16:45

Re: RichEdit mit einer Ableitung von TStringlist laufen lass
 
Es geht einfacher, wenn du zur Laufzeit die Klasse der verwendeten TStrings austauschst; das ist allerdings ein Hack.
TClass(PPointer(Richedit1.Lines)^) := TOStrings. Dabei musst du allerdings beachten, dass du in der Ableitung keine neuen Felder einführen darfst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz