Delphi-PRAXiS

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/)
-   -   Delphi Eigene VCL Komponente aus mehreren bestehenden erstellen (https://www.delphipraxis.net/179461-eigene-vcl-komponente-aus-mehreren-bestehenden-erstellen.html)

CodeX 9. Mär 2014 15:15

Eigene VCL Komponente aus mehreren bestehenden erstellen
 
Ich habe schon ein paar eigene Komponenten erstellt, indem ich vorhandene abgeleitet und meinen Wünschen entsprechend angepasst habe. Die Grundvoraussetzungen sind also vorhanden. :)

Nun würde ich aber gerne eine komplexere Komponente zusammensetzen, die aus einer Checkbox, einem Label und einem Button besteht und deren Hintergrund transparent ist. Da hier mehrere Komponenten zusammengefasst werden, sollte vermutlich nicht von einer dieser drei Komponenten abgeleitet werden, sondern von einer gruppierenden Komponente. Nun habe ich hin und her recherchiert, kann mich aber nicht entscheiden, was die beste Vorgehensweise ist. Ich würde mich freuen, wenn mir da jemand auf die Sprünge helfen könnte:
  1. Von welcher Komponente soll ich das ableiten? Irgendwie kommt von TComponent bis TCustomTransparentControl alles in Frage. Ich weiß nicht genau, nach welchen Kriterien ich hier wählen muss. Order ganz anders?
  2. Wenn ich die drei Komponenten im Constructor der neuen Komponente per
    Delphi-Quellcode:
    T... .Create(Self)
    erstelle, muss ich diese im Destructor nicht noch gesondert freigeben, oder?
  3. In welcher Methode sollten die Positionen und Größen der drei Komponenten aktualisiert werden? OnPaint? OnResize?
  4. Muss ich irgendwas Bestimmtes beachten, wenn ich innerhalb dieser neuen Komponente zwischen den enthaltenen Komponenten per Tab durchschalten können möchte? Ich möchte beispielsweise, dass sowohl die Checkbox als auch der Button per TabStop angesteuert werden.

DeddyH 9. Mär 2014 15:17

AW: Eigene VCL Komponente aus mehreren bestehenden erstellen
 
Ich habe es zwar lange nicht mehr angesehen, aber IIRC wird das in diesem Video recht gut erklärt: Composite Controls

Daniel 9. Mär 2014 15:29

AW: Eigene VCL Komponente aus mehreren bestehenden erstellen
 
Du könntest auch von einer der drei Komponenten ableiten, diese quasi als "Mittelpunkt" betrachten und dann die anderen Komponenten als weitere Unter-Objekte Deiner Komponente nutzen.

Schaue vielleicht mal, wie das TLabeledEdit das macht - ist ja letztlich auch nur die Heirat zweier ansonsten eigenständiger Komponenten mit dem Ziel des gemeinsamen Life-Cycles.

stahli 9. Mär 2014 16:08

AW: Eigene VCL Komponente aus mehreren bestehenden erstellen
 
Zur Transparenz kann ich nichts sagen.
Ansonsten kannst Du die SubControls im OnCreate Deiner Komponente (z.B. abgeleitet von TPanel o.ä.) erzeugen und wenn Du als Owner Deine Kompo angibst werden sie auch später automatisch frei gegeben.
Du kannst Resize überschreiben und dort Deine SubControls ausrichten.
Zur Laufzeit sollten die SubControls bedienbar und m.E. auch mit Tab umschaltbar sein.
Zur Designtime kommst Du nur an Deine eigene Komponente heran, nicht an die SubControls.

Wenn Du Deine SubControls auch zur Designtime konfigurieren willst, dann könnte SetSubComponent helfen.

CodeX 11. Mär 2014 00:21

AW: Eigene VCL Komponente aus mehreren bestehenden erstellen
 
Vielen herzlichen Dank! Ihr habt mir alle drei auf drei Arten weitergeholefen. :)
@DeddyH: Das Video war sehr lehrreich. Die Frame Component Idee am Ende war z.B. gänzlich neu für mich.
@Daniel: Das mit TLabeledEdit war eine sehr gute Anregung. Ich hatte mich gedanklich etwas drauf verharrt, dass alle Komponenten bei der Darstellung innerhalb einer gemeinsamen liegen müssen. Wenn man diese außerhalb anordnen kann, ergeben sich ganz neue Möglichkeiten.
@stahli: Die Erläuterungen helfen auf jeden Fall!

Ich muss jetzt die verschiedenen Varianten alle mal durchprobieren, aber ich denke, dass ich damit jetzt zurechtkomme.
Danke! :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 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 by Thomas Breitkreuz