![]() |
[VCL] Controls in TCategoryPanel Header einfügen
Hallo! :)
Ich habe ein
Delphi-Quellcode:
abgeleitet und möchte gern in den Header diverse Controls einfügen. Eine ComboBox und einen Button zum Beispiel.
TCategoryPanel
Ich habe mir den Code vom
Delphi-Quellcode:
angeschaut. Und so wie ich das verstanden habe, werden die eingefügten Controls über den Message-Handler
TCustomCategoryPanel
Delphi-Quellcode:
in das
TCustomCategoryPanel.CMControlListChanging
Delphi-Quellcode:
"verschoben".
FPanelSurface
Also habe ich mir in meiner abgeleiteten Klasse einen gleichen Message-Handler erstellt:
Delphi-Quellcode:
Wenn ich mit Breakpoints durchsteppe, funktioniert das Ganze auch.
interface
// ... TElementsCategoryPanel = class(TCategoryPanel) // ... private FObservationTypeSelector: TComboBox; procedure CMControlListChanging(var Message: TCMControlListChanging); message CM_CONTROLLISTCHANGING; // ... end; implementation // ... procedure TElementsCategoryPanel.CMControlListChanging( var Message: TCMControlListChanging); begin if (Message.ControlListItem^.Control = FObservationTypeSelector) then begin if Message.Inserting then begin FObservationTypeSelector.Parent := nil; // Die Combobox aus dem FPanelSurface holen Message.ControlListItem^.Parent := Self; Message.ControlListItem^.Control.Top := 0; end; end else inherited; end;
Delphi-Quellcode:
ruft die Originalfunktion
inherited
Delphi-Quellcode:
nur auf, wenn
TCustomCategoryPanel.CMControlListChanging
Delphi-Quellcode:
nicht meine Combobox ist.
Message.ControlListItem^.Control
Aber egal wie ich es drehe und wende, die
Delphi-Quellcode:
Combobox landet trotzdem im
FObservationTypeSelector
Delphi-Quellcode:
?!
FPanelSurface
Delphi-Quellcode:
setzt die Combobox nicht, wie gedacht, auf die Höhe des Headers, sondern sie landet darunter in dem
Message.ControlListItem^.Control.Top := 0
Delphi-Quellcode:
.
FPanelSurface
Ich habe auch schon eine Alternative versucht:
Delphi-Quellcode:
Da knallts aber bei
procedure TElementsCategoryPanel.CMControlListChanging(
var Message: TCMControlListChanging); begin inherited; // Immer Originalfunktion aufrufen if (Message.ControlListItem^.Control = FObservationTypeSelector) then begin if Message.Inserting then begin // Combobox wieder aus der FPanelSurface.FWinControls Liste entfernen FPanelSurface.RemoveControl(Message.ControlListItem^.Control); Message.ControlListItem^.Parent := Self; Message.ControlListItem^.Control.Top := 0; end; end; end;
Delphi-Quellcode:
, weil sowohl
procedure TWinControl.Remove
Delphi-Quellcode:
als auch
FTabList
Delphi-Quellcode:
angeblich
FWinControls
Delphi-Quellcode:
sind, obwohl sie in der originalen Funktion bei
nil
Delphi-Quellcode:
erzeugt werden ... ?!
FPanelSurface.InsertControl
Was mache ich hier falsch? PS: Crosspost ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 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