AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi [VCL] Controls in TCategoryPanel Header einfügen
Thema durchsuchen
Ansicht
Themen-Optionen

[VCL] Controls in TCategoryPanel Header einfügen

Ein Thema von nuclearping · begonnen am 24. Sep 2015
Antwort Antwort
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

[VCL] Controls in TCategoryPanel Header einfügen

  Alt 24. Sep 2015, 03:19
Hallo!

Ich habe ein TCategoryPanel abgeleitet und möchte gern in den Header diverse Controls einfügen. Eine ComboBox und einen Button zum Beispiel.

Ich habe mir den Code vom TCustomCategoryPanel angeschaut. Und so wie ich das verstanden habe, werden die eingefügten Controls über den Message-Handler TCustomCategoryPanel.CMControlListChanging in das FPanelSurface "verschoben".

Also habe ich mir in meiner abgeleiteten Klasse einen gleichen Message-Handler erstellt:

Delphi-Quellcode:
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;
Wenn ich mit Breakpoints durchsteppe, funktioniert das Ganze auch. inherited ruft die Originalfunktion TCustomCategoryPanel.CMControlListChanging nur auf, wenn Message.ControlListItem^.Control nicht meine Combobox ist.

Aber egal wie ich es drehe und wende, die FObservationTypeSelector Combobox landet trotzdem im FPanelSurface ?!
Message.ControlListItem^.Control.Top := 0 setzt die Combobox nicht, wie gedacht, auf die Höhe des Headers, sondern sie landet darunter in dem FPanelSurface .

Ich habe auch schon eine Alternative versucht:

Delphi-Quellcode:
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;
Da knallts aber bei procedure TWinControl.Remove , weil sowohl FTabList als auch FWinControls angeblich nil sind, obwohl sie in der originalen Funktion bei FPanelSurface.InsertControl erzeugt werden ... ?!

Was mache ich hier falsch?

PS: Crosspost http://stackoverflow.com/questions/3...-header-region

Geändert von nuclearping (25. Sep 2015 um 01:46 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:44 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