AGB  ·  Datenschutz  ·  Impressum  







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

Interface Problem mit TControl

Ein Thema von FAlter · begonnen am 18. Sep 2009 · letzter Beitrag vom 18. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#1

Interface Problem mit TControl

  Alt 18. Sep 2009, 14:31
Hi,

ich habe ein Interface:

Delphi-Quellcode:
type
  IChangeable = interface(IInterface)['{BAC01552-BB67-488E-B33C-16CFF2BA2F5B}']
    function isChanged: Boolean;
    procedure Change;
  end;
Und Klassen die z. B. so aussehen:

TEditorFrame = class(TSynEdit, IFileFrame, IChangeable) Sie sind alle mittelbare Nachfahren von TControl. Nun habe ich eine Variable:

FFrame: TControl; Da sind irgendwelche TControl-Nachfahren drauf. Ob sie dieses Interface implementieren weiß ich nicht.

Nun habe ich es so versucht zu prüfen:
Delphi-Quellcode:
if (FFrame is IChangeable) then
  if IChangeable(FFrame).isChanged then
    ...
Der Compiler bringt mir aber folgende Felhermeldungen:

Zitat:
umainide.pp(345,14) Error: Class or Object types "TControl" and "IChangeable" are not related
umainide.pp(345,14) Error: Incompatible type for arg no. 1: Got "IChangeable", expected "TClass"
Hint: Found declaration: $fpc_do_is(TClass, TObject):Boolean
umainide.pp(346,8) Error: Class or Object types "TControl" and "IChangeable" are not related
umainide.pp(387) Fatal: There were 3 errors compiling module, stopping
Ich habe per Google zwar was von einem interfache "is" patch gefunden. Aber das war 2005. Inzwischen müsste der Patch doch drin sein?

Oder hab ich nen Denkfehler in meiner Prüfung drin?

Gruß
Felix
Felix Alter
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Interface Problem mit TControl

  Alt 18. Sep 2009, 14:41
Du musst die Supports()-Funktion benützen:
Delphi-Quellcode:
var
  ic : IChangeable;
begin
  if Supports(FFrame, IChangeable, ic) then
    if ic.isChanged then
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Interface Problem mit TControl

  Alt 18. Sep 2009, 14:49
(FFrame as IChangeable) könnte eventuell auch gehn ... zumindestens muß hier das Interface gesucht werden (ein einfacher TypeCast geht da nicht), da die Interfacevariable sozusagen auf das Interface zeigen muß und nicht auf das Objekt.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Interface Problem mit TControl

  Alt 18. Sep 2009, 14:57
as löst allerdings eine Exception aus, wenn das Interface nicht implementiert ist. Das könnte eventuell unerwünscht sein.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Interface Problem mit TControl

  Alt 18. Sep 2009, 15:01
Hi,

danke. Ich dächte es ginge mit is wie auch bei Klassen. Scheint eine FPC Eigenart zu sein?

As wollte ich nicht nehmen weil ich die Exception möglichst schon vermeiden wollte. Supports klingt gut. Und compiliert auch.

Gruß
Felix
Felix Alter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Interface Problem mit TControl

  Alt 18. Sep 2009, 15:02
Wieso, es ist doch implementiert? (zumindestens wurde es ja vorher geprüft)
Delphi-Quellcode:
if (FFrame is IChangeable) then
  if (FFrame as IChangeable).isChanged then

Supports wäre praktisch auch nur ein IS und ein AS in Einem
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Interface Problem mit TControl

  Alt 18. Sep 2009, 15:08
Hi,

nein, der Compiler akzeptiert ja schon das is nicht.

Gruß
Felix
Felix Alter
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Interface Problem mit TControl

  Alt 18. Sep 2009, 15:10
Ich weis nicht, wie FPC das macht, aber in Delphi gibt es mit der Mischung von Objekten und Interfaces große Probleme (auch wenn man supports anwendet).
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Interface Problem mit TControl

  Alt 18. Sep 2009, 15:15
Zitat von FAlter:
nein, der Compiler akzeptiert ja schon das is nicht.
nicht?

aber das AS ging zumindestens (in Delphi)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Interface Problem mit TControl

  Alt 18. Sep 2009, 15:18
Zitat von himitsu:
Zitat von FAlter:
nein, der Compiler akzeptiert ja schon das is nicht.
nicht?
Nö, das ging noch nie. Ist schon komisch, da eigentlich klar ist was gemeint ist (nachgucken ob die IID in der Interfacetabelle des Objektes/der Klasse steht), hätte man das schon längst implementieren können.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:41 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