Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problemm bei .ini datei [E2010] (https://www.delphipraxis.net/121106-problemm-bei-ini-datei-%5Be2010%5D.html)

Thendo 22. Sep 2008 14:13


Problemm bei .ini datei [E2010]
 
Mittag^^,

da ich ma wieder ein Problemm hab und nicht checke woran es liegt (~.~):

Ich hab heute angefangen mich mit .Ini datein zu beschäftigen und diese in Programme einzubauen/verwenden.
Es geht um 2 Buttons: Der 1. soll den inhalt der angekreuzten Checkbox in der Ini Datei speichern
Der 2. soll den inhalt bei drücken den(der) Checkbox aus der .ini nehmen
und ihn wieder zuweisen.

Der 1.Button klappt genau so wie gewünscht aber bei dem 2.Button kommt folgende Fehlermeldung:
Zitat:

[DCC Fehler] Unit4.pas(114): E2010 Inkompatible Typen: 'Integer' und 'Char'
Hier ma der Quellcode von den 2 Button: ( hab da wo der fehler ist rot makiert^^)
Delphi-Quellcode:
// -----------------------------------------------------------------------------//
// Button zum speichern der Einstellungen aus den Checkboxen in die .ini       //           
// -----------------------------------------------------------------------------//

procedure TForm4.Button2Click(Sender: TObject);
var ini: TIniFile;
    adresse : string;
    ordner : string;
begin
ordner := Edit2.text;  // Pfad zum Ordner wo die Death.exe liegt!
adresse := Edit1.text; // Adresse des Servers der in Realmlist geändert werden soll

  ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
    'Launcher.ini');

if Checkbox1.Checked then
   begin
     ini.WriteString('CheckboxInhalt','Checkbox1.Text ', ordner);
   end;
end;

// ---------------------------------------------------------------------------//
// Button zum laden der Einstellungen der Checkboxen aus der .ini            //
// ---------------------------------------------------------------------------//

