AGB  ·  Datenschutz  ·  Impressum  







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

Frage zu Methode

Ein Thema von oakley · begonnen am 27. Nov 2016 · letzter Beitrag vom 28. Nov 2016
Antwort Antwort
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#1

Frage zu Methode

  Alt 27. Nov 2016, 16:58
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#2

AW: Frage zu Methode

  Alt 27. Nov 2016, 17:26
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 Delphi-Referenz durchsuchenTStrings (abstrakter Vorfahr) -> Delphi-Referenz durchsuchenTStringList (eine der vielen Implementationen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (27. Nov 2016 um 17:42 Uhr)
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#3

AW: Frage zu Methode

  Alt 27. Nov 2016, 17:55
Okay danke ich lese es mir durch und probiere es.

Gruß

Mirko
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Frage zu Methode

  Alt 28. Nov 2016, 07:46
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:
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;
Und dann kannst du direkt prüfen, ob es sich um ein passendes Kindfenster handelt:
Delphi-Quellcode:
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);
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.

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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  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 06:04 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