![]() |
Programm-Optionen
Hi
Ich bin ein Programm am schreiben bei dem man verschiedene Optionen ändern kann. Dieses Optionen-Fenster ist eine 2.Form die durch einen Klick auf einen Button auf "show" gesetzt wird. Ich will z.B. die Schriftgröße, Farbe und Art von einem Memo ändern, (dass sich auf Form 1 befindet) und Sachen die das Programm betreffen. Änderungen müssten dann in einer Datei gespeichert werden die autom. beim Programmstart ausgelesen wird und die vorhin geänderten Einstellungen übernimmt. Wie stelle ich denn das am klügsten an? und noch was: wenn ich das optionenfeld verlasse mit welchem Befehl soll ich die Form 2 dann unsichtbar bzw. verschwinden lassen? Mit "Hide", "close" oder was? :? Gruß MITTERNACHTSFALKE |
Re: Programm-Optionen
Moin!
Guck dir mal in der Hilfe TIniFile an. Das eignet sich bestens zum Speichern von Einstellungen. Dein 2. Form kannst du entweder mit Close schließen oder mit Hide unsichtbar machen. MfG Niels :thuimb: |
Re: Programm-Optionen
Danke ich schau mal was sich machen lässt
vielleicht komme ich wegen einer Frage noch mal hierzu zurück :wink: |
Re: Programm-Optionen
Ok jetzt hab ich es geschafft, dass Einstellungen von Edits
übernommen werden können (also Strings, und auch Integers); Wie schaff ich es denn jetzt, Farbeinstellungen zu Übergeben weil TColordialog und String, das gab einen Fehler? :?: Kann es sein dass Programme so ganz leicht manipulierbar sind indem man die INI-Datei ändert? 'FALKE |
Re: Programm-Optionen
Hi!
Ja es stimmt schon, dass man Programmeinstellungen, die in einer Ini gespeichert sind, relativ einfach verändern kann, da sie ja in "Reinform" gespeichert werden. Dies ist aber nur bedingt dramatisch, weil es ja eigentlich nichts ausmacht, wenn jemand da ne eingestellte Schriftart z.B.verändert? Oder was willst du darin speichern? Ciao fkerber |
Re: Programm-Optionen
Nur so am Rande, weil rkerber grade fragt, was du da reinspeichern willst: Bitte keine unverschlüsselten Passwörter! :wink:
Eine Farbe (TColor) könntest du übrigens mit ColorToString(clwhite) in einen String umwandeln und anschließend in der INI speichern. Man liest sich, Stanlay :hi: |
Re: Programm-Optionen
Hi!
[OT] Nett, dass ich schon bis auf einen _ mit nem Moderator gleichgesetzt werde, aber eigentlich heiße ich ja fkerber. [/OT] Ciao fkerber |
Re: Programm-Optionen
@ Stanlay Hanks
ColortoString werd ich mal versuchen. Danke. @ fkerber Ne ich wollte nur Schrifteinstellungen speichern und vielleicht noch ob ne checkbox checked oder nicht checked ist. Aber theoretisch, je nach dem was man in der INI-Datei speichert könnte man die Datei so verändern dass das Programm nicht mehr startet. 'FALKE |
Re: Programm-Optionen
Kann man Color nicht einfach als Integer speichern?
|
Re: Programm-Optionen
Zitat:
Und auch bei Werten für ne CheckBox mußt du nicht genau auf 1 und 0 abfragen, sondern einfach auf 1 und andernfalls. Zitat:
|
Re: Programm-Optionen
Wenn dir das alles noch zu unsicher ist, was du nochmal erklären könntest,
dann kannst du deine Datei ja im Nachhinein noch verschlüsseln, siehe hier: ![]() ![]() P.S.: Weil du dir solche Gedanken um mögliche Änderungen machst, was passiert, wenn deine INI gelöscht wird? Ich denke auch dafür muß es eine Lösung geben, die eben genau auf Default-Werte hinausläuft. Czapie. |
Re: Programm-Optionen
Also ich würde die Sachen in der Registry speichern
Delphi-Quellcode:
Zum schreiben
uses
Registry;
Delphi-Quellcode:
Zum lesen
with TRegistry.Create do
begin RootKey:=HKEY_LOCAL_MACHINE; OpenKey('SOFTWARE\'+ProgrammName,true); WriteBool('TRAY',Checkbox1.Checked); end;
Delphi-Quellcode:
with TRegistry.Create do
begin RootKey:=HKEY_LOCAL_MACHINE; OpenKey('SOFTWARE\'+ProgrammName,true); if ValueExists('TRAY')then if ReadBool('TRAY')then begin Checkbox1.Checked:=true; end; end; |
Re: Programm-Optionen
@ SleepyMaster: Und was soll das für einen Vorteil gegenüber Ini's haben? Ini's mögen zwar in manchen Augen veraltet sein, doch es gibt ja wohl nichts schlimmeres als Registryeinträge die beim Löschen vergessen wurden und alles zu müllen. Dann lieber ne Ini im Programmverzeichnis.
|
Re: Programm-Optionen
Zitat:
verwende ich grundsätzlich Ini's. Niemals die Registry Ausnahme: Einstellungen die anwendungsübergreifend verwendet werden. |
Re: Programm-Optionen
Hallo,
dem Objekt TInifile fehlen leider die Methoden ReadFont und WriteFont. Das lässt sich Dank OOP aber leicht ändern.
Delphi-Quellcode:
Diese unit verwende ich schon seit D1
unit Inifile2;
interface uses IniFiles, Graphics, Classes, StdCtrls; Type TIniFileExt = Class(TIniFile) procedure WriteFont(Const Section, Ident: String; Value: TFont); function ReadFont(Const Section, Ident: String; default: TFont): TFont; end; implementation uses SysUtils, Consts; procedure TIniFileExt.WriteFont(Const Section, Ident: String; Value: TFont); var Str :String; v :char; Begin V:=' '; Str := ''; Str := Value.Name + ','; Str := Str + ColorToString(Value.Color) + ','; Str := Str + IntToStr(Value.Size) + ','; Case Value.Pitch of fpdefault : v :='d'; fpvariable : v :='v'; fpfixed : v :='f'; end; Str:= Str + v + ','; if fsBold in Value.Style then Str:=Str + 'b'; if fsItalic in Value.Style then Str:=Str + 'i'; if fsUnderline in Value.Style then Str:=Str + 'u'; if fsStrikeOut in Value.Style then Str:=Str +'s'; WriteString(Section,Ident,Str); end; function TIniFileExt.ReadFont(Const Section, Ident: String; default: TFont): TFont; var FFont : TFont; Str,sc : String; I : byte; Begin Str := ReadString(Section,Ident,''); ReadFont := default; I := Pos(',',Str); if i = 0 then exit; FFont := TFont.Create; FFont.Name := Copy(Str,1,i-1); Delete(Str,1,i); i:=Pos(',',Str); if i = 0 then exit; try FFont.Color:= StringtoColor(Copy(Str,1,(i-1))); except FFont.Free; exit; end; Delete(Str,1,i); i:=Pos(',',Str); if i = 0 then exit; try FFont.Size:= StrToInt(Copy(Str,1,(i-1))); except FFont.Free; exit; end; Delete(Str,1,i); i:=Pos(',',Str); if i = 0 then begin FFont.Free; exit; end; sc:=Copy(Str,1,(i-1)); if sc = 'd' then FFont.pitch := fpdefault; if sc = 'v' then FFont.pitch := fpvariable; if sc = 'f' then FFont.pitch := fpfixed; Delete(Str,1,i); FFont.Style:=[]; While byte(Length(Str)) > 0 do Begin Case Str[1] of 'b': FFont.Style := FFont.Style + [fsbold]; 'i': FFont.Style := FFont.Style + [fsitalic]; 'u': FFont.Style := FFont.Style + [fsUnderline]; 's': FFont.Style := FFont.Style + [fsStrikeout]; end; Delete(Str,1,1); end; ReadFont.Assign(FFont); FFont.Free; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 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