AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Spezieller TFrame

Ein Thema von hzzm · begonnen am 19. Mär 2019 · letzter Beitrag vom 22. Mär 2019
Antwort Antwort
hzzm

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

Spezieller TFrame

  Alt 19. Mär 2019, 10:15
Delphi-Version: 10 Seattle
Guten Morgen,

ich steh grad irgendwie auf dem Schlauch:

Gibt es eine Moeglichkeit, einen TFrame zu definieren, bei dessen Kindern klar ist, dass sie immer ein
Code:
Icon: TImage;
haben?

Im constructor einer Klasse, wo ich normalerweise einen TFrame erstelle, moechte ich einfach TMeinSpeziellerFrame neben der Angabe eines AIcon: TImage erstellen, so dass dem Frame das Icon direkt mitgegeben wird:

Code:
TMyFrameClass = class(TFrame)
  Icon: TImage;
end;

TMyClass = class
public
  FMyFrameList: TObjectDictionary<String, TMyFrameClass>;
  constructor Create(AOwner: TComponent; AIcon: TImage);
end;

implementation

constructor TMyClass.Create(AOwner: TComponent; AIcon: TImage);
begin
  FMyFrameList := TObjectDictionary<String, TMyFrameClass>.Create;
  FMyFrameList.Add('ExampleFrame', TMyFrameClass.Create);
  FMyFrameList['ExampleFrame'].Icon := AIcon;
end;
Das Urproblem ist also, dass ich den TFrame im Formdesigner in der .dfm nicht von TMyFrameClass ableiten kann.
Der muss erzwungenermassen von TFrame abgeleitet werden (nicht von dessen Nachfahren), sonst spackt die IDE und ich kann den Frame im designer nicht mehr oeffnen.

Wie wuerdet Ihr diese Sachlage loesen?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.114 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Spezieller TFrame

  Alt 19. Mär 2019, 11:03
Du tust dir keinen Gefallen damit das mit aller Gewalt in den Konstruktor drücken zu wollen. Die IDE weiß von deinem Spezial-Konstrukt nicht, sie arbeitet mit dem Constructor Create(AOwner: TComponent) der schon von TComponent (oder TControl ?) vererbt wird.

Klar kannst du das machen, und deine Frames so über eigenen Code erstellen, einbauen und alles. Aber der Formular-Designer der IDE wird immer den Konstruktor Create(AOwner: TComponent) aufrufen.


Mach dir eine Basisklasse TMyBaseFrame der schonmal das TImage enthält. Du entdeckst später sicher noch mehr Gemeinsamkeiten die sich alle in eine Oberklasse auslagern lassen.

Wenn du jetzt einen speziellen Frame bauen willst leitest du den noch von TFrame ab, sondern von TMyBaseFrame (Datei -> Neu -> Weitere -> Vererbbare Elemente -> TMyBaseFrame).
  Mit Zitat antworten Zitat
hzzm

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

AW: Spezieller TFrame

  Alt 19. Mär 2019, 11:07
(Datei -> Neu -> Weitere -> Vererbbare Elemente -> TMyBaseFrame).
Volltreffer Guenther, das hab ich gebraucht.
Many thanks!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.114 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Spezieller TFrame

  Alt 19. Mär 2019, 11:49
Das war übrigens der umständliche Weg, schneller findest du deine Basisklassen-Frames (und Forms und Datenmodule) wenn du in die Toolpalette (Strg+Alt+P) schaust wenn der Formular-Designer nicht geöffnet ist. Dann einfach einen Eintrag daraus auswählen und schon hast du eine neue Ableitung von TMyBaseFrame erstellt.
  Mit Zitat antworten Zitat
hzzm

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

AW: Spezieller TFrame

  Alt 19. Mär 2019, 12:22
Das war übrigens der umständliche Weg, schneller findest du deine Basisklassen-Frames (und Forms und Datenmodule) wenn du in die Toolpalette (Strg+Alt+P) schaust wenn der Formular-Designer nicht geöffnet ist. Dann einfach einen Eintrag daraus auswählen und schon hast du eine neue Ableitung von TMyBaseFrame erstellt.
Zu frueh gefreut, ich will die abgeleiteten Frames ja nicht als einzelne unit haendisch erstellen.
Es geht ja darum, diese frames programmatisch zu erstellen und einfach ein Icon mitzugeben

Was mich wieder zu meiner Urspruenglichen Frage bringt:
Wie kann ich einen Type(TFrame) definieren, bei dem klar ist, dass er unbedingt ein Icon: TImage enthaelt, so dass ich dieses irgendwie programmatisch zuweisen kann?
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
675 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Spezieller TFrame

  Alt 19. Mär 2019, 14:45
Das war übrigens der umständliche Weg, schneller findest du deine Basisklassen-Frames (und Forms und Datenmodule) wenn du in die Toolpalette (Strg+Alt+P) schaust wenn der Formular-Designer nicht geöffnet ist. Dann einfach einen Eintrag daraus auswählen und schon hast du eine neue Ableitung von TMyBaseFrame erstellt.
Zu frueh gefreut, ich will die abgeleiteten Frames ja nicht als einzelne unit haendisch erstellen.
Es geht ja darum, diese frames programmatisch zu erstellen und einfach ein Icon mitzugeben

Was mich wieder zu meiner Urspruenglichen Frage bringt:
Wie kann ich einen Type(TFrame) definieren, bei dem klar ist, dass er unbedingt ein Icon: TImage enthaelt, so dass ich dieses irgendwie programmatisch zuweisen kann?
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.
Peter Below
  Mit Zitat antworten Zitat
hzzm

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

AW: Spezieller TFrame

  Alt 19. Mär 2019, 12:27
Du tust dir keinen Gefallen damit das mit aller Gewalt in den Konstruktor drücken zu wollen. Die IDE weiß von deinem Spezial-Konstrukt nicht, sie arbeitet mit dem Constructor Create(AOwner: TComponent)
Okay, ja, aber der constructor Create oben soll auch nicht von dem TFrame Nachfahren sein. Der ist aus einem voellig anderen Objekt.
Der Frame selber kann ruhig den std-ctor haben
  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 10:23 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