AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls abgeleitete Combobox: Element hat kein übergeordnetes Fenster
Thema durchsuchen
Ansicht
Themen-Optionen

abgeleitete Combobox: Element hat kein übergeordnetes Fenster

Ein Thema von Getox · begonnen am 25. Jun 2019 · letzter Beitrag vom 25. Jun 2019
Antwort Antwort
Seite 1 von 2  1 2      
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#1

abgeleitete Combobox: Element hat kein übergeordnetes Fenster

  Alt 25. Jun 2019, 10:54
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.
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster

  Alt 25. Jun 2019, 10:59
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;
Markus Kinzler
  Mit Zitat antworten Zitat
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#3

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster

  Alt 25. Jun 2019, 11:03
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.
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?

Geändert von Getox (25. Jun 2019 um 11:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster

  Alt 25. Jun 2019, 11:26
Warum setzt du Parent überhaupt manuell?
Peter
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster

  Alt 25. Jun 2019, 11:27
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

Geändert von EWeiss (25. Jun 2019 um 11:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster

  Alt 25. Jun 2019, 11:34
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
Peter
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster

  Alt 25. Jun 2019, 11:37
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

Geändert von EWeiss (25. Jun 2019 um 11:39 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster

  Alt 25. Jun 2019, 11:39
Ein Frame ist ein WinControl.
Markus Kinzler
  Mit Zitat antworten Zitat
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#9

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster

  Alt 25. Jun 2019, 11:41
Warum setzt du Parent überhaupt manuell?
Ich setze den manuell, weil eben dieser Fehler kommt - nur dass dieses manuelle setzen keine Besserung brachte...

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.


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.
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: abgeleitete Combobox: Element hat kein übergeordnetes Fenster

  Alt 25. Jun 2019, 11:41
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
  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 22:04 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