Entwickler-Ecke

Dateizugriff - Font.style in INI speichern.. aber als was??


cugar - Do 22.01.04 12:41
Titel: Font.style in INI speichern.. aber als was??
Hallo Leute!
Habe mein Prog. so eingestellt das es manche Einstellungen in einer INI-Datei speichert, es funktioniert auch super gut,, nur bei Fonds habe ich ein Problem, weiß nicht wie ich die Font.Style abspeichern soll.. :idea:

Gruß
cugar


Chatfix - Do 22.01.04 13:19

Ich hab das Damals so gemacht:

Jeden Style als Boolean abspeichern.

Beim einlesen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
  if Font.Style - [fsUnderline, fsItalic, fsStrikeOut] = [fsBold] then
     Ini.WriteBool('...''Bold', True)
  else
    Ini.WriteBool('...''Bold', False);
  if Font.Style - [fsUnderline, fsBold, fsStrikeOut] = [fsItalic] then
     Ini.WriteBool('...''Italic', True)
  else
    Ini.WriteBool('...''Italic', False);
  if Font.Style - [fsBold, fsItalic, fsStrikeOut] = [fsUnderline] then
     Ini.WriteBool('...''Underline', True)
  else
    Ini.WriteBool('...''Underline', False);
  if Font.Style - [fsUnderline, fsItalic, fsBold] = [fsStrikeOut] then
     Ini.WriteBool('...''StrikeOut', True)
  else
    Ini.WriteBool('...''StrikeOut', False);


Beim rauslesen ganz einfach:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Font.Style := [];  //Font-Style zurücksetzen
if Ini.ReadBool('...''Bold', False) then
  Font.Style := Font.Style + [fsBold];
if Ini.ReadBool('...''Italic', False) then
  Font.Style := Font.Style + [fsItalic];
if Ini.ReadBool('...''Underline', False) then
  Font.Style := Font.Style + [fsUnderline];
if Ini.ReadBool('...''StrikeOut', False) then
  Font.Style := Font.Style + [fsStrikeOut];


Habs nich getestet habs aber so in erinnerung...
ich kann heute abend mal in dem quelltext nachguggn, dann kann ichs dir 100 pro sagen!

// EDIT: Die Methode unter mir ist sicherlich einfacher *gg* - Also das es so easy ist hätt ich net gedacht, man lernt nie aus^^


smiegel - Do 22.01.04 13:24

Hallo,

speichern geht wie folgt:


Delphi-Quelltext
1:
2:
3:
...
ini.WriteInteger('Font''Style', Integer(TFontStyle(Font.Style)));
...


Einlesen folgendermassen:

Delphi-Quelltext
1:
Font.Style:=TFontStyles(TFontStyle(ini.ReadInteger('Font''Style'0)));                    


cugar - Do 22.01.04 13:33
Titel: Super
Super!
Vielen Dank, werde ich gleich ausprobieren!

Gruß
cugar


MaxiTB - Do 22.01.04 14:52
Titel: ::cugar
Wenn du ganz wiff abspeichern willst, weil vielleicht jemand die INI Datei im nachhinein editieren sollte, empfehle ich eine Psydo-Set:


Quelltext
1:
2:
[Item019]
FontStyle=Italic,Bolt


Du mußt dann den ganzen String mit lString:=ReadString('Item019','FontStyle',''); auslesen und dann das Resultat auswerten.

Das Auswerten funktioniert ungefähr so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var 
 lIndex: integer;
 lHelp: string;
begin
 lIndex:=1;
 lHelp:=GetNextPara(lIndex,Para);
 while lHelp<>'' do
 begin
  if lHelp='Italic' then lFont.Style=fsItalic;
  ... // für alle Styles
  lHelp:=GetNextPara(lIndex,Para);
 end;
end;


Wobei die GetNextPara so aussieht:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function GetNextPara(var Index: integer; Value: string): string;
var
 lIndex: integer;
begin
 if Index>Length then begin Result:=false; exit; end;

 Result:=true;
 lIndex:=PosEx(',',Value,Index);
 if lIndex<1 then
 begin
  Result:=Copy(Value,Index,Length(Value));
  Index:=Length(Value)+1;
 end else begin
  Result:=Copy(Value,Index,lIndex-1);
  Index:=lIndex+2;
 end;
end;


Das reinschreiben dagegen ist echt simple:


Delphi-Quelltext
1:
2:
3:
4:
5:
lHelp:='';
if lFont.Style=fsItalic then lHelp:=lHelp+'Italic,';
... // für alle Styles
if lHelp<>'' then lHelp:=Copy(lHelp,1,Length(lHelp)-1);
lIni.WriteString('Item019','FontStyle',lHelp);


Sodale - den Code hab ich nur mal schnell runtergetippt - kann also noch Fehler haben (sogar ziemlich sicher); desweiteren natürlich nicht vollständig und sicher auch mit ein bisserl nachdenken sauberer zu implementieren. Aber kannst ja dran rumbasteln :wink: .

:arrow: Wie gesagt, das ganze zahlt sich natürlich nur aus, wenn du willst, daß jemand an der Ini-Datei direkt Werte ändern soll können - da ist natürlich so eine Sache wesentlich eleganter und wirkt professioneller :lol: .


smiegel - Do 22.01.04 15:14

Hallo,

@MaxiTB: Die Frage wurde doch schon ausreichend beantwortet, da frage ich mich, was Dein Posting soll??
MaxiTB hat folgendes geschrieben:

... schnell runtergetippt - kann also noch Fehler haben (sogar ziemlich sicher); desweiteren natürlich nicht vollständig ...

Auf so eine Hilfe könnte ich verzichten!! Sie bringt absolut nichts. Ausser Deinem Ego vielleicht...


MaxiTB - Do 22.01.04 15:22
Titel: ::smiegel
Ich finde es wohl ein Unterschied, ob erstens sechs oder nur eine Zeile in einer Ini-Datei stehen (weil die man ja normalerweise wünscht extern zu editieren). Wenn du den Unterschied zwischen den den Methoden nicht erkennst, dann solltest du nochmals mein post lesen.

Zweitens glaube ich nicht, daß es Sinn eines Forums ist 100%ig funktionierenden Code zu schreiben oder keine Rechtschreibfehler zu tippen. Für sowas hat man eine Sekräterin; hier gehts wohl eher um Algorithmen und Lösungen. Das ich nicht einen perfekten Einmillionenzeiler schreibe, liegt daran, daß ich auch noch Steuern verdienen muß.

Drittens wenn ich mein Ego aufpolieren will, dann warte ich bis Monatsanfang auf meinen Lohnzettel. Hat allerdings den Nachteil, daß er auch ärgerlich ist, wenn ich wieder die Steuerabschläge sehe.

PS: Ich denke mal, daß Thema ist erledigt, weil dein post ist auch nicht wirklich passend zum Thema.


Chatfix - Do 22.01.04 15:39

Nicht streiten...

Zum Editieren ist die Methode von mir oder Max wirklich besser.
Nicht jeder will aber das die ini editiert wird, dann würde sich smiegels variante anbieten.

Ich finde auch wenn eine Frage beantwortet ist, ist es sinnvoll andere vorschläge zu hören (lesen...).