Autor Beitrag
Thunder
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 145

WinXP
D6 Pers
BeitragVerfasst: Do 22.01.04 22:05 
Moin,

Ich bastel an einem Gebührenrechner. Die Gebühren will ich in einer Ini speichern um sie einfach aktualisierbar zu machen.

Die Gebühren setzen sich aus einem Startpreis zusammen. Umso höher der Startpreis umso höher die Gebühren.
Meine Inifile soll so aussehen:
ausblenden Quelltext
1:
2:
3:
4:
5:
[Startpreis]
0100=025
0999=040
1999=060
2000=100


ungefähr. Des heißt: Bei einem Startpreis von 1 € (0100) kostet die Gebühr 0,25 € (0100=025).

So habe ich Integerwerte.

Da sich aber die Gebührenabstände ändern könnten nutze ich halt ReadSection um problemlos neue Schlüssel einlesen zu können.

Nun list ReadSection das ja in eine TStrings. Ich brauch aber Integerwerte.
Das könnte ich danach als StrToInt in einen dynamisches Integerarray lesen.

Wie könnte ich das vereinfachen. 3 Testzeilen funzen schon net:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Ini := TIniFile.Create(ParamStr(0) + 'egin.ini');
  Ini.ReadSection('Startpreis', Test);
  Ini.Free;
end;


die egin.ini
ausblenden Quelltext
1:
2:
3:
[Startpreis]
100=025
999=040


Is halt nur als Test. Funzt aber net. Krieg immer ne Schutzverletzung etc.


Nächstes Prob:
Der Startpreis wird über ein TMaskEdit eingegeben. Wie kriege ich aus MaskEdit ein Integer und wie vergleich ich den mit allen Gebührenschlüsseln aus ReadSection um dann die Gebühr rauszufinden??

Bitte helft mir.
Danke.

Moderiert von user profile iconMotzi: Topic verschoben
Michael Stenzel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 133


D3 Prof, D7 PE
BeitragVerfasst: Do 22.01.04 23:25 
Hi THunder

Du bekommst eine Schutzverletzung, weil der Pfad für die Ini-Datei nicht Stimmt. Im Parmstring[0] Steht der Pfad und der Dateiname des Programmes.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button2Click(Sender: TObject);
var ini : TIniFile;
    Schluessel : TStringList;
    i : integer;
    Gebuehren : array [0 .. 20] of integer;
begin
  Schluessel := TStringList.Create;
  Ini := TIniFile.Create(ExtractFileDir(ParamStr(0)) + '\egin.ini');
  Ini.ReadSection('Startpreis', Schluessel);
  for i := 0 to Schluessel.Count-1 do begin
      Gebuehren[i] := Ini.ReadInteger('Startpreis',Schluessel.Strings[i],0);
  end;
  Ini.Free;
  Schluessel.Free;
end;


Den Vergleich mit der MaskEdit Programierst Du wie Oben in der For - Schleife. Den String aus der MaskEdit-komponente wandels Du mit StrToInt um.

Mußt Du denn alle Gebührenpreise zur Laufzeit im Speicher halten?
Wenn Du nur ein Preis ständig brauchst, kann man dein Problem auch anders Lösen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button2Click(Sender: TObject);
var   ini : TIniFile;
        Old : Integer;
begin
  Old := Gebuehren;
  try
    Ini := TIniFile.Create(ExtractFileDir(ParamStr(0)) + '\egin.ini');
    Gebuehren := Ini.ReadInteger('Startpreis',MaskEdit1.Text,0);
  finally
    Ini.Free;
  end;
  If Gebuehren = 0 then Gebuehren := Old;
end;


Wobei die Variable Gebuehren Global deklariert ist.
mfg
Michael.
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: Do 22.01.04 23:31 
Frage zu Problem 1: Was ist Test - wo ist das deklariert und vor allem: Wo wird da ein create gemacht ?

Ich glaube, Test ist zu dem Zeitpunkt noch gar nicht erstellt und nil.

Ich habe die ReadSection noch nicht verwendet (habe aber gerade in der Help nachgeguckt), aber du wirst folgendes noch machen müssen:

Eine Klasse, welche Name und Value enthält (in deinem Fall zwei integer). Außerdem eine Methode, welche einen String in die beiden Werte umwandelt und umgekehrt.

Eine TList Klasse (besser TObjectList falls vorhanden), wo du alle Einträge der obrigen Klasse speicherst.

Ich hoffe, dir helfen schon mal die kleinen Tipps weiter, es ist schon spät, also sorry, daß ich keine Komplettlösung mehr poste ... aber ich denke, die Denkanstöße haben schon mal weitergeholfen - hier noch die Zusammenfassung:

:arrow: Die Daten speicherst du in einer Liste, wo du lauter Objekte gespeichert hast wie oben.

:arrow: Dann lädst du eine Section in eine TStringList.

:arrow: Nun erzeugst du für jede Zeile ein oben beschriebenes Objekt und weißt den entsprechenden String zu (Umwandlungsmethode).

:arrow: Nicht vergessen: Speicher freigeben, wenn du die TList nicht mehr brauchst - die TObjectList machts automatisch, ist aber nicht bei allen Delphi-Versionen dabei.

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
Thunder Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 145

WinXP
D6 Pers
BeitragVerfasst: Fr 23.01.04 14:11 
@Michael vielen dank, das hilft mir sehr. ja ich muss alle gebühren haben, da ich ja schauen muss in welcher spanne MaskEdit1 liegt um rauszufinden welche Gebühr das kostet.