Du skal selv lave en intern liste som du kan gemme i f.eks en .ini fil.
I menuen laver du 5 menupunkter. Kald dem (deres navn ikke caption) Recent1 recent2 .. recent5
Når programmet starter op skal det læse .ini filen op. Sætte recent1-5's caption ELLER sætte deres visible=false hvis der ikke er nogle recent files eller hvis der kun er f.eks 3.
Når man så lukker en fil i programmet skal den fil ligges øverst i den interne liste. (som selvfølge skal gemmes) Menu punkterne skal også opdates.
Stort set den måde jeg ville gøre det på, men jeg ville dog nok anbefale at man bruger registrerings databasen til at gemme fil navnene i. Evt. kan man vælge at læse/skrive i den liste, som Windows og/eller office programmerne benytter.
Jeg mener det sted i registrerings databasen hvor fx. WordPad gemmer info om de sidst benyttede filer. Wordpad gør det på: \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\WordPad\Recent File List.
At brugde denne position giver selvsagt kun mening, hvis det er de pågældende filer du skal ha' fat i, fx. hvis du er ved at lave en text editor.
Hvis det er dine 'egne' filer du skal bruge, så laver du bare din egen registry key. Jeg banker lige et hurtigt eksempel sammen - to sek.
Procedure TForm1.LoadRecentFiles; Var Reg : TRegIniFile; Index : Integer; Begin Reg:=TRegIniFile.Create; Try Reg.RootKey := RootKey; If Reg.OpenKey(RegistryKey, False) Then For Index := 1 to 5 Do fRecent[Index] := Reg.ReadString('RecentFiles', 'Recent'+IntToStr(Index), ''); Finally Reg.Free; End; end;
procedure TForm1.SaveRecentFiles; var Reg : TRegIniFile; Index : Integer; begin Reg:=TRegIniFile.Create; Try Reg.RootKey := RootKey; If Reg.OpenKey(RegistryKey, True) Then For Index := 1 to 5 Do Reg.WriteString('RecentFiles', 'Recent'+IntToStr(Index), fRecent[Index]); Finally Reg.Free; End; end;
procedure TForm1.UpdateRecentMenuItems; Var Index : Integer; TempMenuItem : TMenuItem; begin For Index := 1 to 5 Do Begin Case Index Of 1 : TempMenuItem := miRecent1; 2 : TempMenuItem := miRecent2; 3 : TempMenuItem := miRecent3; 4 : TempMenuItem := miRecent4; 5 : TempMenuItem := miRecent5; End;
If fRecent[Index]<>'' Then Begin TempMenuItem.Caption := '&'+IntToStr(Index)+' '+fRecent[Index]; TempMenuItem.Visible := True; End Else TempMenuItem.Visible := False; End; end;
Jeg bemærker lige det sædvanlige problem: Hvis man et eller andet sted skriver 2 stk. '-chars, så viser stedet her kun et enkelt.
NiP
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.