AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Codezeile in Funktion umwandeln mit Schwierigkeiten
Thema durchsuchen
Ansicht
Themen-Optionen

Codezeile in Funktion umwandeln mit Schwierigkeiten

Ein Thema von a.def · begonnen am 16. Apr 2017 · letzter Beitrag vom 16. Apr 2017
 
a.def
(Gast)

n/a Beiträge
 
#3

AW: Codezeile in Funktion umwandeln mit Schwierigkeiten

  Alt 16. Apr 2017, 10:49
Soweit war ich tatsächlich noch nicht. Aber mit dem ReadFromIni<T> hatte ich dann ja wohl schon recht.
Nur habe ich es wieder gelöscht, da der Editor es rot unterstreicht, obwohl Generics.Collections in der Uses-Klausel steht.

Edit
Fehlerquelle gefunden. Ich wusste nicht, dass solche Funktionen und Prozeduren eine Deklaration im Unit-Kopf verlangen.

Mein Resultat in meiner eigenen ini-Klasse
Delphi-Quellcode:
type
 TMemIniFile = class(IniFiles.TMemIniFile)
 ...
 function ReadEnum<T>(const Section: string; const Ident: TIniSettings; const Default: T): T;
 procedure WriteEnum<T>(const Section: string; const Ident: TIniSettings; Value: T);
 ...

function TMemIniFile.ReadEnum<T>(const Section: string; const Ident: TIniSettings; const Default: T): T;
begin
 Result := TEnumFunctions.GetValue<T>(ReadString(Section, TEnumFunctions.GetName(Ident), TEnumFunctions.GetName<T>(Default)));
end;

procedure TMemIniFile.WriteEnum<T>(const Section: string; const Ident: TIniSettings; Value: T);
begin
 WriteString(Section, TEnumFunctions.GetName(Ident), TEnumFunctions.GetName<T>(Value));
end;
TEnumFunctions
Delphi-Quellcode:
type
 TEnumFunctions = record
  ...
  class function GetName<T>(AValue: T): string; static;
  class function GetValue<T>(AValue: string): T; static;
  ...

class function TEnumFunctions.GetName<T>(AValue: T): string;
begin
 Result := System.Rtti.TRttiEnumerationType.GetName(AValue);
end;

class function TEnumFunctions.GetValue<T>(AValue: string): T;
var
 Temp: Integer;
 PTemp: Pointer;
begin
 Temp := GetEnumValue(TypeInfo(T), AValue);
 if Temp < 0 then
  Temp := 0; // gebe 0 statt 255 zurück im Falle, dass AValue nicht existiert
 PTemp := @Temp;
 Result := T(PTemp^);

 // Result := System.Rtti.TRttiEnumerationType.GetValue<T>(AValue);
end;

Geändert von a.def (16. Apr 2017 um 13:49 Uhr)
  Mit Zitat antworten Zitat
 


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 16:32 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