Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Einstellungen speichern/laden (https://www.delphipraxis.net/62567-einstellungen-speichern-laden.html)

Knotti2005 6. Feb 2006 16:15


Einstellungen speichern/laden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute ich möchte gerne die getätigten Einstellungen welche ich in meinen Programm gemacht habe speichern und beim Laden wieder ausführen...

Ich hänge mein Programm mal an...

Es geht hauptsächlich darum:

1. Welcher HotKey zugewiesen wurde (JvHotKey1, + Button1 zum setzten)
2. Welches Tapi gerät ausgewählt wurde (groupbox1)
3. Ob Tapi Aktiviert wurde.. (checkbox1)


Wir mach ich das ich hab mir schon bei dsdt.de die Ini Sache angeschaut...

pacman1986 6. Feb 2006 16:17

Re: Einstellungen speichern/laden
 
dann benutz doch die inis :)

Die Muhkuh 6. Feb 2006 16:18

Re: Einstellungen speichern/laden
 
Hi,

Hier im Forum suchendpCollection dpCollectiondpCollection

Knotti2005 6. Feb 2006 16:27

Re: Einstellungen speichern/laden
 
Die Ini-Sache ist zwar ganz schön aber für einen Anfänger wie mich sehr kompliziert...

pacman1986 6. Feb 2006 16:32

Re: Einstellungen speichern/laden
 
Delphi-Quellcode:
uses ...,inifiles;

var ini : Tinifile;

procedure ....
begin
    ini := Tinifile.Create(ExtractFilePath(Application.Exename)+'Einstellungen\Einstellungen.dat');
      ini.WriteString('tapi','aktiviert','Ja/nein');
    ini.Free;
end;


procedure ....
var aha :string;
begin
    ini := Tinifile.Create(ExtractFilePath(Application.Exename)+'Einstellungen\Einstellungen.dat');
      aha := ini.ReadString('tapi','aktiviert','');
    ini.Free;

   if aha = 'Ja' then aktiviert:=true;
end;

Knotti2005 6. Feb 2006 16:46

Re: Einstellungen speichern/laden
 
So hier? Für die Checkbox?..

Delphi-Quellcode:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
var
   s: string;
begin
    if form1.CheckBox1.Checked = true then
    begin
    s:= 'yes';
    end
    else
    begin
    s:= 'false';
    end;
    ini := Tinifile.Create(ExtractFilePath(Application.Exename)+'Einstellungen.dat');
      ini.WriteString('tapi','aktiviert',s);
    ini.Free;
end;

Thorben77 6. Feb 2006 16:54

Re: Einstellungen speichern/laden
 
Das geht auch einfacher :wink: :
Delphi-Quellcode:
procedure SaveToIni;
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create(ExtractFilePath(Application.Exename)+'Einstellungen.dat');
  try
    Ini.WriteBool('TAPI', 'Aktiviert', CheckBoxXYZ.Checked);
  finally
    Ini.Free;
  end;
end;
Am besten packst Du das ganze in einen try-finally-Block, damit die Ini auf jeden Fall freigegeben wird, auch wenn beim Schreiben in die Datei ein Fehler auftritt.

MfG

marabu 6. Feb 2006 17:21

Re: Einstellungen speichern/laden
 
Warum muss der SettingsDialog unbedingt wissen, wie er seine Zustände persistent machen kann? Besser ist, man kapselt die Einstellungen und greift über properties auf sie zu. Ein wenig Code - nur um das Prinzip zu verdeutlichen:

Delphi-Quellcode:
unit Config;

interface

uses
  Classes,
  IniFiles;

resourcestring
  GENERAL_SECTION = 'General';
  SHORTCUT_KEY = 'ShortCut';
  DEVICEINDEX_KEY = 'DeviceIndex';
  ACTIVE_KEY = 'Active';

type
  TSettings = class(TMemIniFile)
  private
    function GetShortCut: TShortCut;
    procedure SetShortCut(ShortCut: TShortCut);
    function GetDeviceIndex: Integer;
    procedure SetDeviceIndex(DeviceIndex: Integer);
    function GetActive: Boolean;
    procedure SetActive(Active: Boolean);
  public
    property ShortCut: TShortCut read GetShortCut write SetShortCut;
    property DeviceIndex: Integer read GetDeviceIndex write SetDeviceIndex;
    property Active: Boolean read GetActive write SetActive;
  end;

implementation

uses
  Menus;

function TSettings.GetShortCut: TShortCut;
begin
  Result := TextToShortCut(ReadString(GENERAL_SECTION, SHORTCUT_KEY, ''));
end;

procedure TSettings.SetShortCut(ShortCut: TShortCut);
begin
  WriteString(GENERAL_SECTION, SHORTCUT_KEY, ShortCutToText(ShortCut));
end;

