Natürlich enthält das Beispielprogramm auch die Möglichkeit, selbst Namen in die INI-Datei einzutragen. Dazu stehen Ihnen drei Eingabefelder zur Verfügung, die Sie entsprechend füllen können.
Anzumerken ist, dass es keine spezielle Funktion zum Speichern von numerischen Werten gibt. In unserem Fall ist das nicht weiter tragisch, da das Alter aus dem Eingabefeld ohnehin als Text (String) ausgelesen wird. Sollten Sie in Ihren Anwendungen jedoch mit echten numerischen Werten arbeiten, müssen Sie diese zunächst in einen String konvertieren.
Schauen wir uns aber zuerst einmal das Speichern eines normalen Strings an. In diesem Fall habe ich auch mit einer Variable vom Typ string gearbeitet, um den Namen der Person aus dem Eingabefeld zu lesen:
SetLength(username,MAX_PATH);
SetLength(username,GetWindowText(hName,@username[1],MAX_PATH));
Dazu muss wohl nichts mehr gesagt werden, denn das Tutorial über
Schauen wir uns daher an, wie der String nun in die INI-Datei gespeichert wird. Wir tragen ihn dabei in die erste Sektion names ein. Dieser Sektionsname ist dann auch der erste Parameter der Funktion "WritePrivateProfileString":
Result := WritePrivateProfileString('name',
Da wir in dieser Sektion die Namen doppelt aufführen (und im nächsten Kapitel erkläre ich auch den Grund), benutzen wir nun den zuvor gelesenen Namen zweimal:
@username[1], // Topic (vor dem Gleichheitszeichen) @username[1], // Wert (nach dem Gleichheitszeichen)
Zum Schluss wird wieder die Datei angeben:
pchar(ExtractFilePath(paramstr(0)) + szIniFile));
Es mag verwirrend aussehen, dass in der Anweisung zweimal der Name der Person benutzt wird. Würden wir z.B. eine Nummerierung verwenden, könnte die selbe Anweisung so aussehen:
WritePrivateProfileString('name','3',@username[1],'userdata.ini');
Nehmen wir einmal an, wir haben eine Integer-Variable, "i", deren Wert wir in der INI-Datei speichern wollen. Da uns dafür keine eigene Funktion zur Verfügung steht, müssen wir den Wert in eine String-Variable übertragen.
Etwas umständlich, aber machbar, ist die Variante, die Integer-Variable mit Hilfe von "wvsprintf" in einen Textpuffer zu übertragen und diesen Puffer dann in die INI-Datei zu schreiben. Normalerweise ist der Textpuffer ein pchar-Typ (oder ein array[x..y]of char), in dem Fall reicht aber wieder ein normaler String:
SetLength(s,MAX_PATH); ZeroMemory(@s[1],MAX_PATH);
wvsprintf(@s[1],'%d',pchar(@i));
Leichter geht es mit der Funktion "inttostr", mit der Sie den Integer-Wert direkt in einen String konvertieren und in die INI-Datei schreiben lassen:
WritePrivateProfileString('test','integertest',pchar(inttostr(i)),'int.ini');
Allerdings wird Ihnen diese Funktion nur von der Unit "SysUtils.pas" zur Verfügung gestellt. Da wir diese Unit aber weitgehend meiden (weil sie das ausführbare Programm in vielen Fällen nur unnötig vergrößert), bleibt nur die Rückbesinnung auf die "gute alte Zeit":
function IntToStr(const i: integer): string; begin Str(i,Result); end;
:o)