Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Styls in ini oder änlich speichern? (https://www.delphipraxis.net/115929-styls-ini-oder-aenlich-speichern.html)

dUSER.th 20. Jun 2008 00:37


Styls in ini oder änlich speichern?
 
Hallo zusammen

ich habe da ein vermutlich kleines Problem wobei ich allerdings im Forum noch keine mögliche Antwort gefunden habe.

im oder auf einem Formular habe ich ein Panel "Panel1"
und möchte zur Laufzeit die Eigenschaften vom besagtem Panel in eine *.Ini oder ähnlicher Datei speichern.

>> Procedure:

procedure TForm1.FontDialog1Apply(Sender: TObject; Wnd: HWND);
begin
{Vorschau}
Panel1.Font.Name:= TFontDialog(Sender).Font.Name;
Panel1.Font.Size:= TFontDialog(Sender).Font.Size;
Panel1.Font.Color:= TFontDialog(Sender).Font.Color;
Panel1.Font.Style:= TFontDialog(Sender).Font.Style;
{Speichern}
Ini:= TIniFile.Create(GetApplicationDirectory + Form1.dPIX +'.css');
try
Ini.WriteString('Panel','Panel1FontName',Panel2.Fo nt.Name);
Ini.WriteInteger('Panel','Panel1FontSize',Panel2.F ont.Size);
Ini.WriteInteger('Panel','Panel1FontColor',Panel2. Font.Color);

//an dieser Stelle komme ich nicht weiter

Ini.____???_____('Panel','Panel1FontStyle',Panel2. Font.Style);

finally
ini.Free;
end;
end;

könnte mir jemand zu diesem Problem eine Unterstützung geben.
vielen Dank im vorraus

Detlef

ps: muss die Frage als offen markiert werden?

marabu 20. Jun 2008 05:39

Re: Styls in ini oder änlich speichern?
 
Herzlich willkommen in der Delphi-PRAXiS, Detlef.

Vielleicht findest du in diesem Thread ein paar Lösungsansätze für dein Problem: Font-Attribute in INI-Datei speichern

Deinen Quellcode kannst du übrigens besser über den Delphi-Button im Beitragseditor kennzeichnen - einfach deinen Code markieren und den Button drücken wäre ein möglicher Weg.

Freundliche Grüße

WIng2005 20. Jun 2008 05:43

Re: Styls in ini oder änlich speichern?
 
Hallo und Herzlich Willkomen,

vielleicht hilft dir das hier weiter:


Delphi-Quellcode:
Ini.Writebool('Panel','Panel1FontColor',panel1.Font.Style=[fsbold]);
Falls du die Werte auch wieder auslesen möchtest, kannst du die Eigenschaften wieder mit

Delphi-Quellcode:
panel1.Font.Style:=panel1.Font.Style+[fsbold];
setzen.

MFG
Steffen

Muetze1 20. Jun 2008 09:00

Re: Styls in ini oder änlich speichern?
 
Das würde ihm nicht weiterhelfen, wenn du mehr als ein Attribut gesetzt hast. Also eine fette und kursive Schrift würde mit deiner Lösung nicht abgespeichert werden.

Es ist eine Menge, somit ist kein Mitglied dieser Menge exklusiv darin enthalten. Siehe Delphi-Referenz durchsuchenin Operator, Delphi-Referenz durchsuchenInclude und Delphi-Referenz durchsuchenExclude

dUSER.th 20. Jun 2008 10:47

Re: Styls in ini oder änlich speichern?
 
Hallo zusammen,

vielen Dank für die Anregungen. Ich habe mir das Beste aus den Bsp. Rausgepickt
und meine Lösung mal hier eingebracht. Ist möglicherweise nicht die beste aber es
Funktioniert so weit.


procedure TForm1.FontDialog1Apply(Sender: TObject; Wnd: HWND);
begin
Panel2.Font.Name:= TFontDialog(Sender).Font.Name;
Panel2.Font.Size:= TFontDialog(Sender).Font.Size;
Panel2.Font.Color:= TFontDialog(Sender).Font.Color;
Panel2.Font.Style:= TFontDialog(Sender).Font.Style;
Ini:= TIniFile.Create(GetApplicationDirectory + Form1.dPIX +'.css');
try
Ini.WriteString('Panel','Panel2FontName',Panel2.Fo nt.Name);
Ini.WriteInteger('Panel','Panel2FontSize',Panel2.F ont.Size);
Ini.WriteInteger('Panel','Panel2FontColor',Panel2. Font.Color);
if (fsBold in TFontDialog(Sender).Font.Style)
then Ini.WriteBool('Panel','Panel2FontBold',True)
else Ini.WriteBool('Panel','Panel2FontBold',False);
if (fsItalic in TFontDialog(Sender).Font.Style)
then Ini.WriteBool('Panel','Panel2Italic',True)
else Ini.WriteBool('Panel','Panel2Italic',False);

finally
ini.Free;
end;

end;

Ausgelesen aus *.Ini ist ähnlich
...
for i:= 1 to 25 do begin
STE := TComponent(FindComponent('Panel' + IntToStr(i)));
Z := STE.ComponentIndex;
TPanel(Components[Z]).Height:= Ini.ReadInteger('Panel', dTEXT +'Height' ,0);
TPanel(Components[Z]).Width := Ini.ReadInteger('Panel', dTEXT +'Width' ,0);
TPanel(Components[Z]).Top := Ini.ReadInteger('Panel', dTEXT +'Top' ,0);
TPanel(Components[Z]).Color := Ini.ReadInteger('Panel', dTEXT +'Color' ,0);
TPanel(Components[Z]).Font.Size := Ini.ReadInteger('Panel', dTEXT +'FontSize' ,0);
TPanel(Components[Z]).Font.Color:= Ini.ReadInteger('Panel', dTEXT +'FontColor' ,0);
TPanel(Components[Z]).Font.Name := Ini.ReadString('Panel', dTEXT +'FontName' ,'');
TPanel(Components[Z]).Caption := Ini.ReadString('Texte', dTEXT ,'');
TPanel(Components[Z]).Font.Style:= [];
if Ini.ReadBool('Panel', dTEXT +'FontBold' ,False) = true
then TPanel(Components[Z]).Font.Style:= TPanel(Components[Z]).Font.Style + [fsBold]
else TPanel(Components[Z]).Font.Style:= TPanel(Components[Z]).Font.Style;
if Ini.ReadBool('Panel', dTEXT +'FontItalic' ,False) = true
then TPanel(Components[Z]).Font.Style:= TPanel(Components[Z]).Font.Style + [fsItalic]
else TPanel(Components[Z]).Font.Style:= TPanel(Components[Z]).Font.Style;
end;
...

Ich weis nicht, aber es gibt bestimmt auch noch schönere oder bessere Möglichkeiten.
Aber ich komme erst mal so weiter.

Ps: Das mit dem Code einfügen Funktioniert bei mir wohl nicht, deshalb habe ich
das Manuel gemacht. Sieht schon etwas Blöd aus.

Also vielen Dank Euch allen.
Gruß Detlef

toms 20. Jun 2008 10:58

Re: Styls in ini oder änlich speichern?
 
Zitat:

Zitat von dUSER.th

Ps: Das mit dem Code einfügen Funktioniert bei mir wohl nicht, deshalb habe ich
das Manuel gemacht. Sieht schon etwas Blöd aus.

Wie hast du es denn gemacht?

dUSER.th 20. Jun 2008 12:15

Re: Styls in ini oder änlich speichern?
 
Im Delphi den gewünschten Code markiert und den Button "Delphi-Code" geklickt.

jottkaerr 20. Jun 2008 12:15

Re: Styls in ini oder änlich speichern?
 
Statt

Delphi-Quellcode:
if (fsBold in TFontDialog(Sender).Font.Style)
then Ini.WriteBool('Panel','Panel2FontBold',True)
else Ini.WriteBool('Panel','Panel2FontBold',False);
kannst Du auch kürzer (und IMHO übersichtlicher)

Delphi-Quellcode:
Ini.WriteBool('Panel', 'Panel2FontBold', fsBold in TFontDialog(Sender).Font.Style);
schreiben.

jkr

Muetze1 20. Jun 2008 12:18

Re: Styls in ini oder änlich speichern?
 
Hallo dUSER.th!

Ein paar Anmerkungen zu deinem Code:

1. Bitte benutze die Tags. Danke!
2. Du speicherst nur Italic und Bold ab - aber was ist mit den anderen möglichen Typen?
3. Du vergleichst beim Auslesen auf true, das ist eine große Gefahrenquelle und ich empfehle dir diesen Vergleich so umzustellen, dass du den Vergleich auf true einfach weglässt. IF Bedingungen evaluieren immer auf true.
4. Du kannst den Schreibcode vereinfachen, da der In Operator automatisch ein boolsches Ergebnis der Abfrage liefert, kannst du diesen direkt in dem WriteBoolean() angeben beim Aufruf.

Blackheart 20. Jun 2008 12:33

Re: Styls in ini oder änlich speichern?
 
Du kannst das auch einfacher über Integer rausbekommen zb.
Delphi-Quellcode:
Caption:=IntToStr(integer(TFontStyle(Panel1.Font.style)));

dUSER.th 20. Jun 2008 12:35

Re: Styls in ini oder änlich speichern?
 
Hallo zusammen

@Jürgen
habe den Code geändert und sieht auch eleganter aus.
Mann mus sich halt nur mal darüber Unterhalten.

[code]

@Thomas
ich brauche nur die 2 Komponenten. Das reicht mir fürs erste.

@Blackheart
ich habe das mal getestet. Habe festgestellt, das nur ein wert in Caption ('3') steht
obwohl aber in der Font.Style =[fsBold..fsItalic] steht.

So nun habe ich den Code in Delphi markiert und den Button "Code" (Unformatierter Quellcode:
Code:
source-code
) gewählt.
In der Vorschau sehe ich noch nichts. naja ob das mal gut geht...

Detlef

Blackheart 20. Jun 2008 12:51

Re: Styls in ini oder änlich speichern?
 
Auch mal die anderen durchprobiert 0 normal 1 italic ... :wink:

dUSER.th 20. Jun 2008 13:16

Re: Styls in ini oder änlich speichern?
 
hallo Blackheart

wenn in Font.Style nur =[fsItalic] steht, dann wert in Caption ('2') steht
wenn in Font.Style nur =[] steht, dann wert in Caption ('0') steht

Detlef

Muetze1 20. Jun 2008 13:23

Re: Styls in ini oder änlich speichern?
 
dUSER.th eine Menge wird als Bitfeld dargestellt. Jeder Member der Menge wird durch ein Bit dargestellt. Dadurch wird die Kombination möglich und ist abfrage der Mengengleichheit auf einzelne Member unsinnig. Auch sollte hier nun die Regelmässigkeit auffallen, welche nun schon von dir gefunden wurde:

fsBold = Bit 0 = Wertigkeit 1
fsItalic = Bit 1 = Wertigkeit 2

leere Menge = 0
[fsBold] = 1
[fsItalic] = 2
[fsBold, fsItalic] = 3

Alle weiteren TFontStyle Mitglieder der Aufzählung erhalten dann auch eine entsprechende Bitzuordnung.


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