Частина уроку для новачків

Додатки MDI і програми SDI.

Перш ніж встановлювати вид і властивості вашого програми, треба подумати про те, який вигляд програми ви бажаєте створити. Це багато в чому залежить від його функціонального призначення. Можна вибирати між так званими MDI – або SDI-додатками.

MDI — скорочено від Multiple Document Interface (інтерфейс для одночасної роботи з багатьма документами), а SDI — від Single Document Interface (інтерфейс для роботи з одним документом). У MDI додатках два або більше вікон можуть бути активні одночасно. У SDI-додатках це неможливо. Тут в кожен момент часу може бути активним лише одне вікно.

MDI-додатки є зручним засобом для одночасного виведення на екран тексту або даних, які зберігаються у різних файлах. Таку структуру побудови вікон можна використовувати для редагування текстів, відкриваючи й виводячи на екран одночасно кілька різних документів. За допомогою цих програм можна також проводити табличні обчислення, обробляючи кілька таблиць одночасно, переносячи або порівнюючи дані з однієї в іншу. Приклад такої роботи над файлами — програма MS Word. Тут файли текстового та графічного формату відкриваються в окремих вікнах, що знаходяться всередині головного вікна програми.

Різні відкриваються документи у вікнах мають загальний робочий простір, в межах якого вони відображаються, зване батьківським вікном. Завжди в MDI-додатку батьківське вікно є головною формою додатка. Всі внутрішні форми, що називаються дочірніми вікнами відображаються в межах робочого простору батьківського вікна і не можуть бути поміщені за її межі. Навіть при згортанні. При максимізації таких вікон, вони займають весь робочий простір батьківського вікна, залишаючись всередині його.

Батьківське вікно може бути в MDI-додатках тільки одне, а дочірніх вікон може бути теоретично нескінченно.

Більшість MDI-додатків мають меню Window (Вікно) з наступними пунктами: Cascade, Arrange Icons, Tile Horizontal, Tile Vertical. З їх допомогою користувач може керувати дочірніми вікнами програми. Зазвичай нижня частина меню відокремлена і представляє список всіх відкритих вікон. Це властивість дуже зручно для швидкого переходу до того чи іншого редактируемому файлу.

Модальні вікна.

Всі SDI-вікна можна розділити за властивостями доступу один до одного як модальні та немодальному. Вони визначають, чи може користувач чи ні перемикатися на інші вікна. Коли модальне вікно відкрито, всі інші відкриті вікна стають недоступними. Приклад можна побачити практично з будь-якої програми, викликавши пункт меню «About» («Про програму»). Екранне вікно у програмі, як правило, не дає переключиться на інше, поки не буде закрито. Така властивість іноді буває дуже корисним. Наприклад, коли потрібно щоб користувач ввів пароль, а потім отримав доступ до певного вікна з даними, або вікно фільтра даних, вказавши умови відбору, отримує доступ до результату.

Отже, модальними або немодальными можуть бути тільки SDI-вікна.

З сьогоднішнього уроку ми з вами починаємо розробляти досить складний приклад простого багатовіконного текстового редактора.

Приклад MDI-додатки.
Запускаємо Delphi. В меню «File» вибираємо пункт «New Application».

Перейменовуємо властивість імені форми Name які з Form1 в MainForm.
Встановлюємо властивість в інспекторі об’єктів FormStyle в fsMDIForm. Його можна вибрати з випадного списку доступних властивостей. Властивість означає, що дане вікно буде батьківським в MDI-додатку.

У палітрі компонентів вибираємо MainMenu. Це другий компонент зліва на вкладці Standart. Поміщаємо його на проектувальник форми Form1. Двічі клацаємо по ньому. З’являється конструктор меню вікна. Тут і далі для того, щоб викликати конструктор для розміщеного у формі компонента головного меню (MainMenu), необхідно двічі клацнути по ньому мишкою або двічі клікнути в Object Inspector за властивістю Items. Далі, користуючись властивістю Caption виберіть меню такий вигляд, як на малюнку. Примітка: вибрати потрібний пункт можна мишкою, для зміни назви, виберіть у властивість Caption інспектора об’єктів, для відокремлення секцій меню лінією використовуйте знак тире у властивості Caption для потрібного пункту меню. Створення меню дуже просте. Ви відразу бачите результат зміни, додавання або видалення пунктів у редакторі форми. Ви завжди можете поповнити пункти меню, використовуючи доповнення, виділені пунктирною рамкою. Завжди можна вставити або видалити пункт меню в потрібне місце. Для цього клацніть правою клавішею миші. Вибрати цікаву дію можна з випадаючого меню.

Отже, зміст головного меню: Файл, Правка Вікна Допомога
Новий Вирізати Упорядкувати Про програму
Відкрити Копіювати
Зберегти Вставити
Зберегти як:
Закрити
Вихід

Вибираємо пункт меню «Вікна» і перейменовуємо його ім’я (ідентифікатор) Name в інспекторі об’єктів в WindowMenu.

