Внешний вид сайта:

Как добавить в меню избранные файлы

Многие приложения имеют в меню пункты Последние Открытые Файлы и это широко используется для удобства пользователей. Именно последние сохраненные файлы нужно поместить в порядке сохранения в пункты меню. Это дает возможность открывать последние файлы без поиска их на жестком диске.

В нашей программе Delphi, а также программное обеспечение ПК будет четыре пункта последних сохраненных файлов. Вы можете изменить их количество в дальнейшем. Например, мы будем открывать графические точечные изображения.

Эта программа делится на несколько этапов:

  • Открытие файла.
  • Сохранение файла, как избранное.
  • Работа с ним.
  • Добавление его в меню.
  • Вызов процедуры в создании или уничтожении формы.
  • Чтение растрового изображения.

Для сохранения и чтения избранного мы будем использовать INI-файл. Использование INI-файла позволяет добиться высокой скорости.

Для начала добавьте на форму компоненты: TMainMenu, TImage и TOpenDialog. Создайте меню, как показано на картинке внизу. Имена пунктов меню с заголовком rec будут соответственно rec1, rec2, rec3 и т.д.

Затем изменим свойство AutoSize компонента TImage в True. Это позволит изменять размер изображения автоматически. Установите свойство Filter компонента TOpenDialog в Bitmap файлы|*.bmp. Измените свойство AutoHotKey компонента TMainMenu на maManual. Добавьте модуль IniFiles в разделе uses и напишите следующий код в разделе Private Declarations.

uses
{ … }, IniFiles;

private
{ Private declarations }
 Recentlist: TStringList;
 RecentChange: Boolean;
  procedure OpenRecent;
  procedure ManageRecent;
  procedure AppleRecent(const FileName: String);
  procedure SaveRecent; 
  procedure Open(const Filename: String); 
end;

Теперь действия. Создаем INI-файл, который будет называться MyIniFile.ini. По умолчанию, он будет в папке Windows. Все операции будем выполнять при помощи TStringList.

Получаем пути к файлам из INI-файла

Эта процедура позволяет восстанавливать пути к различным файлам из StringList.

procedure TForm1.OpenRecent; 
var
  FileIni: TIniFile;
  i: Integer;
  St: String;
begin
 RecentList:= TStringList.Create;  //Создаем StringList
 FileIni:= TIniFile.Create('MyIniFile.ini'); //Создаем INI-файл, если его нет
for i:= 1 to MaxRecent do // Для каждого из последних ...
begin
 St:= FileIni.ReadString(
        'Recent',Concat('rec',IntToStr(i)),'');
         // Читаем пути к файлам
 RecentList.Add(St); // Добавляем пути к файлам
 end;
 while RecentList.IndexOf('') <> -1 do 
    // Если есть пустые, удаляем
 Recentlist.Delete(FavList.IndexOf(''));
end;

Сохраняем пути к файлам в INI-файл

Во-первых, мы проверяем, есть ли изменения в меню, а затем записываем в порядке открытия файлов.

procedure TForm1.SaveRecent; 
var
  FileIni: TIniFile;
  i: Integer;
begin
if RecentChange then // Если было изменено, то...
begin
  FileIni:= TIniFile.Create('MyFileIni.ini'); 
  // Создаем INI-файл, если его нет
  i:= 0; //Инициализируем переменную i в 0
  while (i < (Recentlist.Count)) and (i < MaxRecent) do 
    // Для каждого элемента меню"rec"
    begin
      FileIni.WriteString('Recent',concat('rec',IntToStr(i+1)),
         Recentlist.Strings[i]); 
      // Сохраняем пути к файлам из пунктов меню
      Inc(i); // Увеличиваем переменную i
    end;
  end;
end;

Управляем StringList

Эта процедура позволяет выполнять определенные операции с StringList. Или мы добавляем новый путь к файлу и удаляем последний пункт, или изменяем положение одного из путей, если он уже был.

procedure TForm1.AppleRecent(const FileName: String); 
begin
  RecentChange:= True; // Указывает, что меню было изменено
  if RecentList.IndexOf(FileName)= -1 then 
  // Если новый путь не найден, то...
  begin
    RecentList.Insert(0, FileName); 
    // Новый путь вначале
    if RecentList.Count > MaxRecent then 
      // Если число строк превышает максимально допустимое
    RecentList.Delete(MaxRecent); 
    // Удаляем последний путь к файлу
  end
  else // Иначе...
    RecentList.Move(RecentList.IndexOf(FileName),0);
  ManageRecent; // Вызываем  процедуру ManageRecent
end;

Изменения в меню

Здесь мы работаем с пунктами меню.

procedure TForm1.ManageRecent;
var
  MenuItem: TMenuItem;
  i: Integer;
begin
 i:= 0; // Инициализируем переменную i
while (i < (Recentlist.Count)) and (i < MaxRecent) do 
//Для каждого элемента меню rec
begin
 MenuItem:= TMenuItem(FindComponent(concat('rec', IntToStr(i+1)))); 
 MenuItem.Visible:= True; // Отобразим меню
 MenuItem.Caption:= RecentList.Strings[i]; 
// Сохраняем текст элемента меню в StringList
 Inc(i); // Увеличим переменную i
end;
 RecSeparator.Visible:= rec1.Visible; 
// Если есть, то отображаем
end;

Когда форма будет создаваться или уничтожаться, теперь Вы должны вызывать некоторые процедуры.

procedure TForm1.FormCreate(Sender: TObject); 
begin
 OpenRecent; // Вызываем процедуру OpenRecent
 ManageRecent; // Вызываем процедуру ManageRecent
end; 

procedure TForm1.FormDestroy(Sender: TObject); 
begin
 SaveRecent; // Вызываем процедуру SaveRecent
 Recentlist.Free; // Уничтожаем объект
end;

Чтение растрового изображения

А вот и оставшаяся часть программы, которая будет читать растровое изображение, когда Вы нажмете Открыть или Последние файлы в меню.

procedure TForm1.OpenFile(const FileName: string);
begin
  Image1.Picture.LoadFromFile(FileName); 
// Открываем файл в компонент TImage
  AppleRecent(FileName); 
// Вызываем процедуру AppleRecent с параметром OpenDialog1.FileName
end;

procedure TForm1.OpenClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
    OpenFile(OpenDialog1.FileName);
end;

procedure TForm1.rec1Click(Sender: TObject);
begin
  OpenFile(rec1.Caption);
end;

procedure TForm1.rec2Click(Sender: TObject);
begin
  OpenFile(rec2.Caption);
end;

procedure TForm1.rec3Click(Sender: TObject);
begin
  OpenFile(rec3.Caption);
end;

procedure TForm1.rec4Click(Sender: TObject);
begin
  OpenFile(rec4.Caption);
end;

Скачать файл можно здесь.

Комментарии

Нет комментариев. Ваш будет первым!