Einzelnen Beitrag anzeigen

DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Wann sind objecte auf der IDE fertig initialisert?

  Alt 27. Feb 2018, 22:57
@ 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

Geändert von DrUArn (27. Feb 2018 um 23:32 Uhr) Grund: ausprobiert
  Mit Zitat antworten Zitat