Einzelnen Beitrag anzeigen

torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Doppelte Einträge in Ini vermeiden

  Alt 13. Jul 2003, 17: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
  Mit Zitat antworten Zitat