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
Antwort Antwort
MatthiasR

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

Re: Eigene VCL-Komponenten, die ein Interface implementieren

  Alt 18. Nov 2009, 08:02
Zitat von Bernhard Geyer:
Zitat von NamenLozer:
Funktioniert der Operator "is" nicht bei Interfaces?
AFAIK nur wenn du für das Interface eine GUID vergibst.
Das hatte ich zu aller erst ausprobiert. Zumindest bei mir beschwert sich der Compiler, wenn ich
if (Components[i] is ILoadAndSaveToXml) then mit folgender Fehlermeldung:
Zitat:
[Fehler] Unit1.pas(39): Operator ist auf diesen Operandentyp nicht anwendbar
Obwohl ich dem Interface eine GUID verpasst habe. Wenn es direkt mit "is" geklappt hätte, hätte ich die Frage hier nicht gestellt
Zitat von Hawkeye219:
Hallo Matthias,

alle von TComponent abgeleiteten Komponenten implementieren (in TComponent) das Interface IInterface - also auch deine speziellen Controls, ohne dass du die entsprechenden Funktionen selbst programmieren musst. Zusätzlich ist in TComponent die Referenzzählung ausgeschaltet, falls du nicht gerade mit COM hantierst und Controls ableitest, die das Interface IVCLComObject implementieren.

Die einfache Abfrage lautet daher

Delphi-Quellcode:
var
  intf: ILoadAndSaveToXml;
begin
  if Supports(Component, ILoadAndSaveToXml, intf) then
    intf.SaveToXML (...);
end;
Für alle nicht von TComponent abgeleiteten Klassen gelten natürlich die von Bernhard gemachten Aussagen bezüglich der gemischten Verwendung von Interface- und Objektreferenzen.

Gruß Hawkeye
Hallo Hawkeye,

danke für die Hintergrundinfos bezüglich TComponent und der "Supports"-Funktion. Genau die haben mir gefehlt. Klar, wenn TComponent bereits IInterface implementiert, dann tun das auch alle WinControls. So muss ich mich dann doch nicht selbst drum kümmern. Außerdem bin ich dann beim Implementieren zusätzlicher Interfaces in meinen eigenen Controls immer auf der sicheren Seite, ohne dass mir die Referenzzählung dabei in die Quere kommt (solange ich die IInterface-Methoden nicht überschreibe). Habs auch schon ausgetestet, funktioniert astrein =) . Womit ich soeben mein erstes eigenes Interface definiert hätte, das noch dazu nen richtig sinnvollen Zweck erfüllt
  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:12 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