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 TCustomTaskDialog Buttons (https://www.delphipraxis.net/215107-tcustomtaskdialog-buttons.html)

TurboMagic 9. Mai 2024 21:02

TCustomTaskDialog Buttons
 
Hallo,

woher kommt das bzw. wie funktioniert das:

VCL's TCustomTaskDialog hat eine Liste mit Buttons.
Lt. Deklaration aus TCustomTaskDialog so definiert:

FButtons: TTaskDialogButtons;

was

TTaskDialogButtons = class(TOwnedCollection) ist und intern
ist das FButtonList: TTaskDialogButtonList; was auf das hinaus
läuft:

TTaskDialogButtonList = array of TTaskDialogButton;

Aber: alle Getter etc. von TTaskDialogButtons liefern TTaskDialogBaseButtonItem
statt TTaskDialogButtonItem nur der Objektinspektor kann damit alles was
TTaskDialogButtonItem besitzt editieren?!

Das verstehe ich jetzt nicht:

1. Warum liefert diese Collection basierte Klasse TTaskDialogBaseButtonItem statt
TTaskDialogButtonItem, obwohl sie intern TTaskDialogButtonItem verwaltet?

2. Warum kann der ObjektInspektor das wie TTaskDialogButtonItem verwalten?

Darüber hinaus bräuchte ich in meiner Klasse das auch so...

himitsu 9. Mai 2024 22:00

AW: TCustomTaskDialog Buttons
 
Die TCollection bekommt im Constructor den Typ der Items mit.
Und der Objektinspektor nutzt den aktuellen Typ zur Laufzeit via TypeInfo/RTTI.

TurboMagic 10. Mai 2024 08:51

AW: TCustomTaskDialog Buttons
 
Hallo,

danke schon mal für die Antwort, nur stellt mich das immer noch vor das Rätsel
wie ich jetzt zur Laufzeit auf den CommandLinkHint des jeweiligen Buttons zugreifen kann
und warum das nicht gleich so gemacht ist, dass das von Haus aus ohne Klimmzüge geht...

Grüße
TurboMagic

Uwe Raabe 10. Mai 2024 09:18

AW: TCustomTaskDialog Buttons
 
Es gibt neben TTaskDialogButtonItem als Ableitung von TTaskDialogBaseButtonItem ja auch noch TTaskDialogRadioButtonItem, die man analog im Property RadioButtons findet. Um jetzt nicht für beide (und eventuell zukünftige) Button-Typen eigene Collections und Enumerators erstellen zu müssen, ist man halt auf den gemeinsamen Vorfahren ausgewichen. Das war und ist die übliche Vorgehensweise in solchen Fällen. Es betrifft ja auch lediglich die Eigenschaften CommandLinkHint und ElevationRequired, für die man einen Cast einsetzen muss.

TurboMagic 10. Mai 2024 09:20

AW: TCustomTaskDialog Buttons
 
Ah! Danke, das erkläärt das. Wenn ich also einen Cast darum mache funktioniert es?
War mir halt nicht sicher, nicht dass ich einfach irgendwie im Speicher rumschreibe... ;-)

Uwe Raabe 10. Mai 2024 09:24

AW: TCustomTaskDialog Buttons
 
Solange nicht jemand böswillig dem Buttons Property eine andere Collection zuweist, die keine TTaskDialogButtonItem enthält, funktioniert das.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11: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