Einzelnen Beitrag anzeigen

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