Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi GPStatus als string (https://www.delphipraxis.net/192193-gpstatus-als-string.html)

EWeiss 28. Mär 2017 01:58


GPStatus als string
 
Ist wieder spät da klappt wieder gar nichts.

Wie kann ich den Status von GPStatus als Text ausgeben (string)

Delphi-Quellcode:
type

  Status = (
    Ok,
    GenericError,
    InvalidParameter
  );
  TStatus = Status;
Delphi-Quellcode:
GpStatus         = TStatus;


ohne die ganze type wieder zu parsen.

gruss

hoika 28. Mär 2017 04:37

AW: GPStatus als string
 
Hallo,
das sollte über RTTI gehen

http://docwiki.embarcadero.com/RADSt...r_Simple_Types

Stichwort Enumeration Types

EWeiss 28. Mär 2017 04:53

AW: GPStatus als string
 
Zitat:

Zitat von hoika (Beitrag 1365700)
Hallo,
das sollte über RTTI gehen

http://docwiki.embarcadero.com/RADSt...r_Simple_Types

Stichwort Enumeration Types

Danke.
Die frage die da wäre unter D2010 anwendbar?

gruss

hoika 28. Mär 2017 04:57

AW: GPStatus als string
 
Hallo,
ja, der Code läuft auch unter D2007,
muss ich nachher mal raussuchen.

EWeiss 28. Mär 2017 05:01

AW: GPStatus als string
 
Zitat:

Zitat von hoika (Beitrag 1365704)
Hallo,
ja, der Code läuft auch unter D2007,
muss ich nachher mal raussuchen.

Das wäre nett Danke dir.

gruss

Ghostwalker 28. Mär 2017 05:40

AW: GPStatus als string
 
Oder ohne RTTI:

Delphi-Quellcode:
Const
  cStatus : Array[TStatus] of String = (
   'Ok',
   'GenericError',
   'InvalidParameter'
  );
und dann einfach über:

Delphi-Quellcode:
cStatus[status]
darauf zugreifen.

Läuft unabhängig von der Delphi-Version und sauber internationalisiert werden :)

EWeiss 28. Mär 2017 05:44

AW: GPStatus als string
 
Zitat:

Zitat von Ghostwalker (Beitrag 1365706)
Oder ohne RTTI:

Delphi-Quellcode:
Const
  cStatus : Array[TStatus] of String = (
   'Ok',
   'GenericError',
   'InvalidParameter'
  );
und dann einfach über:

Delphi-Quellcode:
cStatus[status]
darauf zugreifen.

Läuft unabhängig von der Delphi-Version und sauber internationalisiert werden :)

könnte ich machen..
Aber dann ändere ich die GDIP_API Unit.
Was bedeutet ich muss alle Funktionen die auf GPStatus zugreifen wieder ändern. Oder?

gruss

Union 28. Mär 2017 08:01

AW: GPStatus als string
 
Sollte in etwa so gehen:
Delphi-Quellcode:
GetEnumName(TypeInfo(TStatus), Integer(AStatus));

EWeiss 28. Mär 2017 08:16

AW: GPStatus als string
 
Zitat:

Zitat von Union (Beitrag 1365714)
Sollte in etwa so gehen:
Delphi-Quellcode:
GetEnumName(TypeInfo(TStatus), Integer(Status));

nicht wirklich.

Zitat:

[DCC Fehler] uMain.pas(304): E2029 '(' erwartet, aber ')' gefunden
Bei Status.

gruss

Union 28. Mär 2017 08:23

AW: GPStatus als string
 
TypInfo in den uses?

Delphi-Quellcode:
program RttiToString;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Rtti,
  System.TypInfo;

type

  Status = (
    Ok,
    GenericError,
    InvalidParameter
  );
  TStatus = Status;

var
  AStatus : TStatus;

begin
  try
    AStatus := GenericError;
    Writeln(
      GetEnumName(TypeInfo(TStatus), Integer(AStatus))
    );
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.

EWeiss 28. Mär 2017 08:40

AW: GPStatus als string
 
Hatte vergessen AStatus zu definieren.

Die Lösung ist aber trotzdem nicht korrekt (Oder ich irre mich auch) ;)
AStatus ist ja nicht initialisiert.

Wenn ich nun wie du AStatus definiere dann ist aber bei einem Auftretenden Fehler
AStatus immer GenericError.

Das möchte ich aber nicht sondern den realen wert ;)
bsp. Win32Error

gruss

Union 28. Mär 2017 08:47

