Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Name einer Klasse "direkt" erhalten (https://www.delphipraxis.net/167607-name-einer-klasse-direkt-erhalten.html)

Helmi 9. Apr 2012 09:32

Name einer Klasse "direkt" erhalten
 
Hallo,

gibt es eine Möglichkeit, und falls ja welche, um an den Namen einer Klasse zu gelangen?

z. B.: Ich habe eine Klasse
Delphi-Quellcode:
TMyClass = packed class (TObject)
. Ich würde nun gerne den Namen ermitteln.
Also in dem Falle "TMyClass".

Nun könnte ich es einfach machen und eine Varible definieren und dann mittels ClassName den Namen ermitteln. Also so:
Delphi-Quellcode:
var
  MyClass: TMyClass;

begin
  S := MyClass.ClassName;
end;
Nur gibts auch etwas um auf die Zwischenvariable verzichten zu können? Also irgendwas in der Art:
Delphi-Quellcode:
begin
  S := GetClassName(TMyClass);
end;

himitsu 9. Apr 2012 09:39

AW: Name einer Klasse "direkt" erhalten
 
Delphi-Referenz durchsuchenTMyClass.ClassName?

Das ist ein Class Property eine Class Function. :zwinker:



Du hast diese Variable nicht initialisiert ... ich hoffe du freust dich über die Exception. :angle2: (bei einer lokalen Variable)
Zitat:

Delphi-Quellcode:
var
  MyClass: TMyClass;

begin
  S := MyClass.ClassName;
end;

Und ja, das Andere geht auch :stupid:
Delphi-Quellcode:
function GetClassName(C: TClass): string;
begin
  Result := C.ClassName;
end;
oder wie währe es mit
Delphi-Quellcode:
S := TRttiContext.Create.GetType(TMyClass).Name;
? :lol:

Helmi 9. Apr 2012 09:51

AW: Name einer Klasse "direkt" erhalten
 
Zitat:

Zitat von himitsu (Beitrag 1160816)
Du hast diese Variable nicht initialisiert ... ich hoffe du freust dich über die Exception. :angle2: (bei einer lokalen Variable)

Das war nur als Beispiel - ich habs so nie im Code gehabt. Bislang hab ich den Klassen-Namen manuell als String geschrieben. Das wollt ich aber nicht mehr.

Zitat:

Zitat von himitsu (Beitrag 1160816)
Und ja, das Andere geht auch :stupid:
Delphi-Quellcode:
function GetClassName(C: TClass): string;
begin
  Result := C.ClassName;
end;

Auf diese Lösung bin ich dann auch gekommen, nachdem ich deinen Post gelesen habe (bevor ich sah, dass du ein Edit geschrieben hast). Das geht auch.

Zitat:

Zitat von himitsu (Beitrag 1160816)
oder wie währe es mit
Delphi-Quellcode:
S := TRttiContext.Create.GetType(TMyClass).Name;
? :lol:

Neeeeeeeee :-) - Wie schaut denn das aus? :zwinker: - das ist viel zu übertrieben lang. Lieber ne kleine Function - trotzdem Danke für die zusätzliche Möglichkeit

himitsu 9. Apr 2012 09:55

AW: Name einer Klasse "direkt" erhalten
 
Hoffentlich ist dir die erste Zeile aufgefallen. :angle:

*nur zur Sicherheit nochmal nachfrag*


:oops: Ups, die alte RTTI vergessen.
Delphi-Quellcode:
uses TypInfo;

S := UTF8ToString(PTypeInfo(TypeInfo(TStrings)).Name); // vor D2009 könnte man das UTF8ToString auch weglassen

Ich hab nie verstanden, warum das TypeInfo nicht gleich PTypeInfo zurückgibt, sondern nur 'nen blöden Pointer.. :gruebel:

Helmi 9. Apr 2012 09:58

AW: Name einer Klasse "direkt" erhalten
 
Zitat:

Zitat von himitsu (Beitrag 1160819)
Hoffentlich ist dir die erste Zeile aufgefallen. :oops:

Man möge mir bitte den Sinne des ersten Zeile verdeutlichen!

Ich weiss grad nicht was du meinst

himitsu 9. Apr 2012 10:01

AW: Name einer Klasse "direkt" erhalten
 
Delphi-Quellcode:
S := KlassenVariable.ClassName;

S := TKlasse.ClassName;

Helmi 9. Apr 2012 10:03

AW: Name einer Klasse "direkt" erhalten
 
Zitat:

Zitat von himitsu (Beitrag 1160821)
Delphi-Quellcode:
S := KlassenVariable.ClassName;

S := TKlasse.ClassName;

jo - Danke! Es fiehlet mir ins Auge ;-)


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