2009-04-24 2 views
2

erklären Sie den Unterschied zwischen:Problem Einstellung neuer Form in DLL parented

ChildForm := TForm.CreateParented(AOwner) 

ChildForm := TForm.CreateParentedControl(AOwner) 

ChildForm := TForm.Create(AOwner); 
ChildForm.ParentWindow := AOwner.Handle 

Dieses Beispiel kann kompliziert und verworren sein, ich würde wirklich wie ein Überblick über, wenn die Leute verwenden, um die verschiedenen Arten von Methoden erstellen für Formulare.

Delphi 7 Hilfe sagt mir, dass ich CreateParented (AOwner.Handle) und ParentWindow: = AOwner.handle mit Nicht-VCL-Steuerelementen oder über DLLs verwenden sollte. Bis gestern habe ich nur Parent: = AOwner gesetzt, und ich habe absolut keine Ahnung, warum das funktioniert hat.

(Vielleicht muss ich nur meinen Computer neu starten)

+1

Könnten Sie vielleicht einen besseren Fragetitel finden? (Es sei denn, dies ist Teil Ihrer Kampagne, um negatives Feedback zu erhalten.) – mghie

+0

Guter Punkt, aber nein, das hat die Kampagne bestätigt –

Antwort

4

Wir haben Komponenten. Sie sind sichtbare oder unsichtbare Elemente in einem Formular oder einem Datamodul. Jede Komponente kann einen Eigentümer haben, der für die eventuelle Zerstörung verantwortlich ist. Wenn es keinen Besitzer gibt, müssen Sie sich selbst um die Zerstörung kümmern.

Wir haben Kontrollen, die Komponenten sind sichtbar. Sie haben auch ein Elternteil, das das Steuerelement enthält. Zum Beispiel ist ein Panel das übergeordnete Element einer Schaltfläche in diesem Panel.

Wir haben auch WinControls, die Steuerelemente sind, die mit Windows-Objekten verknüpfen. Sie haben auch einen Handle des Elternfensters.

So:

  1. TMyControl.CreateParented Konstruktor CreateParented (Parent: HWnd);

    Dies wird verwendet, um ein Steuerelement zu erstellen, aus dem das übergeordnete Fenster von einem Handle bereitgestellt wird. Es erstellt das Steuerelement ohne Besitzer und setzt das übergeordnete Fenster auf ParentWindow.

  2. TMyControl.CreateParentedControl Klassenfunktion CreateParentedControl (ParentWindow: HWND): TWinControl;

    Erstellt das Steuerelement ohne Besitzer, setzt das Elternfenster auf ParentWindow und gibt es zurück.

  3. TMyControl.Create (AOwner: TComponent)

    Erstellt eine Steuerung mit Besitzer AOwner eingestellt.

  4. TMyControl.ParentWindow: = AOwner.Handle;

    Setzt das Elternfenster (Handle) auf den Handle von AOwner.