![]() |
abgeleitete Combobox: Element hat kein übergeordnetes Fenster
Hallo,
ich habe selber eine Combobox von TCustomComboBox abgeleitet. Ich habe ein Frame erstellt, wo ich diese Combobox einfach nur aus der Komponentenpalette heraus draufziehe - mehr nicht. Von diesem Frame erzeuge ich dann per Code eine Instanz und setze es auf in eine Groupbox, welche sich auf einem Form befindet.
Code:
ob ich als Owner "self" oder die Groupbox übergebe macht keinen Unterschied in Bezug auf mein Problem.
fFramePerson := TFramePersonen.Create(self);
fFramePerson.Parent := gbPerson; Beim Start des Programms meckert Delphi noch nicht... aber wenn das Form freigegeben wird, wo der Frame drauf ist kommt: Zitat:
Was habe ich falsch gemacht? Hier meine Komponente (ist bei weitem noch nicht fertig... aber ich will ja erstmal dass es so läuft, bevor ich weiter dran rumbastel). Den Parent setze ich ja sogar manuell im Construktor. Auf dem Frame befinden sich noch weitere von mir abgeleitete Komponenten (von tCustomEdit) und die machen keine Probleme.
Code:
unit otAutoComboBox;
interface uses System.SysUtils, System.Classes, Vcl.Controls, Vcl.StdCtrls, Graphics, Winapi.Messages, System.Generics.Collections, UnitOtObject; type TOtAutoComboBox = class(TCustomComboBox) procedure WMPaint(var Message: TWMPaint); message WM_PAINT; private { Private-Deklarationen } procedure setObjectList(aObjectList: TObjectList<TOtObject>); protected { Protected-Deklarationen } public { Public-Deklarationen } property objectList: TObjectList<TOtObject> write setObjectList; constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { Published-Deklarationen } property Align; property Font; property Height default 24; end; procedure Register; implementation procedure Register; begin RegisterComponents('XXXXX', [TOtAutoComboBox]); end; { TOtAutoComboBox } procedure TOtAutoComboBox.setObjectList(aObjectList: TObjectList<TOtObject>); var i: Integer; begin Items.Clear; if aObjectList <> nil then for i := 0 to aObjectList.Count - 1 do Items.AddObject(aObjectList.Items[i].ToString, aObjectList.Items[i]); end; procedure TOtAutoComboBox.WMPaint(var Message: TWMPaint); var CC: TControlCanvas; begin inherited; CC := TControlCanvas.Create; try cc.Control := Self; CC.Brush.Color := clGray; CC.FrameRect(ClientRect); finally CC.Free; end; end; constructor TOtAutoComboBox.Create(AOwner: TComponent); begin inherited; AutoSize := False; ParentCtl3D := False; Ctl3D := False; Constraints.MaxHeight := 24; Height := 24; Font.Size := 11; BevelInner := bvNone; Parent := AOwner as TWinControl; end; destructor TOtAutoComboBox.Destroy; begin objectList := nil; inherited; end; end. |
AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
Zieh mal den Parent vor
Delphi-Quellcode:
constructor TOtAutoComboBox.Create(AOwner: TComponent);
begin inherited; Parent := AOwner as TWinControl; AutoSize := False; ParentCtl3D := False; Ctl3D := False; Constraints.MaxHeight := 24; Height := 24; Font.Size := 11; BevelInner := bvNone; [S] Parent := AOwner as TWinControl;[/S] end; |
AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
Zitat:
Edit: Habe jetzt ein neues leeres Projekt gemacht und nur die Combobox auf das Standardform gezogen. Selbes Problem. |
AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
Warum setzt du Parent überhaupt manuell?
|
AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
Warum
AOwner: TComponent und nicht direkt als TWinControl Die Combo ist ein TWinControl. Zitat:
Wie man den setzt sollte eigentlich egal sein. Du musst aber sicherstellen das alle Controls auf denen du die Combo ablegst auch von Typ TWinControl abgeleitet werden. Kein TWinControl dann geht's in die Hose. gruss |
AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
Zitat:
Klar sollte es auch manuell funktionieren. Aber warum an dieser Stelle? Ich sehe im Moment nicht die Notwendigkeit. Kann natürlich an mir liegen |
AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
Ich behaupte jetzt einfach mal das sein TFramePersonen kein TWinControl ist..
Und er erwartet das es trotzdem Funktionieren soll. Zitat:
Wenn ich ein Control unter Win32 erstelle und ich erwarte das es als Parent auf irgendwas liegt dann muss ich es mit SetParent exklusive drauflegen. gruss |
AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
Ein Frame ist ein WinControl.
|
AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
Zitat:
Zitat:
Zitat:
|
AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
Zitat:
Trotz alledem das hin und her zwischen TComponent und TWincontrol erschließt sich mir nicht wirklich. Habe versucht zu helfen scheint aber nicht mein Thema zu sein.. Ist halt VCL. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz