AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Ein OnAfterCreate Event für die eigene Komponente
Thema durchsuchen
Ansicht
Themen-Optionen

Ein OnAfterCreate Event für die eigene Komponente

Ein Thema von Meflin · begonnen am 18. Jun 2007 · letzter Beitrag vom 19. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#1

Ein OnAfterCreate Event für die eigene Komponente

  Alt 18. Jun 2007, 11:46
Moin moin!

Derzeit bastel ich an einer visuellen Komponente (Abgeleitet von TCustomControl), bei der es ganz nützlich wäre, wenn es ein OnAfterCreate-Event gäbe, das eben ausgeführt wird, nachdem die Instanz der Komponente vollständig erzeugt wurde.

Dazu habe ich mal folgenden Ansatz probiert:
Delphi-Quellcode:
    protected
      procedure AfterCreate(var Msg: TMessage); message WM_USER + 104;
Delphi-Quellcode:
constructor Wuppdi.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Width := 150;
  Height := 150;
  PostMessage(Handle, WM_USER + 104, 0, 0); // trigger AfterCreate event
end;
Allerdings ergeben sich da zwei Probleme:

1. Es funktioniert nicht . Obwohl ein CustomControl ja eigentlich Messages empfangen können müssten, gibt es eine Exception (Ich glaube es war "Element "" hat kein übergeordnetes Fenster).

2. Mal angenommen es würde gehen - dann würde ja beim Erzeugen einer Instanz jede schon vorhandene Instanz wieder das AfterCreate-Event auslösen. Gibt es eine elegantere Lösung als noch einen zusätzlichen "Schalter" einzubauen, der überprüft, ob die Instanz schonmal das Event ausgelöst hat?

  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Ein OnAfterCreate Event für die eigene Komponente

  Alt 18. Jun 2007, 11:51
Hallo, wenn ich mich nicht irre, ist dafür die Prozedur "Loaded" zuständig.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Ein OnAfterCreate Event für die eigene Komponente

  Alt 18. Jun 2007, 12:01
Hallo,

Zitat von Meflin:
[...]bei der es ganz nützlich wäre, wenn es ein OnAfterCreate-Event gäbe, das eben ausgeführt wird, nachdem die Instanz der Komponente vollständig erzeugt wurde.
Die Programmierer der VCL haben dafür die virtuelle Methode Delphi-Referenz durchsuchenTObject.AfterConstruction vorgesehen. Sie wird automatisch aufgerufen, nachdem der letzte Konstruktor des Objekts ausgeführt wurde.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#4

Re: Ein OnAfterCreate Event für die eigene Komponente

  Alt 18. Jun 2007, 12:03
Mööp mööp Wieso findet man sowas immer erst nachdem man es stundenlang anders probiert hat

Unabhängig davon würde mich aber weiterhin interessieren, wo es an meiner Methode hakt!

  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Ein OnAfterCreate Event für die eigene Komponente

  Alt 18. Jun 2007, 12:35
Hi,

ich würde sagen, du verwechselst Events und Messages.
Du willst deiner Klasse selbst eine Nachricht schicken. Was willst du damit erreichen?

Willst du einen Event, dann musst du ein Property vom Typ (z.B. TNitifyEvent) deklarieren.

Cu, Frank

[EDIT]
Delphi-Quellcode:
  TmyControl = class(TCustomControl)
  private
    FOnCreate: TNotifyEvent;
  public
    procedure AfterConstruction; override;
  published
    property OnCreate: TNotifyEvent read FOnCreate write FOnCreate;
  end;

implementation

procedure TmyControl.AfterConstruction;
begin
  inherited;
  if Assigned(FOnCreate) then
    FOnCreate(Self);
end;
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#6

Re: Ein OnAfterCreate Event für die eigene Komponente

  Alt 18. Jun 2007, 12:41
Zitat von dataspider:
ich würde sagen, du verwechselst Events und Messages.
Du willst deiner Klasse selbst eine Nachricht schicken. Was willst du damit erreichen?
Ganz einfach: im Constructor wird via PostMessage die message gesendet - und ist damit ganz am Ende der Message-Queue. Kommt die Message an wird die OnAfterCreate-Procedure aufgerufen (oder sagen wir mal: sollte aufgerufen werden).

Der Zeitpunkt des Aufrufens läge dann eben zu einem Zeitpunkt, wo die Instanz fertig instanziert ist (da ja zuerst alle anderen messages abgearbeitet werden, bevor meine ankommt).

Wie nennt sich das? Ein Event

  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Ein OnAfterCreate Event für die eigene Komponente

  Alt 18. Jun 2007, 19:49
Hallo,
etwas später hatte heute Lucky genau dazu einen interessanten Post:

OnAfterShow mittels Postmessage
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#8

Re: Ein OnAfterCreate Event für die eigene Komponente

  Alt 18. Jun 2007, 20:08
Zitat von juergen:
etwas später hatte heute Lucky genau dazu einen interessanten
Ja, der war mir auch schon aufgefallen. Allerdings mache ich das ja bereits so wie shmia es vorschlug

Ich verstehe also nicht wieso das PostMessage bei mir einen Fehler auslöst. Das customControl müsste doch ein zum Empfang fähiges Window sein

  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Ein OnAfterCreate Event für die eigene Komponente

  Alt 18. Jun 2007, 20:12
PostMessage möchte die Message sofort einreihen bei seinem Aufruf aber dein Control ist noch im Constructor. Das CreateWindow() wird aber erst danach aufgerufen, von daher gibt es noch kein Window Handle und somit kann PostMessage die Nachricht nicht einreihen, da das Handle nicht gültig ist / existiert.

Du kannst gerne mal im Constructor vor dem PostMessage das Ergebnis von IsWindow(Handle) ausgeben lassen.
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#10

Re: Ein OnAfterCreate Event für die eigene Komponente

  Alt 18. Jun 2007, 21:32
Das erklärt einiges - dankeschön

  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 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