[Delphi] Schriftstil aus INI-Datei verarbeiten

Dalai

Grand Admiral Special
Mitglied seit
14.06.2004
Beiträge
7.420
Renomée
262
Standort
Meiningen, Thüringen
Hey Leute,

brauche mal wieder n Tip bzw. Hilfe bei der Programmierung.

Ich habe ein Programm, das beim Starten Werte aus einer INI-Datei einliest. Mit den meisten Sachen wie Schriftart, Schriftgröße etc. funktioniert das schon ganz prächtig.
Jetzt habe ich aber ein Problem mit dem Schriftstil:
Ich möchte, dass in der INI-Datei ein Wert FontStyle existiert, der die Summe aus Fett (1), Kursiv (2) und Unterstrichen (4) sein kann, also maximal 7.
Klar ist, dass dabei in binärer Umrechnung jeweils die Bits ein- oder ausgeschaltet werden.

Nun zur Frage: Wie und wo speichere ich den Schriftstil? In einem Feld? Der Schriftstil wird ja im Delphi durch ein set of TFontStyle repräsentiert. Wenn ich nun ein array of set of TFontStyles mache, habe ich das Problem, dass jedes Feldelement das gesamte set beinhaltet. Ich will aber, dass jedes Feldelement nur ein Element aus der Menge enthält.

Hier mal ein Auszug von dem, was ich bisher habe:
Code:
const FontFeld : array[1..3] of TFontStyles = ([], [], []);

var s: string;
     i: integer;

s:= IntToBin(fiAppIniFile.ReadInteger('Font', 'Style', 0));
[b]//das IntToBin wandelt den Integer-Wert in einen binären String um, also z.B. 010[/b]
      MainLabel.Font.Style:= [];
      for i:= 1 to Length(s) do
//wenn das Bit gesetzt ist, dann soll der Zielmenge ein Wert aus der Quellmenge hinzugefügt werden.
        if s[i]='1' then
          MainLabel.Font.Style:= MainLabel.Font.Style + FontFeld[i];
Ich weiß, dass man das auch mit "Teilen durch 2 und prüfen, ob der Rest 1 ist" machen kann. Das ist aber nicht das Problem.

Habe ich evtl. den falschen Denkansatz?
Wie machen das andere Programme, z.B. Total Commander mit bestimmten INI-Optionen oder AutoIt mit der Funktion MsgBox, der man verschiedene Einstellungen übergeben kann?


Ich danke schonmal im Voraus für Ideen, Anregungen und Hilfe.

MfG Dalai


EDIT: Ich weiß, dass es mit 3 if-Abfragen geht, also
Code:
if s[Length(s)]='1' then
MainLabel.Font.Style:= MainLabel.Font.Style + [fsBold];
if s[Length(s)-1]='1' then
MainLabel.Font.Style:= MainLabel.Font.Style + [fsItalic];

Aber, was ist, wenn ich morgen einen Eintrag in der INI haben will, der 10 Attribute beinhalten können soll? 10 if-Abfragen, oder wie? Es geht mir also um eine Code-Optimierung-/Verkürzung.
 
Zuletzt bearbeitet:
Zurück
Oben Unten