Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Klassentyp auf Interface-Implementierung prüfen (https://www.delphipraxis.net/198902-klassentyp-auf-interface-implementierung-pruefen.html)

Dennis07 8. Dez 2018 23:51

Klassentyp auf Interface-Implementierung prüfen
 
Hallo,
mal ne Frage: Es gibt ja
Delphi-Quellcode:
Supports()
, das unterstützt aber nur Instanzen. Ich suche jetzt schon ne weile eine Funktion, die das selbe auch für Klassentypen anbietet.
Irgendwer eine Idee?

Schokohase 8. Dez 2018 23:55

AW: Klassentyp auf Interface-Implementierung prüfen
 
Delphi-Referenz durchsuchenSupports kann mehr
Delphi-Quellcode:
function Supports(const Instance: IInterface; const IID: TGUID; out Intf): Boolean;
function Supports(const Instance: TObject; const IID: TGUID; out Intf): Boolean;
function Supports(const Instance: IInterface; const IID: TGUID): Boolean;
function Supports(const Instance: TObject; const IID: TGUID): Boolean;
function Supports(const AClass: TClass; const IID: TGUID): Boolean;

Dennis07 9. Dez 2018 00:32

AW: Klassentyp auf Interface-Implementierung prüfen
 
Zitat:

Zitat von Schokohase (Beitrag 1420395)
Delphi-Quellcode:
function Supports(const AClass: TClass; const IID: TGUID): Boolean;

Haha, da hat mein CodeInsight mal wieder rumgesponnen. Danke, wurde mir nicht angezeigt! ;)

Uwe Raabe 9. Dez 2018 07:05

AW: Klassentyp auf Interface-Implementierung prüfen
 
Zitat:

Zitat von Dennis07 (Beitrag 1420396)
Haha, da hat mein CodeInsight mal wieder rumgesponnen. Danke, wurde mir nicht angezeigt! ;)

Nichts oder nur das erste overload? Die anderen sieht man erst wenn man die öffnende Klammer eingegeben hat.

Dennis07 9. Dez 2018 23:24

AW: Klassentyp auf Interface-Implementierung prüfen
 
Weiß ich gerade nicht mehr. Jo, leider zeigt er nicht direkt alle Überladungen an, eine Sache, die mich an Delphi schon wirklich abnervt.

jaenicke 10. Dez 2018 09:13

AW: Klassentyp auf Interface-Implementierung prüfen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Dennis07 (Beitrag 1420430)
Weiß ich gerade nicht mehr. Jo, leider zeigt er nicht direkt alle Überladungen an, eine Sache, die mich an Delphi schon wirklich abnervt.

Sieht bei mir so aus:
Anhang 50413

Uwe Raabe 10. Dez 2018 09:43

AW: Klassentyp auf Interface-Implementierung prüfen
 
Zitat:

Zitat von Dennis07 (Beitrag 1420430)
Weiß ich gerade nicht mehr. Jo, leider zeigt er nicht direkt alle Überladungen an, eine Sache, die mich an Delphi schon wirklich abnervt.

Du meinst im ersten Fenster, wenn der Methodenname vervollständigt werden soll? Dort ist das Unterdrücken der Overloads durchaus eine gute Sache. Wie lang würde diese Liste manchmal sein, wenn immer aller Overloads mit angezeigt werden. Bei manchen Methoden ist ja schon die reine Liste der Overloads relativ unübersichtlich.

Konkretes Beispiel: Bei der Verwendung von CodeSite öffnet die Programmierhilfe bei der Eingabe von
Delphi-Quellcode:
CodeSite.Send
in einem scrollbaren Popup eine Auto-COmplete-Liste von 47 Methoden, die alle mit Send beginnen. Gibt man nun hinter dem Send eine öffnende Klammer bietet die aktive Code-Parameter Option (Das ist eine andere Funktion als die oben genannte Programmierhilfe) ein Hint-Fenster mit 48 Overloads der Send-Methode an. Würden die Overloads bereits in der Programmierhilfe angezeigt werden, müsste ich erst in 170 Einträgen den passenden Aussuchen, wobei ich die meiste Zeit wohl nie mehr als zwei verschiedene Methodennamen gleichzeitig sehen könnte.

Wenn jemand kein CodeSite benutzt, mag er das obige Beispiel mal an
Delphi-Quellcode:
TStream
und Write/WriteData ausprobieren. Ist nicht ganz so krass, aber macht es ebenso deutlich.

Ich finde, das aktuelle Verhalten ist komfortabel und praxisorientiert. Es soll darum auch bitte so bleiben.

