Добавить файлы в меню Reopen |
ОГЛАВЛЕНИЕ    HOME  MAIL |
Чтобы поместить в конец меню "Файл" список недавно отрывавшихся файлов можно создать список с этими файлами, процедуру обновления меню и процедуру открывания файла. Список файлов нужно заполнить при запуске программы. Здесь список файлов сохраняется в 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; email: delphi4all@narod.ru |