Thema: Delphi Globale Styles

Einzelnen Beitrag anzeigen

lizardking

Registriert seit: 2. Sep 2005
76 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Globale Styles

  Alt 7. Mai 2006, 09:45
Zitat von SirThornberry:
Alle von TComponent abgeleiteten Komponenten/Objecte haben im Protected die Methode Notification. Diese wird unter anderem aufgerufen wenn ein neues Control aufs Form gepackt wird.
Ahhhhhhh ! Danke, das ist schonmal ein guter Ansatz. Jetzt hab ich nur ein Problem. Wenn ich Folgendes in Notification mache, bekomme ich 'ne AV:

Delphi-Quellcode:
procedure TMyClass.Notification(AComponent: TComponent;
  Operation: TOperation);

begin
  inherited;
  if (FInit) and (Operation = opInsert) then
    if AComponent is TEdit then
      (AComponent as TEdit).Text := 'abc';
end;
FInit setze ich am Ende meines Constructors auf true, so dass die Notification erst dann bearbeitet wird, wenn meine Komponente vollstaendig initialisiert ist. Wenn AComponent wirklich ein TEdit ist, dann tritt die AV genau beim Setzen von Text auf. Setze ich hingegen z.B. Ctl3d auf false, gibt's keine AV, aber das Edit ist immer noch ein 3D-Control.

Fuer mich sieht das so aus, als ob dieses Notify irgendwie mitten im Create der neuen Komponente aufgerufen wird. Sie ist schon so weit kreeirt, dass ich mittels "is" erkennen kann, dass es ein TEdit ist, aber doch nocht nicht so weit da, dass ich die Properties setzen kann.

Merkwuerdig...

Aber Danke schonmal fuer den Denkansatz

Gruesse,

Lizzy


EDIT:

Es ist genau so, wie vermutet Wenn ich in der Notification-Methode alle Components vom Owner meiner Komponente durchgehe und wenn das Component ein TEdit ist die Property setze UND das in einem try...except-Block mache, dann funktioniert es "einigermassen".
"Einigermassen", weil : Ich setze meine Komponente auf eine Form. Dann setze ich darauf ein TEdit mit Namen Edit1. Dann passiert gar nix. Jetzt setze ich noch ein TEdit auf die Form. Dann aendert sich der Text von Edit1 in "abc", Edit2 bleibt unveraendert. Setze ich danach irgendeine Komponente auf die Form, hat auch Edit2 den Text "abc".

Aaalso : Notification wird aufgerufen BEVOR die neue Komponente wirklich komplett initialisiert ist. Wenn ich das Projekt im Debugger starte, dann bekomme ich auch 'ne AV, ohne Debugger laeuft das Projekt genau wie gewuenscht. Arrghh... gibt's keine Methode, die aufgerufen wird NACHDEM eine neue Kompo komplett in die Form eingefuegt wurde ?
  Mit Zitat antworten Zitat