AW: GPStatus als string
 
Wie wäre es mit etwas Kontext?

Uwe Raabe 28. Mär 2017 08:51

AW: GPStatus als string
 
Zitat:

Zitat von EWeiss (Beitrag 1365721)
Wenn ich nun wie du AStatus definiere dann ist aber bei einem Auftretenden Fehler
AStatus immer GenericError.

Das möchte ich aber nicht sondern den realen wert ;)
bsp. Win32Error

Dann übergib doch anstatt AStatus den realen Wert...

EWeiss 28. Mär 2017 08:57

AW: GPStatus als string
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1365723)
Zitat:

Zitat von EWeiss (Beitrag 1365721)
Wenn ich nun wie du AStatus definiere dann ist aber bei einem Auftretenden Fehler
AStatus immer GenericError.

Das möchte ich aber nicht sondern den realen wert ;)
bsp. Win32Error

Dann übergib doch anstatt AStatus den realen Wert...

Wenn das alles so einfach wäre wie ihr sagt.
Ich frage ja nicht umsonst. ;)

Gebe ich den Realen wert ein der mit meiner Funktion übergeben wird

Delphi-Quellcode:
function TfrmMain.SaveToPNG(FullName: PWideChar; img: GPImage): GPStatus;


in dem Fall Result
Dann bekomme ich vom Compiler die Meldung das Result möglicherweise nicht initialisiert ist.

EDIT:
Ok denke sollte dann
Result:= GenericError; voran stellen.
Dann geht's. :) :wall: :duck:

Danke.


grussa

Ghostwalker 28. Mär 2017 10:47

AW: GPStatus als string
 
Zitat:

Zitat von EWeiss (Beitrag 1365707)
Zitat:

Zitat von Ghostwalker (Beitrag 1365706)
Oder ohne RTTI:

Delphi-Quellcode:
Const
  cStatus : Array[TStatus] of String = (
   'Ok',
   'GenericError',
   'InvalidParameter'
  );
und dann einfach über:

Delphi-Quellcode:
cStatus[status]
darauf zugreifen.

Läuft unabhängig von der Delphi-Version und sauber internationalisiert werden :)

könnte ich machen..
Aber dann ändere ich die GDIP_API Unit.
Was bedeutet ich muss alle Funktionen die auf GPStatus zugreifen wieder ändern. Oder?

gruss

Nein...TStatus wird ja nicht geändert. Du definierst dir einfach eine typisierte Konstante mit den benötigten Strings. Du benutzt einfach den Status (TStatus) als Index auf dein Konstanten-Array. Drops gelutscht.

Sowas kann man dann z.B. einfach internationalisieren

Delphi-Quellcode:
_(cStatus[status]);
Hier mal mit der Gnugettext-Funktion.

oder in dem Fall das es das Funktionsergebnis ist

Delphi-Quellcode:
ShowMessage(_(cStatus[SaveToPng(...)]));
Du kannst das ganze auch über ordinale Werte handhaben (ord(SaveToPng) bzw. IntToStr(SaveToPing)). Wär aber etwas umständlich imho.

EWeiss 28. Mär 2017 11:06

AW: GPStatus als string
 
Zitat:

Nein...TStatus wird ja nicht geändert.
Ach so ja dann sollte es kein Problem sein.

Habe aber im Moment den ein Zeiler von Union genommen klappt ganz gut.
So muss ich nicht die API verändern.

Trotzdem Danke.

gruss

Zacherl 28. Mär 2017 11:20

AW: GPStatus als string
 
Zitat:

Zitat von EWeiss (Beitrag 1365745)
Habe aber im Moment den ein Zeiler von Union genommen klappt ganz gut.

Die andere (schönere) Lösung kannst du aber auch problemlos verwenden ohne die Unit mit der GDI+ API zu modifizieren. Deklarier das String-Array doch einfach in deiner eigenen Unit.

EWeiss 28. Mär 2017 12:34

AW: GPStatus als string
 
Zitat:

Zitat von Zacherl (Beitrag 1365747)
Zitat:

Zitat von EWeiss (Beitrag 1365745)
Habe aber im Moment den ein Zeiler von Union genommen klappt ganz gut.

Die andere (schönere) Lösung kannst du aber auch problemlos verwenden ohne die Unit mit der GDI+ API zu modifizieren. Deklarier das String-Array doch einfach in deiner eigenen Unit.

JO das wäre auch eine Möglichkeit ;)
Edit:
Habe es übernommen feine Sache..

Danke Uwe.

gruss


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