function TSettings.GetDeviceIndex: Integer;
begin
  Result := ReadInteger(GENERAL_SECTION, DEVICEINDEX_KEY, -1);
end;

procedure TSettings.SetDeviceIndex(DeviceIndex: Integer);
begin
  WriteInteger(GENERAL_SECTION, DEVICEINDEX_KEY, DeviceIndex);
end;

function TSettings.GetActive: Boolean;
begin
  Result := ReadBool(GENERAL_SECTION, ACTIVE_KEY, false);
end;

procedure TSettings.SetActive(Active: Boolean);
begin
  WriteBool(GENERAL_SECTION, ACTIVE_KEY, Active);
end;

end.
Freundliche Grüße vom marabu

Knotti2005 6. Feb 2006 17:23

Re: Einstellungen speichern/laden
 
Erstma vielen Dank f+r eure Ideen aber wie ich schon gesagt habe ich bin noch Anfänger und es muss nicht allzu kompliziert sein...

:roll: :oops:

zer00 6. Feb 2006 17:27

Re: Einstellungen speichern/laden
 
Wieso Speicherst Du die Einstellungen nicht in der Registry, ini-Files sind IMHO so was von lästig für die Anwender.

grz zer00

Knotti2005 6. Feb 2006 17:41

Re: Einstellungen speichern/laden
 
Weil ich auf dem System keine Rückstände hinterlassen will

Komisch speichern geht nur laden nicht...
Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var d :string;
begin
    ini := Tinifile.Create(ExtractFilePath(Application.Exename)+'Einstellungen.dat');
      ini.ReadString('tapi','aktiviert',d);

   if d = 'yes' then form1.CheckBox2.Checked:=true;
   if d = 'false' then form1.CheckBox2.Checked:=false;
       ini.Free;

marabu 6. Feb 2006 17:44

Re: Einstellungen speichern/laden
 
Die Methode ReadString() ist eine Funktion - was machst du denn mit dem Rückgabewert?

marabu

Knotti2005 6. Feb 2006 17:49

Re: Einstellungen speichern/laden
 
naja die Variable d auslesen oder????

Knotti2005 6. Feb 2006 18:03

Re: Einstellungen speichern/laden
 
Was mach ich falsch? Helft mir!!!

Wenn ich es so probiere stürzt die Anwendung komplett ab..

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var a :string;
begin
    ini := Tinifile.Create(ExtractFilePath(Application.Exename)+'Einstellungen.ini');
      a := ini.ReadString('tapi','aktiviert','');
    ini.Free;

   if a = 'yes' then form1.CheckBox2.Enabled:=true
   else
   form1.CheckBox2.Enabled:=falsE;
   end;
end.

PierreB 6. Feb 2006 18:06

Re: Einstellungen speichern/laden
 
Zitat:

Zitat von zer00
Wieso Speicherst Du die Einstellungen nicht in der Registry, ini-Files sind IMHO so was von lästig für die Anwender.

Und ich als Anwender möchte nicht das mein System mit Daten von einem Programm zugemüllt wird, dass ich vielleicht 2mal im Jahr benutze.

Luckie 6. Feb 2006 18:11

Re: Einstellungen speichern/laden
 
Die Diskussion pro - contra Registry oder Dateien gehört nicht hier her. Er hat sich nun mal für Dateien entschieden. Und jeden Recht machen kann man es eben nicht.

NormanNG 6. Feb 2006 18:12

Re: Einstellungen speichern/laden
 
Hi,

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var INI:tIniFile;
begin
  Ini := Tinifile.Create(ExtractFilePath(Application.Exename)+'Einstellungen.ini');
  try
    Form1.CheckBox2.Enabled := (ini.ReadString('tapi','aktiviert','yes')='yes');      
  finally
    Ini.Free;
  end;
end.
Aber Vorsicht: Form1 muss zu diesem Zeitpunkt bereits vorhanden sein! Besser ist es sicher, die Einstellungen unabhaengig vom Dialog einzulesen. Vgl. Antwort von marabu!

zer00 6. Feb 2006 18:35

Re: Einstellungen speichern/laden
 
Zitat:

Zitat von Luckie
Die Diskussion pro - contra Registry oder Dateien gehört nicht hier her. Er hat sich nun mal für Dateien entschieden. Und jeden Recht machen kann man es eben nicht.

Ok, akzeptiert.

grz zer00

pacman1986 6. Feb 2006 18:42

Re: Einstellungen speichern/laden
 
Was für ein Fehler kommt den ???

Waldteufel 6. Feb 2006 18:50

Re: Einstellungen speichern/laden
 
Hi.

Zitat:

