Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Ini-Einstellung umwandeln für Komponente (https://www.delphipraxis.net/167046-ini-einstellung-umwandeln-fuer-komponente.html)

Furtbichler 11. Mär 2012 12:48

AW: Ini-Einstellung umwandeln für Komponente
 
Zitat:

Zitat von Bummi (Beitrag 1155926)
wobei Sir Rufo's Ansatz mir hier am schlanksten erscheint ...

Nun ja, der eine schreibt eine Zeile, der andere eine Klasse. Der Eine schreibt nur eine Richtung (Enum=>String), der andere beide Richtungen. Klar, das es bei dem einen schlanker erscheint.

Noch schlanker geht es so:

Delphi-Quellcode:
//Schreiben
MyIni.WriteInteger ('COM','Parity',Ord(MyComport.Parity));

//Lesen
MyComPort.Parity := TParity(MyIni.ReadInteger ('COM','Parity',0));

Helmi 11. Mär 2012 12:59

AW: Ini-Einstellung umwandeln für Komponente
 
so würd ich aber nur den Index der Auswahl in der Ini-Datei haben
Ich möchte aber in der Ini-Datei angeben, z. B. Parity=Even und dann
im Code auf die Com-Komponente
Delphi-Quellcode:
Parity := paEven
schreiben

stahli 11. Mär 2012 13:06

AW: Ini-Einstellung umwandeln für Komponente
 
Warum willst Du denn nicht einfach
Delphi-Quellcode:
Parity=paEven
in Deine Ini schreiben und auf die ganze "Übersetzung" verzichten.
So macht es ja die IDE auch in ihren Formular-Dateien.

Bummi 11. Mär 2012 13:07

AW: Ini-Einstellung umwandeln für Komponente
 
@Furtbichler
wobei es dann nicht mehr bei allem lesbar ist und die RTTI-Variante näher dran wäre.
Delphi-Quellcode:
Function GetIndexOf(Const Find:String;a:Array of String;Highest:Integer;Default:Integer=0):Integer;
var
  I: Integer;
begin
   Result := Default;
   for I := 0 to Highest do
     if a[i] = Find then Result := i;
end;


 ps := TPrintScale(GetIndexOf('None',c,Ord(poPrintToFit),Ord(poProportional)));

Helmi 11. Mär 2012 13:13

AW: Ini-Einstellung umwandeln für Komponente
 
Zitat:

Zitat von Bummi (Beitrag 1155995)
Delphi-Quellcode:
Function GetIndexOf(Const Find:String;a:Array of String;Highest:Integer;Default:Integer=0):Integer;
var
  I: Integer;
begin
   Result := Default;
   for I := 0 to Highest do
     if a[i] = Find then Result := i;
end;


 ps := TPrintScale(GetIndexOf('None',c,Ord(poPrintToFit),Ord(poProportional)));

So mach ich es jetzt!

Zitat:

Zitat von stahli (Beitrag 1155994)
Warum willst Du denn nicht einfach
Delphi-Quellcode:
Parity=paEven
in Deine Ini schreiben und auf die ganze "Übersetzung" verzichten.
So macht es ja die IDE auch in ihren Formular-Dateien.

Und wie soll ich von deim String "paEven" den ich aus der Ini lese auf den Index von TVaParity kommen, z. B.?

himitsu 11. Mär 2012 13:20

AW: Ini-Einstellung umwandeln für Komponente
 
Zitat:

Zitat von Helmi (Beitrag 1155997)
Und wie soll ich von deim String "paEven" den ich aus der Ini lese auf den Index von TVaParity kommen, z. B.?

Delphi-Quellcode:
Const
  c:Array[TPrintScale] of String=('None', 'Proportional', 'PrintToFit') ;
Entweder du gehts dein Array durch und schaust wo sich der String versteckt.

Oder, wenn man den ENUM über die RTTI in einen String umgewandelt hat, dann wandelt man den String über die RTTI wieder in den Enum (Integer+Cast) zurück.

Helmi 11. Mär 2012 13:29

AW: Ini-Einstellung umwandeln für Komponente
 
Zitat:

Zitat von himitsu (Beitrag 1155999)
Zitat:

Zitat von Helmi (Beitrag 1155997)
Und wie soll ich von deim String "paEven" den ich aus der Ini lese auf den Index von TVaParity kommen, z. B.?

Delphi-Quellcode:
Const
  c:Array[TPrintScale] of String=('None', 'Proportional', 'PrintToFit') ;
Entweder du gehts dein Array durch und schaust wo sich der String versteckt.

Ich glaub ich hab ein Déjà-vu und zwar mit Post 8 dieses Threads.

Zitat:

Zitat von himitsu (Beitrag 1155999)
Oder, wenn man den ENUM über die RTTI in einen String umgewandelt hat, dann wandelt man den String über die RTTI wieder in den Enum (Integer+Cast) zurück.

Das klingt interessant - mal schauen wie das funktioniert...

Furtbichler 11. Mär 2012 13:30

AW: Ini-Einstellung umwandeln für Komponente
 
Zum Mitschreiben:
Delphi-Quellcode:
 
uses TypInfo;

MyCom.Parity := TParity(GetEnumValue(TypeInfo(TParity),myParityStringFromINI));
MyIni.WriteString('COM','Parity', GetEnumName(TypeInfo(TParity), Integer(MyCOM.Parity)) ;

stahli 11. Mär 2012 13:54

AW: Ini-Einstellung umwandeln für Komponente
 
Zitat:

Zitat von Helmi (Beitrag 1156003)
Das klingt interessant - mal schauen wie das funktioniert...

Genau wie Furtbichler es zeigt. :-)

Meine (aufwendigere) Methode funktioniert dagegen mit allen Enum-Objektpropertys und ermittelt den richtigen Typ dynamisch.
Wenn Du den Typ selbst kennst, ist es natürlich schneller und einfacher, den Typ direkt festzulegen.

Helmi 11. Mär 2012 14:18

AW: Ini-Einstellung umwandeln für Komponente
 
Zitat:

Zitat von Furtbichler (Beitrag 1156004)
Delphi-Quellcode:
 
uses TypInfo;

MyCom.Parity := TParity(GetEnumValue(TypeInfo(TParity),myParityStringFromINI));
MyIni.WriteString('COM','Parity', GetEnumName(TypeInfo(TParity), Integer(MyCOM.Parity)) ;

Dank dir!

Und Dank euch allen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 Uhr.
Seite 2 von 2     12   

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