Как добавить в меню избранные файлы
В нашей программе 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;
Скачать файл можно здесь.
Комментарии