![]() |
MRU Liste erstellen.
Ich habe einen Knoten im Hirn.
Ich habe hier Code für eine MRU Liste geschrieben, also eine Liste mit den zu letzt geöffneten Dateien. So weit so gut, geht auch alles. Nur würde ich sie gerne bergrenzen auf eine bestimmte Anzahl von Dateien. Also wenn es 5 Stück sind dass er dann die von vorne anfängt die Einträge zu ersetzen. Aber ich bekomme es ums verrecken nicht gebacken. Hier mal mein Code:
Delphi-Quellcode:
Aber irgendwie macht er nicht das was ich will. Habe ich vier voll, setzt er den fünften an die erste Stelle, aber den nächsten dann nicht an die zweite sondern ans Ende.
procedure TForm1.AddLastFileToList(Filename: String);
var ini: TInifile; slKeyNumbers: TStringList; KeyNumber, LastKeyWritten: Integer; begin ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + '\mru.ini'); try slKeyNumbers := TStringList.Create; try ini.ReadSectionValues('MRU', slKeyNumbers); KeyNumber := slKeyNumbers.Count; LastKeyWritten := ini.ReadInteger('LKW', 'LastKeyWritten', 0); if KeyNumber = MAXFILES then begin KeyNumber := MAXFILES-LastKeyWritten-1; ini.WriteString('MRU', IntToStr(KeyNumber), Filename); end; ini.WriteString('MRU', IntToStr(KeyNumber), Filename); ini.WriteInteger('LKW', 'LastKeyWritten', KeyNumber); finally slKeyNumbers.Free; end; finally ini.Free; end; end; |
Hi,
und wenn Du ein Arrays als "Zwischenpuffer" nimmst, der 5 lang ist? Immer wenn ein neuer Eintrag dazu kommt und das Array schon voll ist, dann kannst Du den letzten löschen, die restlichen 4 nachrücken und an der leeren Stelle den neuen Eintrag einfügen!? Grüsse, Daniel :hi: |
Das befriedigt mich noch nicht ganz.
Weitere Vorschläge? |
|
Danke für den Hinweis. Aber fertige Komponenten will ich nicht, habe ich selber schon gefunden bzw. weiß, dass es sie gibt. Bloß so viel Code ist es ja auch nicht und wegen jeden Fliegendreck extra eine Komponente installieren? Kein Wunder, dass wir bei den C/C++ Programmierern als Klicki-Bunti-Programmierer verschrieen sind.
|
Für alle die es noch interessiert:
Delphi-Quellcode:
So geht's. Ich war eben nur immer darauf versessen gewesen und wollte es mit einer if-Anweisung lösen und hatte dabei aus dem Blick verloren, dass man doch zwei braucht.
procedure TForm1.AddLastFileToList(Filename: String);
var ini: TInifile; slKeyNumbers: TStringList; KeyNumber, LastKeyWritten: Integer; begin ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + '\mru.ini'); try slKeyNumbers := TStringList.Create; try ini.ReadSectionValues('MRU', slKeyNumbers); KeyNumber := slKeyNumbers.Count; LastKeyWritten := ini.ReadInteger('LKW', 'LastKeyWritten', 0); if (KeyNumber = MAXFILES) and (LastKeyWritten = MAXFILES-1) then begin KeyNumber := 0; ini.WriteString('MRU', IntToStr(KeyNumber), Filename); end; if (KeyNumber = MAXFILES) and (LastKeyWritten < MAXFILES-1) then begin KeyNumber := LastKeyWritten+1; ini.WriteString('MRU', IntToStr(KeyNumber), Filename); end; ini.WriteString('MRU', IntToStr(KeyNumber), Filename); ini.WriteInteger('LKW', 'LastKeyWritten', KeyNumber); finally slKeyNumbers.Free; end; finally ini.Free; end; end; Aber nichts desto trotz: Wer den Code vereinfachen kann, soll sich keinen Zwang antun. |
Zitat:
Zitat:
|
Hm, tatsächlich.
Und das mit den doppelten Einträgen, muß ich mir noch mal überlegen. :? |
Hallo,
nur eine Kleinigkeit: Das
Delphi-Quellcode:
in den if-Anweisungen ist redundant.
ini.WriteString('MRU', IntToStr(KeyNumber), Filename);
|
Stimmt danke. Ich habe da ziemlich lange rumgebastelt und probiert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz