Добавить файлы в меню Reopen
Оформил: DeeCo
Чтобы поместить в конец меню "Файл" список недавно отрывавшихся файлов можно
создать список с этими файлами, процедуру обновления меню и процедуру открывания
файла.
Список файлов нужно заполнить при запуске программы. Здесь список файлов
сохраняется в ini-файл. Процедура открытия файлов помещает название открываемого
файла в начало списка с файлами и вызывает процедуру обновления. При закрытии
программы список нужно сохранить на диске.
...
public
mi: array[0..9] of TMenuItem;
FilesCount: integer;
Files: TStringList;
procedure UpdateMenu;
procedure OpenFile(FileName: string);
procedure OnReopen(Sender: TObject);
end;
...
uses IniFiles;
procedure TForm1.UpdateMenu;
var
i: integer;
begin
for i := 0 to FilesCount - 1 do
mi[i].Destroy;
FilesCount := Files.Count;
for i := 0 to FilesCount - 1 do
begin
mi[i] := TMenuItem.Create(self);
mi[i].Caption := Files.Strings[i];
mi[i].OnClick := OnReopen;
miFile.Add(mi[i]);
end;
end;
procedure TForm1.OpenFile(FileName: string);
var
index: integer;
begin
Memo1.Lines.LoadFromFile(FileName);
index := Files.IndexOf(FileName);
if index <> 0 then
begin
if index < 0 then
Files.Insert(0, FileName)
else
Files.Exchange(0, index);
while Files.Count > 10 do
Files.Delete(10);
UpdateMenu;
end;
end;
procedure TForm1.OnReopen(Sender: TObject);
begin
OpenFile((Sender as TMenuItem).Caption);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
ini: TIniFile;
i: integer;
begin
FilesCount := 0;
Files := TStringList.Create;
ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'files.ini');
ini.ReadSection('files', Files);
for i := 0 to Files.Count - 1 do
Files.Strings[i] := ini.ReadString('files',
Files.Strings[i], '');
ini.Destroy;
UpdateMenu;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
ini: TIniFile;
i: integer;
begin
ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) +
'files.ini');
ini.EraseSection('files');
for i := 0 to Files.Count - 1 do
ini.WriteString('files', IntToStr(i),
Files.Strings[i]);
ini.Destroy;
Files.Destroy;
for i := 0 to FilesCount - 1 do
mi[i].Destroy;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
OpenFile(OpenDialog1.FileName);
end;
|