Zitat von Knotti2005
Komisch speichern geht nur laden nicht...
Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var d :string;
begin
  ini := Tinifile.Create(ExtractFilePath(Application.Exename) + 'Einstellungen.dat');
  ini.ReadString('tapi', 'aktiviert', d);

  if d = 'yes' then form1.CheckBox2.Checked := true;
  if d = 'false' then form1.CheckBox2.Checked := false;
    ini.Free;

:mrgreen: :mrgreen: :mrgreen:

Wie Marabu schon sagte... ReadString ist eine Funktion ;-).
Code:
-> Wert := ReadString(Abschnitt, Schlüssel, [size=18][b]Standardwert[/b][/size]) <-
Du nimmst also d als Standardwert und verwirfst das Ergebnis ;-)

PS: Gute Nacht! :hi: *ratzepüh*

Knotti2005 6. Feb 2006 19:19

Re: Einstellungen speichern/laden
 
Entschuldige bitte das mein Programm ein 2 Jahre Programm ist was du sowieso nicht brauchst...

:(

Knotti2005 6. Feb 2006 19:40

Re: Einstellungen speichern/laden
 
Wie meinst du das..

Ich Verstehe das wirklich absolut garnich X-(

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var a :string;
begin
    ini := Tinifile.Create(ExtractFilePath(Application.Exename)+'Einstellungen.ini');
      a := ini.ReadString('tapi','aktiviert','yes');
    ini.Free;

   if a = 'yes' then form1.CheckBox2.Enabled:=true
   else
   form1.CheckBox2.Enabled:=falsE;
   end;

Knotti2005 6. Feb 2006 19:49

Re: Einstellungen speichern/laden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mit dem Code von NormanNG tritt immernoch ein Fehler auf...

Image...

Waldteufel 6. Feb 2006 19:50

Re: Einstellungen speichern/laden
 
Tschuldigung Knotti. Ich wollte dich nicht verletzen.
Du hast es übrigens offenbar - entgegen deiner eigenen Meinung - doch verstanden. Der Code, den du zuletzt gepostet hast, ist richtig so. :thumb:

Die drei :mrgreen:s waren da, weil ich es so komisch fand, dass keiner sonst den Fehler bemerkt hat.
Hoffe, du bist mir nicht allzu böse. OK? :cheers: (<- Apfelschorle)

PS: So. Jetzt muss ich aber ins Bett... Gute Nacht! *schnarch*

Knotti2005 6. Feb 2006 19:54

Re: Einstellungen speichern/laden
 
@Wandteufel danke für deine Entschuldigung nur die Bemerkung war nicht gegen dich gerichtig...
Sondern gegen
Zitat:

Autor: PierreB
#15|Verfasst am: 06.02.2006, 19:06 Titel: Re: Einstellungen speichern/laden
zer00 hat folgendes geschrieben:
Wieso Speicherst Du die Einstellungen nicht in der Registry, ini-Files sind IMHO so was von lästig für die Anwender.
Und ich als Anwender möchte nicht das mein System mit Daten von einem Programm zugemüllt wird, dass ich vielleicht 2mal im Jahr benutze.
Kommischweise schmiert das Programm beim starten immer ab...

Und wenn mir mein Programmkomisch findet dann sagt es doch dann hör ich auf zu Programmieren und das Thema ist gegessen... Dann Müll ich euch hier nicht mehr mit Noob-Beiträgen voll und spiele wieder ATC beim Flugsimulator 2004..

marabu 6. Feb 2006 20:14

Re: Einstellungen speichern/laden
 
Hi Knotti,

ich finde dein Programm nicht komisch. Ändere doch den Code mal kurz so ab:

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var
  ini: TIniFile;
begin
  ini := TInifile.Create(ExtractFilePath(Application.Exename) + 'Einstellungen.ini');
  if Assigned(Form1) then
    try
      Form1.CheckBox2.Enabled := (ini.ReadString('tapi', 'aktiviert', 'yes') = 'yes');      
    finally
      Ini.Free;
    end
  else ShowMessage('Hallo Norman');
end.
Wenn die Meldung ausgegeben wird, dann ist Form1 noch nicht initialisiert.

marabu

Knotti2005 6. Feb 2006 21:10

Re: Einstellungen speichern/laden
 
Ja er gibt Hallo Norman aus..


Und nun?

Form2 ist das Hauptformular allerdings wird es durch einen Timer gleich versteckt.. Form 2 ist nur sichtbar wenn man auf Eigenschaften drückt..

Wenn ich die Prozedur in die Form1 reinschreibe geht sie...

:stupid:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  ini: TIniFile;
begin
  ini := TInifile.Create(ExtractFilePath(Application.Exename) + 'Einstellungen.ini');
  if Assigned(Form1) then
    try
      Form1.CheckBox2.checked := (ini.ReadString('tapi', 'aktiviert', 'yes') = 'yes');
    finally
      Ini.Free;
    end
  else ShowMessage('Hallo Norman');


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