procedure TForm4.Button4Click(Sender: TObject);
var ini: TIniFile;
begin
  ini:=TIniFile.Create('Launcher.ini');
  try
    Checkbox1.Caption:=ini.ReadInteger('Checkbox1','Text', '0'); [color=#ff001f]<--Fehler[/color]
  finally
    ini.free;
  end;
end;
// ---------------------------------------------------------------------------//
// ---------------------------------------------------------------------------//
// ---------------------------------------------------------------------------//

MfG Thendo

DeddyH 22. Sep 2008 14:17

Re: Problemm bei .ini datei [E2010]
 
Versuch es mal mit Ini.ReadString

Thendo 22. Sep 2008 14:27

Re: Problemm bei .ini datei [E2010]
 
Ahh danke xD jetzt klappts
nur leider ändert er jetzt immer die Checkbox.Caption in 0.
Er soll aber eig den Pfad:

[CheckboxInhalt]
Checkbox1.Text=C:\Programme\Test

in die Caption schreiben.
Wenn ich die 0 weglasse schreibt er nix rein und wenn ich den parameter lösche meckert er rum^^

Benedikt 22. Sep 2008 14:29

Re: Problemm bei .ini datei [E2010]
 
Wenn du den gleichen Code wie oben gepostet noch verwendest, dann liest da ja auch von einer anderen Stelle in der Ini als wo du hinschreibst...
Delphi-Quellcode:
ini.WriteString('CheckboxInhalt','Checkbox1.Text ', ordner);
...
ini.ReadString('Checkbox1','Text', '0');
Kein Wunder dass er dir dann den Default-Wert, also 0 in deinem Fall, rausgibt...

DeddyH 22. Sep 2008 14:29

Re: Problemm bei .ini datei [E2010]
 
Du liest ja auch etwas anderes aus, als Du reinschreibst. Das müsste so lauten:
Delphi-Quellcode:
Checkbox1.Caption := ini.ReadString('CheckboxInhalt','Checkbox1.Text ','Wuppdi');
[edit] Einen Tick zu langsam [/edit]

Thendo 22. Sep 2008 14:48

Re: Problemm bei .ini datei [E2010]
 
Aber dan kommt der Pfad (C:\Programme\Test) ja nicht wieder in die Checkbox1.Caption oO.

Evt habt ihr mich falsch verstanden:

Ich möchte z.b einen Pfad in einem Edit angeben den dan auf Knopfdruck in die .ini Datei speichern:

[CheckboxInhalt]
Checkbox1.Text=C:\Programme\Test

Soweit gehts ja auch.

So dan wenn man das Programm beendet und es wieder starten soll man per einem anderem Button den gespeicherten Pfad (C:\Programme\Test) aus der .ini datei suchen und in die Checkbos übertragen:
_
|_|C:\Programme\Test

---------------------------------------------------------------------------------------
MfG Thendo

DeddyH 22. Sep 2008 14:57

Re: Problemm bei .ini datei [E2010]
 
Wir haben Dich schon richtig verstanden. Allerdings scheinst Du etwas falsch zu machen. Zeig doch nochmal den aktuellen Quältext.

Thendo 22. Sep 2008 15:04

Re: Problemm bei .ini datei [E2010]
 
Delphi-Quellcode:
unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, shellapi, Menus, jpeg, IniFiles, ExtCtrls;

type
  TForm4 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    MainMenu1: TMainMenu;
    Programmbeenden1: TMenuItem;
    Info1: TMenuItem;
    Label3: TLabel;
    CheckBox3: TCheckBox;
    Label4: TLabel;
    CheckBox1: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox6: TCheckBox;
    CheckBox7: TCheckBox;
    CheckBox8: TCheckBox;
    Button2: TButton;
    Button3: TButton;
    CheckBox9: TCheckBox;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Programmbeenden1Click(Sender: TObject);
    procedure Info1Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure CheckBox7Click(Sender: TObject);
    procedure CheckBox4Click(Sender: TObject);
    procedure CheckBox9Click(Sender: TObject);
    procedure CheckBox6Click(Sender: TObject);
    procedure CheckBox8Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form4: TForm4;
  adresse : string;
  ordner : string;

implementation

uses Unit1;

{$R *.dfm}

// -----------------------------------------------------------------------------
//  Button zum Starten und ändern der Realmlist
// -----------------------------------------------------------------------------
procedure TForm4.Button1Click(Sender: TObject);
var
  myFile : TextFile;
  text  : string;
  adresse : string;
  ordner : string;

begin
ordner := Edit2.text;  // Pfad zum Ordner wo die wow.exe liegt!
adresse := Edit1.text; // Adresse des Servers der in Realmlist geändert werden soll

 AssignFile(myFile, ordner+'\realmlist.wtf');
  ReWrite(myFile);

  WriteLn(myFile, 'set realmlist ', adresse);
  WriteLn(myFile, 'set patchlist 127.0.0.1');

  WriteLn(myFile);
  CloseFile(myFile);
  ShellExecute(Handle, nil, PChar( Edit2.Text+'\Rechner.exe'), nil, nil, SW_SHOW);
  end;

// -----------------------------------------------------------------------------
//  Button zum speichern in die .ini datei
// -----------------------------------------------------------------------------

procedure TForm4.Button2Click(Sender: TObject);
var ini: TIniFile;
    adresse : string;
    ordner : string;
begin
ordner := Edit2.text;  // Pfad zum Ordner wo die WoW.exe liegt!
adresse := Edit1.text; // Adresse des Servers der in Realmlist geändert werden soll

  ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
    'Launcher.ini');

if Checkbox1.Checked then
   begin
     ini.WriteString('CheckboxInhalt','Checkbox1.Text ', ordner);
   end;
end;

// ---------------------------------------------------------------------------//
// Button zum laden der Einstellungen der Checkboxen aus der .ini            //
// ---------------------------------------------------------------------------//

procedure TForm4.Button4Click(Sender: TObject);
var ini: TIniFile;
begin
  ini:=TIniFile.Create('Launcher.ini');
  try
    Checkbox1.Caption := ini.ReadString('CheckboxInhalt','Checkbox1.Text ', '');
  finally
    ini.free;
  end;
end;
// ---------------------------------------------------------------------------//
// ---------------------------------------------------------------------------//
// ---------------------------------------------------------------------------//
(Am Ende soll es ein Realmlistchanger für WoW werden der auf Wunsch das Game nach dem ändern zu starten)

So das ist der Hauptteil des Quellcode dahinter der Teil bezieht sich nur auf Checkboxen das nur 1ne ausgewählt werden kann.

DeddyH 22. Sep 2008 15:06

Re: Problemm bei .ini datei [E2010]
 
Du verwendest einmal einen absoluten und einmal einen relativen Pfad. Außerdem wird im Button2Click die Ini nicht wieder freigegeben.

taaktaak 22. Sep 2008 15:07

Re: Problemm bei .ini datei [E2010]
 
Du holst den Inhalt eines Edits und schreibst diesen Text in eine INI. Dann holst du den Wert aus der INI und verwendest diesen Text um die Beschriftung der Checkbox zu ändern. Wo liegt denn da der tiefere Sinn????

Thendo 22. Sep 2008 15:11

Re: Problemm bei .ini datei [E2010]
 
Zitat:

Zitat von taaktaak
Du holst den Inhalt eines Edits und schreibst diesen Text in eine INI. Dann holst du den Wert aus der INI und verwendest diesen Text um die Beschriftung der Checkbox zu ändern. Wo liegt denn da der tiefere Sinn????

Es muss nicht alles einen Sinn ergeben ^^.


Zitat:

Zitat von DeddyH
Du verwendest einmal einen absoluten und einmal einen relativen Pfad. Außerdem wird im Button2Click die Ini nicht wieder freigegeben.

:wiejetzt:

Könntest du das bitte für mich erklären^^?

Benedikt 22. Sep 2008 15:15

Re: Problemm bei .ini datei [E2010]
 
Dein Code:
Delphi-Quellcode:
 
//Schreiben
ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'Launcher.ini');

//Lesen
ini:=TIniFile.Create('Launcher.ini');
Machs beide male so wie beim Schreiben...

Crazy Ivan 22. Sep 2008 15:17

Re: Problemm bei .ini datei [E2010]
 
Zitat:

Zitat von Thendo

:wiejetzt:

Könntest du das bitte für mich erklären^^?


im button2click verwendest du ExtractFilePath + ... und im button4click nicht.

außerdem fehlt im button2click das ini.free




edit: mhm, zu spät (roter kasten?)

Thendo 22. Sep 2008 15:25

Re: Problemm bei .ini datei [E2010]
 
aahhhh danke habs jetzt verstanden =)


Werd den Quellcode ma posten wenn ma einer das gleiche Problemm hat ^^:
Delphi-Quellcode:
// -----------------------------------------------------------------------------
//  Button zum speichern in die .ini datei
// -----------------------------------------------------------------------------

procedure TForm4.Button2Click(Sender: TObject);
var ini: TIniFile;
    adresse : string;
    ordner : string;
begin
ordner := Edit2.text;  // Pfad zum Ordner wo die WoW.exe liegt!
adresse := Edit1.text; // Adresse des Servers der in Realmlist geändert werden soll

  ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
    'Launcher.ini');

if Checkbox1.Checked then
   begin
     ini.WriteString('CheckboxInhalt','Checkbox1.Text ', ordner);
     ini.free;
   end;
end;

// ---------------------------------------------------------------------------//
// Button zum laden der Einstellungen der Checkboxen aus der .ini            //
// ---------------------------------------------------------------------------//

procedure TForm4.Button4Click(Sender: TObject);
var ini: TIniFile;
begin
  ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
    'Launcher.ini');
  try
    Checkbox1.Caption := ini.ReadString('CheckboxInhalt','Checkbox1.Text ', ordner);
  finally
    ini.free;
  end;
end;
// ---------------------------------------------------------------------------//
// ---------------------------------------------------------------------------//
// ---------------------------------------------------------------------------//

Benedikt 22. Sep 2008 15:28

Re: Problemm bei .ini datei [E2010]
 
Noch eine Anmerkung:
1. wird deine Ini beim Speichern nur freigegeben, wenn die CheckBox gecheckt ist.
2. fehlt dir da der Ressourcenschutzblock, wie du ihn beim Lesen ja gemacht hast... (try..finally..end)

DeddyH 22. Sep 2008 15:29

Re: Problemm bei .ini datei [E2010]
 
Kleiner Verbesserungsvorschlag:
Delphi-Quellcode:
procedure TForm4.Button2Click(Sender: TObject);
var ini: TIniFile;
begin
  if Checkbox1.Checked then
   begin
     ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
       'Launcher.ini');
     try
       ini.WriteString('CheckboxInhalt','Checkbox1.Text ',Edit2.text);
     finally
       ini.free;
     end;
   end;
end;
Wozu erst alles ermitteln und die Ini anlegen, wenn Du dann ggf. doch nicht reinschreibst?

[edit] Code gekürzt [/edit]

Thendo 22. Sep 2008 15:42

Re: Problemm bei .ini datei [E2010]
 
Danke für die Tipps bzw Quellcode.

Hab`s verändert.


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