Autor Beitrag
SCUD
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 03.07.07 11:06 
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:
ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 376



BeitragVerfasst: Di 03.07.07 11:16 
Moin,

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

Gruß
SCUD Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 03.07.07 11: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 376



BeitragVerfasst: Di 03.07.07 11: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ß


Zuletzt bearbeitet von Saubäär am Di 03.07.07 11:45, insgesamt 2-mal bearbeitet
SCUD Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 03.07.07 11: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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 69



BeitragVerfasst: Di 03.07.07 11:36 
Fehlt in Deinen uses vielleicht IniFiles?

Edit:
und sollte config vielleicht als TIniFile deklariert werden?


Zuletzt bearbeitet von Wonko am Di 03.07.07 11:38, insgesamt 1-mal bearbeitet
Saubäär
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 376



BeitragVerfasst: Di 03.07.07 11: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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 03.07.07 11: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 376



BeitragVerfasst: Di 03.07.07 11: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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 03.07.07 11: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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 03.07.07 11: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 ;-)