Ich glaube nicht, das dies hier in Deinem Sinne funktioniert, weil
das Passwort immer Administrator lauten muss. Ein OR in der IF Abfrage ist
hier mit Sicherheit angebrachter....
Delphi-Quellcode:
IF NeuesPassword.Text = NeuesPassword1.Text THEN
IF AltesPassword.Text = P THEN
IF AltesPassword.Text = 'Administrator' THEN
xxx
...
Es macht sich auch besser, wenn jeder Block ein wenig eingerückt ist. Zumindest kann man es dann besser lesen.
Bei jeder Abfrage kann man AND und OR beliebig kombinieren. Hierbei wird nach folgenden Muster
verfahren :
true AND true = true
true AND false = false
true OR true = true
true OR false = true
false OR true = true
false OR false = false
Die Wahrheitswerte werden normalerweise von den Bedingungen
( in Deinem Fall AltesPassword.Text = P usw.) gebildet.
Also
Delphi-Quellcode:
IF (NeuesPassword.Text = NeuesPassword1.Text) THEN
IF ((AltesPassword.Text = P) OR
(AltesPassword.Text = 'Administrator')) THEN
....
oder
Delphi-Quellcode:
IF ((NeuesPassword.Text = NeuesPassword1.Text) AND
((AltesPassword.Text = P) OR
(AltesPassword.Text = 'Administrator'))) THEN
....
Ich neige dazu, die Bedingungen in Klammern zu setzen, was mitunter nicht gerade leserlich wird.
Allerdings akzeptieren nicht alle Programmiersprachen einen so freizügigen Umgang, weshalb eine
Umgewöhnung sinnlos ist
Dein Routine würde ich wie folgt gestalten :
Delphi-Quellcode:
procedure TPasswordDlg1.OKBtnClick(Sender: TObject);
var ini: TIniFile;
P: string;
begin
ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
'test.ini');
P:=ini.ReadString('Benutzer','Passwort',P);
// entweder das Passwort stimmt oder ich bin der Admin
IF ((AltesPassword.Text = P) OR (AltesPassword.Text = 'Administrator')) THEN BEGIN
AltesPassword.Text:='';
// stimmen Passwort und Sicherheitseingabe
IF (NeuesPassword.Text = NeuesPassword1.Text) THEN BEGIN
// fällt weg, weil oben bereits die Abfrage erfolgt ist
//IF ((AltesPassword.Text = P) OR
// (AltesPassword.Text = 'Administrator')) THEN
ini.WriteString('Benutzer','Passwort',NeuesPassword.Text);
END ELSE
ShowMessage('Sie haben das neue Passwort falsch eingegeben');
END ELSE
ShowMessage('Sie haben das alte Passwort falsch eingegeben');
ini.free;
end;