Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   abgeleitete Combobox: Element hat kein übergeordnetes Fenster (https://www.delphipraxis.net/201122-abgeleitete-combobox-element-hat-kein-uebergeordnetes-fenster.html)

Getox 25. Jun 2019 09:54

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:
fFramePerson := TFramePersonen.Create(self);
fFramePerson.Parent := gbPerson;
ob ich als Owner "self" oder die Groupbox übergebe macht keinen Unterschied in Bezug auf mein Problem.

Beim Start des Programms meckert Delphi noch nicht... aber wenn das Form freigegeben wird, wo der Frame drauf ist kommt:
Zitat:

Element 'OtAutoComboBox1' hat kein übergeordnetes Fenster.
Ich kümmere mich nicht um das Freigeben des Frames, da es ja das Form als Owner hat.

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.

mkinzler 25. Jun 2019 09:59

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;

Getox 25. Jun 2019 10:03

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
 
Zitat:

Zitat von mkinzler (Beitrag 1435287)
Zieh mal den Parent vor

Habe ich gemacht und der Fehler kommt immer noch.

Edit:
Habe jetzt ein neues leeres Projekt gemacht und nur die Combobox auf das Standardform gezogen. Selbes Problem.

Jasocul 25. Jun 2019 10:26

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
 
Warum setzt du Parent überhaupt manuell?

EWeiss 25. Jun 2019 10:27

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
 
Warum
AOwner: TComponent und nicht direkt als TWinControl

Die Combo ist ein TWinControl.
Zitat:

Warum setzt du Parent überhaupt manuell?
Die Combo benötigt ein Parent oder? Sonst läufts nicht.
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

Jasocul 25. Jun 2019 10:34

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
 
Zitat:

Zitat von EWeiss (Beitrag 1435293)
Zitat:

Warum setzt du Parent überhaupt manuell?
Die Combo benötigt ein Parent oder? Sonst läufts nicht.

Es wird im Create inherited aufgerufen. Es ist also nicht erforderlich.
Klar sollte es auch manuell funktionieren. Aber warum an dieser Stelle? Ich sehe im Moment nicht die Notwendigkeit. Kann natürlich an mir liegen

EWeiss 25. Jun 2019 10:37

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:

Es wird im Create inherited aufgerufen. Es ist also nicht erforderlich.
Kann ich nicht sagen dafür beschäftige ich mich Zuwenig mit der VCL.
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

mkinzler 25. Jun 2019 10:39

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
 
Ein Frame ist ein WinControl.

Getox 25. Jun 2019 10:41

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
 
Zitat:

Zitat von Jasocul (Beitrag 1435292)
Warum setzt du Parent überhaupt manuell?

Ich setze den manuell, weil eben dieser Fehler kommt - nur dass dieses manuelle setzen keine Besserung brachte...

Zitat:

Zitat von EWeiss (Beitrag 1435293)
Warum
AOwner: TComponent und nicht direkt als TWinControl

Die Combo ist ein TWinControl.

[...]

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

Das mache ich, weil es in TCustomComboBox auch so ist. Wenn ich den Typ ändere, meckert Delphi, dass sich die Deklaration von der vorherigen unterscheidet.


Zitat:

Zitat von EWeiss (Beitrag 1435296)
Ich behaupte jetzt einfach mal das sein TFramePersonen kein TWinControl ist..
Und er erwartet das es trotzdem Funktionieren soll.

Ich habe aber auch ein leeres Projekt angelegt mit nur dieser Combobox auf dem Form und trotzdem kam der Fehler.

EWeiss 25. Jun 2019 10:41

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster
 
Zitat:

Zitat von mkinzler (Beitrag 1435297)
Ein Frame ist ein WinControl.

Dann will ich nichts gesagt haben.
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 11:36 Uhr.
Seite 1 von 2  1 2      

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