![]() |
Frage zu Methode
Hallo zusammen,
ich habe eine Prozedur als Methode auf verschiedenen Units als MDI Child die zwar in jeder Unit den gleichen Namen hat aber generell etwas anders macht. Wenn ich nun im MDI Parent auf einen Button klicke soll diese Methode des aktuell aktiven MDI Child ausgeführt werden. Wie macht man sowas? CHILDNAME.methodenname geht nicht weil CHILDNAME dynamisch ermittelt wird. CHILDNAME.FindMethodenname as .... geht auch nicht. LG Mirko |
AW: Frage zu Methode
Eine "gemeinsame" Vorfahrklasse für deine Klassen.
Dort die Methode als virtual rein und eventuell auch abstract, da der Vorfahre keine eigene Funktion hat. Dann alle Klassen davon ableiten und diese Methode überscheiben (override). Ein Cast in die Vorfahrklasse und man kann jeweils auf die aktuelle Implementation zugreifen. siehe ![]() ![]() |
AW: Frage zu Methode
Okay danke ich lese es mir durch und probiere es.
Gruß Mirko |
AW: Frage zu Methode
Ich würde das ganze als Interface umsetzen. Das macht weniger Aufwand, weil du die MDI-Fenster nicht von einer Basisklasse ableiten musst. Und die Referenzzählung ist bei Formularen und Komponenten ohnehin deaktiviert.
Dann geht das nämlich einfach so:
Delphi-Quellcode:
Und dann kannst du direkt prüfen, ob es sich um ein passendes Kindfenster handelt:
type
IMDIChild = interface ['{80D62D80-EC9A-476A-99D4-54746544092F}'] procedure LoadFromFile(const AFilename: string); end; IMp3MDIChild = interface(IMDIChild) ['{044E0A1D-AB28-4DA4-9E48-A1DAE67AB0FC}'] function GetID3Name: string; end; TfrmMDIChild = class(TForm, IMDIChild, IMp3MDIChild) public procedure LoadFromFile(const AFilename: string); function GetID3Name: string; end;
Delphi-Quellcode:
Sprich mit Supports fragst du, ob das Fenster ein bestimmtes Interface implementiert. Und als dritten Parameter gibst du eine Variable, in die du dann eine entsprechende Referenz bekommst. Wenn Supports zurückgibt, dass es geklappt hat, kannst du dann direkt damit arbeiten.
var
CurrentChild: TForm; MDIChild: IMDIChild; Mp3Child: IMp3MDIChild; begin CurrentChild := ...; if Supports(CurrentChild, IMDIChild, MDIChild) then MDIChild.LoadFromFile(...); // oder: if Supports(CurrentChild, IMp3MDIChild, Mp3Child) then ShowMessage(Mp3Child.GetID3Name); So kannst du auch unterschiedliche Interfaces implementieren, die jeweils nur von einem Teil der MDI-Childs unterstützt werden. Am Rande: MDI gilt schon seit einigen Jahren als veraltet. Für neue Anwendungen würde ich das eher nicht mehr benutzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 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-2025 by Thomas Breitkreuz