AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MRU Liste erstellen.

Ein Thema von Luckie · begonnen am 22. Jun 2003 · letzter Beitrag vom 23. Jun 2003
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

MRU Liste erstellen.

  Alt 22. Jun 2003, 19:49
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:
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;
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#2
  Alt 22. Jun 2003, 20:11
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3
  Alt 22. Jun 2003, 20:12
Das befriedigt mich noch nicht ganz.

Weitere Vorschläge?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#4
  Alt 23. Jun 2003, 06:43
Vorschlag

http://jvcl.sourceforge.net

Da gibts ne fertige Komponente dafür.


Gruß Ghostwalker
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5
  Alt 23. Jun 2003, 07:29
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6
  Alt 23. Jun 2003, 07:47
Für alle die es noch interessiert:
Delphi-Quellcode:
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;
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.

Aber nichts desto trotz: Wer den Code vereinfachen kann, soll sich keinen Zwang antun.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Tom

Registriert seit: 7. Jan 2003
318 Beiträge
 
RAD-Studio 2009 Pro
 
#7
  Alt 23. Jun 2003, 08:43
Zitat von Luckie:
Für alle die es noch interessiert:
  ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + '\mru.ini');
Da ExtractFilePath das abschließende \ enthält (zumindest wenn es nicht die Hauptebene des Datenträgers ist) enthält der Dateiname im Ergebnis ein \\. Ich hatte zumindest bei einer Windowsversion mal ein Problem mit dieser Variante von Dateinamen.

Zitat:
So geht's.
Ich sehe keine Überprüfung auf doppelte Einträge.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8
  Alt 23. Jun 2003, 08:50
Hm, tatsächlich.

Und das mit den doppelten Einträgen, muß ich mir noch mal überlegen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#9
  Alt 23. Jun 2003, 10:01
Hallo,
nur eine Kleinigkeit:
Das
ini.WriteString('MRU', IntToStr(KeyNumber), Filename); in den if-Anweisungen ist redundant.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10
  Alt 23. Jun 2003, 10:02
Stimmt danke. Ich habe da ziemlich lange rumgebastelt und probiert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz