Entwickler-Ecke

Sonstiges (Delphi) - Programm will ini Datei nicht erzeugen


SCUD - Di 03.07.07 10:06
Titel: Programm will ini Datei nicht erzeugen
Hi,

ich hab ein größeres programm geschrieben, was ich immer weiter ausbaue. Doch nun wo ich dem Programm einen Einstellungsmodus hinzugefügt habe, will es keine datei erzeugen, wo die einstellungen gespeichert werden. Alle anderen Dateien werden erzeugt.

vllt hab ich was übersehen. Alle anderen prozeduren wo dateien erzeugt werden, funktionieren.

hier der Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
unit einstellungen;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, LogTool, StdCtrls, ExtCtrls, Buttons;

type
  Tform_einstellungen = class(TForm)
    rgformat: TRadioGroup;
    cbkundendatei: TCheckBox;
    edpfadrechnungen: TEdit;
    Label2: TLabel;
    cbbackground: TCheckBox;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    cbportscan5500: TCheckBox;
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    procedure config_einlesen;
    procedure config_schreiben;
    procedure auswerten;
    procedure fehler_rechnungspfad;
    procedure fehler_config;
    procedure raus;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  form_einstellungen: Tform_einstellungen;
  config: textfile;
  strpfadrechnungen, format, strtemp, kundendatei_anlegen, portscan, background: string;

implementation

{$R *.dfm}

procedure Tform_einstellungen.BitBtn1Click(Sender: TObject);
begin
raus;
end;

procedure Tform_einstellungen.auswerten;
begin
if rgformat.ItemIndex = 0 then
  format := 'rechnungsformat=text';
if rgformat.ItemIndex = 1 then
  format := 'rechnungsformat=html';
if rgformat.ItemIndex = 2 then
  format := 'rechnungsformat=pdf';
if rgformat.ItemIndex = 3 then
  format := 'rechnungsformat=htmlpdf';
if cbkundendatei.Checked = true then
  kundendatei_anlegen := 'kundendatei=true'
  else
    kundendatei_anlegen := 'kundendate=false';
if cbportscan5500.Checked = true then
  portscan := 'portscan=true'
  else
    portscan := 'portscan=false';
if cbbackground.Checked = true then
  background := 'background=true'
  else
    background := 'background=false';
strpfadrechnungen := edpfadrechnungen.text;
if strpfadrechnungen = '' then
  fehler_rechnungspfad
  else
    config_schreiben;
end;

procedure Tform_einstellungen.config_einlesen;
begin
  AssignFile(config, 'config.ini');
  Reset(config);
  while not eof(config) do begin
  readln(config,format);
  readln(config,kundendatei_anlegen);
  readln(config,portscan);
  readln(config,background);
  readln(config,strpfadrechnungen);
  end;
  CloseFile(config);
if format = 'rechnungsformat=text' then
  rgformat.ItemIndex := 0
  else
    if format = 'rechnungsformat=html' then
      rgformat.ItemIndex := 1
      else
        if format = 'rechnungsformat=pdf' then
          rgformat.ItemIndex := 2
          else
            if format = 'rechnungsformat=htmlpdf' then
              rgformat.ItemIndex := 3
              else
                fehler_config;
if kundendatei_anlegen = 'kundendatei=true' then
  cbkundendatei.Checked := true
  else
    if kundendatei_anlegen = 'kundendatei=false' then
      cbkundendatei.Checked := false
      else
        fehler_config;
if portscan = 'portscan=true' then
  cbportscan5500.Checked := true
  else
    if kundendatei_anlegen = 'portscan=false' then
      cbportscan5500.Checked := false
      else
        fehler_config;
if background = 'background=true' then
  cbbackground.Checked := true
  else
    if background = 'background=false' then
      cbbackground.Checked := false
      else
        fehler_config;
end;

procedure Tform_einstellungen.config_schreiben;
begin
AssignFile (config, 'config.ini');
Rewrite(config);
Write(config,format + #13#10);
Write(config,kundendatei_anlegen + #13#10);
Write(config,portscan + #13#10);
Write(config,background + #13#10);
Write(config,strpfadrechnungen + #13#10);
CloseFile(config);
raus;
end;

procedure Tform_einstellungen.fehler_rechnungspfad;
begin
showmessage('Rechnungspfad ist ungültig!'#13#10+strpfadrechnungen+#13#10'Bitte geben sie einen gültigen Pfad an!');
end;

procedure Tform_einstellungen.fehler_config;
begin
showmessage('Fehler beim auslesen der config.ini');
end;

procedure Tform_einstellungen.BitBtn2Click(Sender: TObject);
begin
auswerten;
end;

procedure Tform_einstellungen.raus;
begin
form_einstellungen.Visible := false;
end;

end.


mfg
SCUD


Saubäär - Di 03.07.07 10:16

Moin,

vielleicht solltest du dir das (http://www.dsdt.info/tutorials/ini/) mal ansehen.

Gruß


SCUD - Di 03.07.07 10:25

eigentlich handelt es sich um eine stink normale textdatei..die keine wichtigen einstellungen enthält, sondern eher kleiner pfadangaben und sonen kram.
Wird auch als textdatei gehandelt. nur er erstellt keine datei...weder ini noch txt...ich verzweifel hier. Bin mir sicha hab da im quellcode nen fehler. find ihn nur net...und der compiler läuft auch ohne meldung durch

mfg
SCUD


Saubäär - Di 03.07.07 10:28

Hallo,

ich finde die Handhabe von TIniFile zwar bequemer aber okay. Reset(config) beachtet imho nur existierende Dateien. Probiers mit Rewrite. Dabei werden Dateien überschrieben bzw. neu angelegt.

// Sehe grad hast du ja auch gemacht.... :roll:

Gruß


SCUD - Di 03.07.07 10:30

Hi, danke erst,mal für schnelle antwort.
Das reset is da schon richtig, weil die prozedur nur die datei auslesen soll...

die prozedur zum schreiben lautet so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure Tform_einstellungen.config_schreiben;
begin
AssignFile (config, 'config.ini');
Rewrite(config);
Write(config,format + #13#10);
Write(config,kundendatei_anlegen + #13#10);
Write(config,portscan + #13#10);
Write(config,background + #13#10);
Write(config,strpfadrechnungen + #13#10);
CloseFile(config);
raus;
end;


Wonko - Di 03.07.07 10:36

Fehlt in Deinen uses vielleicht IniFiles?

Edit:
und sollte config vielleicht als TIniFile deklariert werden?


Saubäär - Di 03.07.07 10:37

Also bei mir funktionierts (vllt. mal Delphi neu starten od. absolute Pfade ausprobieren). Allerdings würde ich die WriteLn- Methode benutzen und keine Zeilenumbrüche einfügen.

@Wonko: Er benutzt ja keine IniFiles also muss er die Unit auch nicht einbinden.

Gruß


SCUD - Di 03.07.07 10:44

hab delphi mehrmals neugestartet und auch windoof mal rebootet...beides ohne erfolg
auch absolute Pfade (C:\config.ini oda config.txt) haben kein ergebnis gehabt.

@ saubäär

haste die ganze unit versucht?

das merkwürdige ist ja, ich habe die raus prozedur (die das fenster schließt) auskommentiert und dennoch hat er das fenster geschlossen? liegt das vllt daran das ich n bitbtn mit der eigenschaft "kind=btclose" habe, wegen dem symbol?


Saubäär - Di 03.07.07 10:48

user profile iconSCUD hat folgendes geschrieben:

das merkwürdige ist ja, ich habe die raus prozedur (die das fenster schließt) auskommentiert und dennoch hat er das fenster geschlossen?


Dann solltest du das Projekt nochmal kompilieren und nicht "nur" erstellen (Projekt > Project1 kompilieren) oder STRG + F9

Gruß


jasocul - Di 03.07.07 10:48

Deine Config-Datei kann sonstwo stehen. Das hängt vom Arbeitsverzeichnis ab. Sehe gerade Du hast auch schon ein absolutes Verzeichnis versucht. Hast Du dort denn Schreibrechte?

btw:
statt write('bla' + #13#10);
geht auch writeln('bla');


SCUD - Di 03.07.07 10:51

Irgendwie funzt das nu

hab die eigenschaft "kind" von Bitbtn2 von "bkclose" auf "bkcustom" gestellt und es ging problemlos.

danke für eure hilfe ;-)