dummzeuch 10. Dez 2018 11:07

AW: Klassentyp auf Interface-Implementierung prüfen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1420445)
Zitat:

Zitat von Dennis07 (Beitrag 1420430)
Weiß ich gerade nicht mehr. Jo, leider zeigt er nicht direkt alle Überladungen an, eine Sache, die mich an Delphi schon wirklich abnervt.

Ich finde, das aktuelle Verhalten ist komfortabel und praxisorientiert. Es soll darum auch bitte so bleiben.

Stimme zu, aber ich fände es nett, wenn man erkennen könnte, dass es Overloads gibt.

jaenicke 10. Dez 2018 11:44

AW: Klassentyp auf Interface-Implementierung prüfen
 
Zitat:

Zitat von dummzeuch (Beitrag 1420454)
Stimme zu, aber ich fände es nett, wenn man erkennen könnte, dass es Overloads gibt.

Vorschläge? ;-)

Ich finde das an der Stelle nicht wichtig, fände einen dezenten Hinweis aber auch gut. Aber wie könnte der aussehen ohne dabei unnötig Platz zu benötigen? Und so, dass er trotzdem intuitiv verständlich ist.

stahli 10. Dez 2018 11:55

AW: Klassentyp auf Interface-Implementierung prüfen
 
"MyProcedure(...)"?

Uwe Raabe 10. Dez 2018 13:04

AW: Klassentyp auf Interface-Implementierung prüfen
 
Zitat:

Zitat von stahli (Beitrag 1420458)
"MyProcedure(...)"?

Ja, das kam mir auch in den Sinn.:thumb:

Dennis07 10. Dez 2018 13:28

AW: Klassentyp auf Interface-Implementierung prüfen
 
Naja, so seh ich das auch. Muss nicht jede überladung angezeigt werden. Aber zu mindest ein hinweis, wie "overload" o.ä.

jaenicke 10. Dez 2018 16:35

AW: Klassentyp auf Interface-Implementierung prüfen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1420466)
Zitat:

Zitat von stahli (Beitrag 1420458)
"MyProcedure(...)"?

Ja, das kam mir auch in den Sinn.:thumb:

Damit verlöre man aber die Parameteranzeige für eine der Überladungen, die man aktuell ja sieht.

Uwe Raabe 10. Dez 2018 16:51

AW: Klassentyp auf Interface-Implementierung prüfen
 
Zitat:

Zitat von jaenicke (Beitrag 1420506)
Damit verlöre man aber die Parameteranzeige für eine der Überladungen, die man aktuell ja sieht.

Das ist richtig, aber die kriegt man ja mit der öffnenden Klammer wieder. Alternativ wäre aber auch einfach die Anzeige der Overload-Direktive nach der Signatur denkbar.

Schick wäre vielleicht auch eine aufklappbare Unterliste mit den verschiedenen Overloads im Stile eine Popupmenüs.

Dennis07 11. Dez 2018 09:36

AW: Klassentyp auf Interface-Implementierung prüfen
 
Oder, was ich mir vorstellen könnte:
Angezeigt wird nur die erste überladung (so wie jetzt). Wenn man aber entweder mit dem Mauszeiger drüber fährt oder den Eintrag auswählt, kommt ja jetzt auch schon ein Tooltip. Dieser könnte dann die Überladungen schon mit anzeigen.
Oder aber, man zeigt die Überladungen vernünftig direkt an, aber so, dass die Übersicht nicht flöten geht. Also inline meine ich:

Delphi-Quellcode:
procedure Poo; overload;
procedure Poo(A: Integer); overload;
würde zu:
Delphi-Quellcode:
procedure Poo([A: Integer]);


Delphi-Quellcode:
function Foo(A: Integer): String; overload;
function Foo(A: Double): AnsiString; overload;
würde zu:
Delphi-Quellcode:
function Foo(A: <Integer or Double>): <String or AnsiString>;
(So wird es ja beispielsweise auch schon seit jeher mit den Makros, also den intrinsischen "Routinen" gelöst.

Uwe Raabe 11. Dez 2018 09:55

AW: Klassentyp auf Interface-Implementierung prüfen
 
Das sind aber auch wieder nur recht einfache Beispiele. Bei den oben genannten Anwendungsfällen würde das jämmerlich versagen. So ist ja überhaupt nicht mehr zu erkennen, welche Parameter-Kombinationen möglich sind. Ich werfe mal einfach
Delphi-Quellcode:
string.Split
mit seinen 18 Überladungen in den Raum (und da fehlen sogar noch ein paar bis zur Vollständigkeit).


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 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