Вибираємо мишкою форму MainForm. В Object Inspector властивості WindowMenu встановлюємо їх спадаючого списку пункт меню WindowMenu. Тепер під час роботи програми всі дочірні вікна будуть списком відображатися в меню «Вікна».

Оскільки дочірніх вікон в цьому додатку буде багато і за зовнішнім виглядом вони подібні, то немає сенсу проектувати кожне вікно окремо. Спроектуємо одне. Для приміщення в проект нової форми вибираємо з меню «Файл» пункт «New Form».

Встановлюємо розміри вікна Form2 меншими головного батьківського вікна.

Перейменовуємо властивість Name для цього вікна з Form2 в ChildForm.

Встановлюємо властивість дочірнього вікна для MDI-додатки FormStyle в fsMDIChild.

Вибираємо з палітри компонентів Memo і встановлюємо його в дочірню форму ChildForm.

Міняємо властивість Align для цього компонента на alClient. Він негайно поширюється на все доступне простір вікна.

Далі будемо писати подія вибору пункту меню «Новий». При натисканні на нього повинно з’являтися дочірнє вікно. Робимо наступним чином. Оскільки дочірніх вікон буде безліч, то ми програма повинна автоматично при необхідності створювати. За замовчуванням Delphi встановлює автоматичне створення вікна під час запуску програми. Це позбавляє програміста від написання деяких команд. В даному випадку ми все зробимо самі. Вибираємо з меню «Project» пункт «Options:». На вкладці Forms знімаємо установку «Auto-create forms» для вікна ChildForm. Для цього вибираємо його і переганяємо одинарної стрілкою в бік «Available forms». Натискаємо кнопку OK.

Зберігаємо проект на диску. Для цього провідником Windows створюємо окрему папку для зберігання цього прикладу. В меню «File» вибираємо пункт «Save All». Далі з’являються діалоги збереження модулів вікон і файл проекту. Модуль Unit1 батьківського вікна можна назвати, зберігши його під ім’ям MainUnit. Модуль Unit2 дочірнього вікна програми. можна зберегти під ім’ям ChildUnit. Весь проект можна зберегти під ім’ям MyEdit.

Тепер напишемо в редакторі коду процедуру створення дочірнього вікна. Вибираємо вікно MainForm і двічі клацаємо по компоненту MainMenu1. Вибираємо пункт меню «Новий». В Object Inspector переходимо на вкладку подій Events. Двічі клацаємо по полю, правіше OnClick. Або натискаємо Ctrl+Enter. З’являється готовий заголовок процедури натискання на пункт меню «Новий». Між begin і end пишемо наступну рядок:

TChildForm.Create(Self);

Оскільки в цьому вікні створюється інший, то в перейменований модуль MainUnit необхідно підключити ChildUnit. Для цього вибираємо з меню «Файл» пункт «Use Unit:» і вказуємо модуль ChildUnit. Натискаємо OK.

Все, запускаємо програму на виконання. Під час роботи зверніть увагу на список з’явилися вікон в меню «Вікна», за яким зручно перемикатися на необхідне вікно.

У наступних уроках ми докладніше зупинимося на написанні цього прикладу. Якщо в цьому уроці у вас щось не виходить, то приклад на даному етапі розробки можна скачати тут (2 KB). Якщо ви надалі відкриваєте свій або скачаними проект, не забувайте, що потрібно відкривати DPR файл.

Частина уроку для просунутих програмістів

Перетягування файлів в додаток

Іноді дуже корисно позбавити користувача від зайвих операцій при відкритті файлу. Він повинен натиснути на кнопку «Відкрити», потім знайти потрібний каталог, вибрати файл. Простіше перетягнути мишкою файл відразу у вікно програми. Розглянемо приклад перетягування Drag & Drop у вікно довільного текстового файлу, який відразу ж відкривається в компоненті Memo1.

Простий приклад текстового редактора, який розглядається нижче, можна скачати тут (3KB).

Для початку в розділі Uses необхідно підключити модуль ShellAPI.

В private області вікна потрібно вставити наступний рядок:

procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES; //отримання повідомлень про перенесення файлу у вікно програми

Процедура обробки цього повідомлення буде виглядати наступним чином:

procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
CFileName: array[0..MAX_PATH] of Char; // змінна, що зберігає ім’я файлу
begin
try
If DragQueryFile(Msg.Drop, 0, CFileName, MAX_PATH)>0 then // отримання шляху файлу
begin
Form1.Caption:=CFileName; // ім’я файлу в заголовок вікна
Memo1.Lines.LoadFromFile(CFileName); // відкриваємо файл
Msg.Result := 0;
end;
finally
DragFinish(Msg.Drop); // відпустити файл
end;
end;

Для того, щоб форма знала, що може приймати такі файли, необхідно у процедурі створення вікна вказати:

procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, ‘True’);
end;

Спасибі Вам deisoft.
уроки для новачків !
Ще Новачки у читайте мої статті 😉