Einzelnen Beitrag anzeigen

hzzm

Registriert seit: 8. Apr 2016
97 Beiträge
 
Delphi 10 Seattle Professional
 
#8

AW: Spezieller TFrame

  Alt 19. Mär 2019, 15:42
Du kannst deiner Frame-Basisclasses durchaus einen Konstruktor verpassen, der neben dem Owner: TComponent noch einen weiteren Parameter für das zu verwendende Icon hat. Du mußt Dir nur klar darüber sein, dass dieser Konstruktor nur verwendet wird, wenn Du eine Frame-Instanz per Kode erzeugst und deinen Konstruktor explizit aufrufst. Wenn Du eine Instanz im Designer auf ein Form knallst wird unweigerlich der Standard TComponent-Konstruktor (oder dessen override) verwendet, da kannst Du nur ebenfalls im Designer das Icon laden oder halt in einer geeigneten Form-Methode zuweisen. So ein Icon fällt nicht vom Himmel, wenn Du die gleiche Frame-Klasse je nach Anwendung mit verschiedenen Icons verwenden willst geht nur auf eine der vorstehend genannten Wege.

Wenn Du allerdings einen festen Satz von Icons hast gibt es noch eine andere Möglichkeit. Da könntest Du der Basisklasse eine TImagelist mit dem vollen Satz der Icons verpassen, einen enumerated Type mit entsprechend vielen Elementen definieren, dem Frame eine published property dieses Typs mit einer Settermethode verpassen, und diese dann das gewünschte Icon aus der Imagelist in das Icon-TImage kopieren lassen.
Der Konstruktor meiner "neuen" Frame-Klasse ist mir egal, der braucht kein Icon und gar nichts.
Die Idee ist, einen TMyBaseFrame in der IDE zu erstellen, der eine Member/Feldvariable Icon: TImage hat. Von dem will ich Frames ableiten (programmatisch erstellen), die leicht anders aufgebaut sind, aber auch immer ein Icon: TImage haben. Ueber die Klasse TMyBaseFrame sollte somit im code klar sein, dass sie immer dieses TMyBaseFrame.Icon: TImage; beinhaelt. Denn dann kann ich einfach generell bei so einem Frame auf
Code:
TMyCoolFrame = class(TMyBaseFrame)
...
AMyCoolFrame := TMyCoolFrame.Create(AOwner);
AMyCoolFrame.Icon := TImage(Whatever);
zugreifen.

Wenn ich also wie man es normal vermuten wuerde, einfach eine neue Klasse von TFrame ableite und ein Member Icon hinzufuege, war nicht moeglich, in der IDE im Code TMyCoolFrame = class(TFrame) abzuaendern in TMyCoolFrame = class(TMyBaseFrame), so dass bekannt ist, dass ein Icon enthalten ist und gleichzeitig trotzdem das Editieren des TFrame im FormEditor moeglich ist (F12).

Kurz gesagt wie in Post 1 geschrieben.
"war nicht moeglich", weil ich es mittlerweile geschafft habe. Was fuer ein Teufelsritt, ich weiss gar nicht, warum die IDE sich da so scheut
  Mit Zitat antworten Zitat