AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Eigene VCL-Komponenten, die ein Interface implementieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene VCL-Komponenten, die ein Interface implementieren

Ein Thema von MatthiasR · begonnen am 17. Nov 2009 · letzter Beitrag vom 18. Nov 2009
 
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#1

Eigene VCL-Komponenten, die ein Interface implementieren

  Alt 17. Nov 2009, 15:32
Folgende Situation: ich möchte mir eine Sammlung einiger Standard-WinControls (Edits, Checkbox, Listbox...) erstellen, die allesamt folgendes von mir definiertes Interface implementieren sollen:
Delphi-Quellcode:
ILoadAndSaveToXml = interface(IInterface)
  ['{C565EF46-47C1-482D-9C71-4570B555BBA4}']
  function GetAutoLoadAndSaveToXml: Boolean;
  procedure SetAutoLoadAndSaveToXml(const Value: Boolean);
  property AutoLoadAndSaveToXml: Boolean read GetAutoLoadAndSaveToXml write SetAutoLoadAndSaveToXml;
                                                          
  procedure LoadFromXml(const XmlElement: IXMLDOMElement);
  procedure SaveToXml(const XmlElement: IXMLDOMElement);
end;
Es sollen also alle Controls über die Methoden LoadFromXml, SaveToXml und die property AutoLoadAndSaveToXml verfügen.

Anschließend möchte ich in einer Anwendung mittels ComponentCount alle vorhandenen Controls durchlaufen, schauen ob sie das besagte Interface ILoadAndSaveToXml unterstützen und falls ja, die besagten Methoden aufrufen.

Frage: wie mache ich das?

Das habe ich bisher versucht:

Ich habe mir z.B. ein eigenes Edit wie folgt deklariert:
Delphi-Quellcode:
TMyEdit = class(TEdit, ILoadAndSaveToXml)
private
  FAutoLoadAndSaveToXml: Boolean;
  function GetAutoLoadAndSaveToXml: Boolean;
  procedure SetAutoLoadAndSaveToXml(const Value: Boolean);
published
  property AutoLoadAndSaveToXml: Boolean read GetAutoLoadAndSaveToXml write SetAutoLoadAndSaveToXml;

  procedure LoadFromXml(const XmlElement: IXMLDOMElement);
  procedure SaveToXml(const XmlElement: IXMLDOMElement);
end;
Die Methoden habe ich mit entsprechendem Leben gefüllt. Theoretisch müsste ich auch noch QueryInterface und _AddRef und _Release selbst implementieren, da meine ganzen Controls ja nicht von TInterfacedObject abgeleitet sind, aber das hab ich erstmal weg gelassen.

Alles schön und gut, nur wie finde ich nun zur Laufzeit heraus, ob eine Komponente auf dem Formular das Interface ILoadAndSaveToXml unterstützt, damit ich die Methoden aufrufen kann? Theoretisch ginge das ja über QueryInterface, aber das steht mir nur bei meinen eigenen Controls zu Verfügung, nicht bei allen anderen, die keine von IInterface abgeleitete Schnittstelle implementieren, oder? Oder ist das, was ich hier gerade versuche, ohnehin völliger Blödsinn ? Also Controls, die zusätzlich Interfaces implementieren?

Danke für eure Hilfe!
  Mit Zitat antworten Zitat
 


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 00:16 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