Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
Delphi XE5 Professional
|
Doppelte Einträge in Ini vermeiden
13. Jul 2003, 18:49
Hallo Wissende,
ich habe hier im Forum folgenden Code gefunden und sowiet abgewandelt, dass nicht mehr Dateien im Menü hinzugefügt werden, sondern Pfad. Aber das nur am Rand. Ich habe es leider noch nicht hinbekommen, dass die Pfade die hinzugefügt werden, NICHT doppelt eingetragen werden. Mein Versuch, dies mit ValueExists durchzuführen ist leider gescheitert. Hat jemand einen Tipp?
Delphi-Quellcode:
procedure TMainForm.MyMenuItemClick(Sender: TObject);
var
ini : TiniFile;
s : String;
begin
ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'\Einstellungen.ini');
try
s := ini.ReadString('History', IntToStr((Sender as TMenuItem).Tag), ''); // Schlüsselwert an Hand des Tags indentifizieren
ed_path.Text:=s;
//ShowMessage(s); // Und ausgeben
finally
ini.Free;
end;
end;
procedure TMainForm.FillMenue;
var
ini : TIniFile;
slKeyNumbers : TStringList;
i : Integer;
NewItem : TMenuItem;
begin
ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'\Einstellungen.ini');
try
slKeyNumbers := TStringList.Create;
try
ini.ReadSectionValues('History', slKeyNumbers); // Sektionswerte holen
if slKeyNumbers.Count > 0 then // wenn welche da sind Trennlinie erzeugen
begin
NewItem := TMenuItem.Create(Pfade1);
try
NewItem.Caption := '-';
Pfade1.Insert(Pfade1.Count, NewItem);
for i := 0 to slKeyNumbers.Count-1 do // in einer Schleife alle Dateien hinzufügen (nur die Dateinamen)
begin
NewItem := TMenuItem.Create(Pfade1);
// NewItem.Caption := '&'+IntToStr(i)+' '+ExtractFilename(ini.ReadString('History', IntToStr(i), ''));
NewItem.Caption := '&'+IntToStr(i)+' '+ini.ReadString('History', IntToStr(i), '');
if NewItem.Caption = '' then
continue;
NewItem.Tag := i; // Menüeintrag eindeutig markieren mit der Tag-Eigenschaft
NewItem.OnClick := MyMenuItemClick; // Menüeintag mit der Ereignissprozedur verbinden
Pfade1.Insert(Pfade1.Count, NewItem);
end;
finally
NewItem.Free;
end;
end;
finally
slKeyNumbers.Free;
end;
finally
ini.Free;
end;
end;
procedure TMainForm.Pfade1Click(Sender: TObject);
var
ini : TInifile;
slKeyNumbers : TStringList;
KeyNumber : Integer;
begin
ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'\Einstellungen.ini');
try
slKeyNumbers := TStringList.Create;
try
ini.ReadSectionValues('History', slKeyNumbers);
KeyNumber := slKeyNumbers.Count;
{ mein schneller Versuch die Anzahl zu begrenzen }
if slKeyNumbers.Count = 9 then
begin
ini.DeleteKey('History', '0');
ini.WriteString('History', '0', ed_path.Text);
end
else
{ende des versuches}
{Dopplung ausschliessen}
if ini.ValueExists('History',ed_path.Text)=True then
begin
ShowMessage(ed_path.Text+'vorhanden');
exit;
end
else
ini.WriteString('History', IntToStr(KeyNumber), ed_path.Text); // Dateiname in Ini eintragen, der Key ist eine Ziffer
finally
slKeyNumbers.Free; // Stringliste freigeben
end;
finally
ini.Free; // Ini-Objekt freigeben
end;
end;
Danke Tom
[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]
Danke
Tom
|
|
Zitat
|