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 TRichEdit in neuer Komponenten -> Fehler (https://www.delphipraxis.net/11420-trichedit-neuer-komponenten-fehler.html)

Nalincah 6. Nov 2003 11:19


TRichEdit in neuer Komponenten -> Fehler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab folgendes vor:

Hab ne neue Komponente erstellt:

Delphi-Quellcode:
type TCSTyp = (tAdresse, tRechnung, tLieferung);
       TCSAdressLabel = class(TCSQRRichText)
       private
         FFelder:TStringList;
         FTyp: TCSTyp;
         FDataSet: TDataSet;
         FVergleichMit: TCSAdressLabel;
         FDruckeImmer:Boolean;
         FEndValue:String;
         fRich : TRichEdit;
         procedure MyOnPrint(sender: TObject; var Value: String);
         procedure SetFelder(const AStrings: TStringList);
       public
         constructor Create(AOwner:TComponent);override;
         destructor Destroy;override;
       published
         property Felder : TStringlist read FFelder write SetFelder;
         property Typ     : TCSTyp read FTyp write FTyp;
         property DataSet : TDataSet read FDataSet write FDataSet;
         property VergleichMit : TCSAdressLabel read FVergleichMit write FVergleichMit;
         property DruckeImmer: Boolean read FDruckeImmer write FDruckeImmer;
       end;
Die Var "fRich : TRichEdit" unter private benutze ich um im constructor ein Objekt vom Typ TRichEdit zu erzeugen:

Delphi-Quellcode:
constructor TCSAdressLabel.Create(AOwner:TComponent);
begin
  fRich := TRichEdit.Create(Self);
  Self.ParentRichEdit := fRich; // <-- Problematische zeile
  inherited Create(aowner);
  ffelder := tstringlist.Create;
  Self.OnPrint := Self.MyOnPrint;
end;
Solange ich die "Problematische Zeile" auskommentiere, kann ich mein Projekt öffnen und bearbeiten
Wenn ich sie jedoch wieder aktiviere krieg ich ne Fehlermeldung (Siehe Anhang)

Warum kann ich in meiner Kompo die Eigenschaft "ParentRichEdit" nicht beim erstellen sofort das neu erstellte "fRich" zuweisen???

scp 6. Nov 2003 15:26

Re: TRichEdit in neuer Komponenten -> Fehler
 
Probiers mal mit:

Delphi-Quellcode:
fRich := TRichEdit.Create(AOwner);
oder

Delphi-Quellcode:
fRich := TRichEdit.Create(nil);

Weil du mit

Delphi-Quellcode:
fRich := TRichEdit.Create(Self);
quasi eine Endlos-Schleife erzeugst, da du erst dem fRich die Kompo als Parent gibst und dann deiner Kompo den fRich als Parent.

Ausserdem solltest du noch self.ParentRichEdit unter inherited create(AOwner) setzen;

Christian Seehase 6. Nov 2003 19:52

Re: TRichEdit in neuer Komponenten -> Fehler
 
Moin scp,

mit

Delphi-Quellcode:
fRich := TRichEdit.Create(Self);
Wird die Kompo nicht zum Parent, sondern zum Owner.
Der Owner ist nur für die Freigabe der Objekte zuständig, der Parent, sozusagen, für die Positionierung. Ein sichtbares Objekt wird immer relativ zum Parent ausgerichtet.

Hätten diese beiden etwas miteinander zu tun, würde man sich also eine Endlosschleife einhandeln, müsste als Fehlermeldung auch ein "Stack Überlauf" erscheinen.

@Sebastian:
Such' hier mal nach Hier im Forum suchenCreateWnd
Ich vermute mal, dass sich da die "Problematische Zeile" einbauen lassen müsste.
Zu dem Zeitpunkt zu dem CreateWnd aufgerufen wird, existiert die Kompo schon, im Konstruktor noch nicht.

scp 6. Nov 2003 22:59

Re: TRichEdit in neuer Komponenten -> Fehler
 
Bei den meisten Kompos, die von TWinControl abstammen, ist meines wissens der Owner solange gleichbedeutend mit dem Parent, bis man dies selbst manuell ändert.
Wenn ich auf einem Form oder einem Panel zum Beispiel einen Button erzeuge, dann landet der ja auch direkt da drauf und nicht irgendwo im leeren.

Christian Seehase 6. Nov 2003 23:11

Re: TRichEdit in neuer Komponenten -> Fehler
 
Moin scp,

Zitat:

Zitat von scp
Bei den meisten Kompos, die von TWinControl abstammen, ist meines wissens der Owner solange gleichbedeutend mit dem Parent, bis man dies selbst manuell ändert.

Das gilt aber nicht für dynamisch erzeugte Controls.
Wird hier kein Parent gesetzt, sieht man das Control nicht, da Parent = 0. Es gibt also nichts relativ zu dem es angezeigt werden könnte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:45 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