@ Himitsu,
danke für den Tip (das habe ich schon lange gesucht).
Meine Lösung nun:
für alles spätere
Delphi-Quellcode:
// ....
published
Procedure loaded;override;
// ...
procedure TSimpTestRich_UA.loaded;
begin
inherited;
if ReadyForTmp then createTmpMemo else deleteTmpMemo //je nach Wert von ReadyForTmp die Objecte laden oder löschen
end;
in den Settern (wobei ich die Definition von CSLOAding bzw. CSReading in meiner Hilfe nicht finden kann):
Delphi-Quellcode:
procedure TSimpTestRich_UA.SetShowpts(
const Value: tshowOpts_UA);
begin
FShowOpts:=Value;
if not(csloading
in ComponentState)
then
// if not(csreading in ComponentState) then exit;
begin
if ShowSubRichEd_UA
in ShowOpts
then createsubriched
else deletesubriched;
end;
{
if ShowSubRichEd_UA in ShowOpts then SubRichEd.Show
else SubRichEd.hide;
}
// geht beim setzten von ShowSubriched in der IDE nicht - hat noch kein Fenster
// if ShowSubRichEd_UA in ShowOpts then subriched.lines.add('bin sichtbar')
// else subriched.lines.add('bin UNsichtbtar');
end;
Aber: in meinem Beispiel ist "csLoading in compoentstate" immer true - d.h. an dieser Stelle wird das Objekt nicht erzeugt oder gelöscht!!, lasse ich die Prüfung weg, wird die Initialisierung durchgeführt - nur weiß ich eben da nicht, ob z.B. TSimpTestRich_UA.Parent schon gesetzt ist usw. -in meinem Beispiel ist das alles schon geschehen.
und was das löschen von Componenten (hier SubRichEd) bertrifft:
- stimmt: Subriched.free darf man ungeprüft anwenden.
- freeandnil(SubRichEd); geht nicht !! da Fehler E2197 Konstantenobject kann nicht als Var-Parameter weitergegeben werden
- bleibt die Frage, muß ich in meiner Löschprocedure
Delphi-Quellcode:
procedure TSimpTestRich_UA.DeleteSubrichEd;
begin
subriched.free;//kann auch auf nil angewendet werden
subriched:=nil; //sonst würde bei Eerneutem löschen wieder versucht zu löschen obowohl das object gelöscht ist
//freeandnil(SubRichEd); //geht nicht da E2197 Konstantenobject kann nicht als Var-Parameter weitergegeben werden
end;
subriched:=nil; setzen.
Ich denke ja. Scheinbar kriegt der Owner (TSimpTestRich_UA) nichts von der Löschung mit.
Lasse ich
subriched:=nil;
weg, wird beim nächsten Versuch mit der gleichen Routine ein Fehler ausgelöst (ungültige Zeigeroperation).
Also nochmal
Danke für den Tip
Gruß Uwe