Головне меню, діалоги відкриття і збереження файлів в delphi

Приступимо до програмування пунктів меню Відкрити, Зберегти, Зберегти як ..., Вихід.

Нам знадобиться загальна змінна fFilePath типу String для всіх процедур, яка буде зберігати повний шлях до відкритого файлу. Наведемо її в розділі var перед ключовим словом implementation наступним чином:

Головне меню, діалоги відкриття і збереження файлів в delphi

Такий спосіб опису дозволяє відразу «обнулити» нашу змінну.

Тепер опишемо процедуру відкриття файлу за допомогою діалогу файлів. Для цього на формі в режимі розробки, клацніть по Файл-Відкрити

Головне меню, діалоги відкриття і збереження файлів в delphi

У неї необхідно помістити наступний код:

Функція Execute діалогу fOpenDialog відкриває вікно вибору файлу. При виборі файлу і натиснення кнопки Відкрити. функція повертає True. якщо натиснута кнопка Скасування. то false. Зверніть увагу, діалог викликається з використання умови if, тобто ми перевіряємо результат виконання Execute.Еслі результат Істина, то ми продовжуємо відкриття файлу, якщо Інакше, то нічого не відбувається. Якщо не зробити таку перевірку, діалог спрацює при виборі файлу, але якщо користувач відмовиться відкривати файл і натисне Скасування, вискочить помилка тому txt.Lines.LoadFromFile спробує відкрити файл, який не вибрано.

У цій процедурі ми присвоюємо змінної fFilePath, повний шлях до вибраного файлу виду «x: \ mytxt \ txtFile.txt», який повертає функція FileName діалогу fOpenDialog і завантажуємо текст в txt.

Ось і все відкриття файлу.

Далі пункт «Зберегти як ...».

Так само натискаємо по даному пункту і в створеній процедурі TForm1.fSaveAsClick пишемо код:

if fFilePath = '' then fsavedialog.FileName: = 'Новий документ.txt'
else fsavedialog.FileName: = fFilePath;

if extractfileext (fSaveDialog.FileName) = '' then
fFilePath: = fSaveDialog.FileName + '. txt'
else fFilePath: = fSaveDialog.FileName;

Ця процедура складніша. Поясню її роботу:

Перше условіеIF - це по суті прикраса, перевіряє змінну fFilePath і якщо вона порожня, то в поле вказівки імені файлу виведе ім'я за замовчуванням «Новий документ.txt». ПеременнаяfFilePath порожня тільки в тому випадку, якщо ми будемо створювати документ, а не відкривати його для редагування. Якщо ж змінна fFilePath не порожня, то буде виведено ім'я файлу, який був відкритий.

Друге условіеIF - виконує запуск діалогу збереження.

Третя умова IF - перевіряє, чи має введене ім'я файлу розширення, якщо введено просто ім'я файлу без його розширення, то до імені додається «.txt». Функція extractfileext витягує з повного імені файлу його розширення. Наприклад, файл «Мій блокнот.txt», функція поверне його розширення «txt». Якщо не зробити цю перевірку і приєднання розширення, то буде створений файл без зазначеного розширення, і в системі він буде не впізнаним. Якщо ж залишити тільки приєднання розширення і при цьому ім'я файлу буде «Мій блокнот.txt», то до імені буде додано ще розширення «txt», в результаті отримаємо файл «Мій блокнот.txt.txt».

Створюємо процедуру TForm1.fSaveClick вищевказаним способом і пишемо наступний код:

тобто ми перевіряємо змінну fFilePath. якщо вона порожня, то викликаємо процедуру пункту меню «Зберегти як ...» - fSaveAs. По суті, ми програмно «натискаємо» на пункт меню «Зберегти як ...». Якщо ж файл був відкритий, то просто зберігаємо зміни в файл.

І останній пункт меню «Вихід».

Команда даного пункту проста і однорядковими:

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;

type
TForm1 = class (TForm)
txt: TMemo;
MainMenu1: TMainMenu;
N1: TMenuItem;
fOpen: TMenuItem;
fSave: TMenuItem;
fSaveAs: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
fOpenDialog: TOpenDialog;
fSaveDialog: TSaveDialog;
procedure fOpenClick (Sender: TObject);
procedure fSaveAsClick (Sender: TObject);
procedure fSaveClick (Sender: TObject);
procedure N3Click (Sender: TObject);

procedure TForm1.fSaveAsClick (Sender: TObject);
begin
// якщо fFilePath порожньо, то виводимо ім'я за замовчуванням
if fFilePath = '' then fsavedialog.FileName: = 'Новий документ.txt'
// якщо fFilePath не порожньо
else fsavedialog.FileName: = fFilePath;

// перевіряємо чи є расшіренеіе у заданого файлу
// якщо немає, то задаємо .txt
if extractfileext (fSaveDialog.FileName) = '' then
fFilePath: = fSaveDialog.FileName + '. txt'
// якщо є, то залишаємо
else fFilePath: = fSaveDialog.FileName;

procedure TForm1.fSaveClick (Sender: TObject);
begin
// якщо fFilePath порожня то відкриває діалог збереження
if fFilePath = '' then fSaveAs.Click
// інакше просто зберігаємо відкритий файл
else txt.Lines.SaveToFile (fFilePath);
end;

П.С. Для того щоб при відкритті тексту, з'явилися смуги прокрутки у об'ектаMemo (txt) необхідно вказати свойствоScrollBars = ssBoth.

Головне меню, діалоги відкриття і збереження файлів в delphi