Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.352 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