Ноу Інти, лекція, діалоги
Тепер, коли ми налаштували наш діалог відкриття файлів OD, займемося кодом. Якщо ви пам'ятаєте, то завантаження тексту з файлу у нас відбувалася при натисканні кнопки "Читати", тобто, bRead. Клацніть двічі по цій кнопці, і ви потрапите на код її події OnClick. Наведу текст цієї події:
Пам'ятайте, ми спочатку перевіряли, чи існує цей файл. і потім, в залежності від результату, робили або одне, або інше дію. Так ось, з діалогами цього робити не потрібно! Якщо користувач вибрав файл. то немає сенсу перевіряти - чи існує він. Звичайно, існує, інакше користувач не зміг би його вибрати. Відчуваєте різницю? Новий код події буде такий:
Тепер займемося діалогом збереження файлу TSaveDialog. А тут нам все вже відомо - все властивості і метод Execute у нього в точності такі, як і у TOpenDialog. хіба що текст у властивості Title інший. Саме тому я і дав ці діалоги парою.
Змініть ім'я компонента на SD. Властивості DefaultExt і Filter налаштуйте так само, як в OD. Все інше залишається без змін. Тепер нам потрібно вписати код збереження файлу. Робиться це в події OnClick кнопки "Зберегти". Новий код події такий:
TColorDialog
TColorDialog - діалог вибору кольору. Він дуже простий. Все, що нам від нього потрібно, це властивість Color і метод Execute. Якщо діалог відбувся, то складна властивість Color буде містити обраний користувачем колір. Цей колір можна привласнити властивості Color якогось іншого компонента. Наприклад, властивість Color компонента TMemo відображає колір фону даного компонента. Я, правда, говорив, що не варто використовувати в проекті папужачі забарвлення, але наша програма навчальна, до того ж ми будемо встановлювати тільки ті кольори, які ви обрали. А тому, встановіть на форму ще одну кнопку TButton. властивість Name якої перейменуйте в bColor. а у властивості Caption напишіть Колір. Не забудьте зняти в властивості Anchors закріплення до верхнього краю, і встановити закріплення до нижнього, як ми робили це з іншими кнопками.
Далі, нам буде потрібно встановити на форму компонент TColorDialog:
Мал. 15.3. компонент TColorDialog
Цей компонент. як і всі інші компоненти, невізуальний, тому встановлюйте його, куди хочете. Властивість Name діалогу перейменуйте в CD. Оброблювач OnClick для кнопки bColor дуже простий:
TFontDialog
TFontDialog - діалог вибору шрифту. У цьому діалозі користувач може вибрати як сам шрифт. так і його розміри, накреслення, ефекти і колір. Не плутайте колір фону і колір шрифту! Білий або жовтий текст, наприклад, прекрасно Новомосковскется на синьому або чорному тлі. Нам буде потрібно встановити на форму один такий компонент:
Мал. 15.4. компонент TFontDialog
Властивість Name компонента перейменуйте в FD. У коді нам буде потрібно його складне властивість Font. яке буде містити той шрифт. що вибрав користувач. і яке ми зможемо привласнити властивості Font іншого компонента.
Також нам потрібно кнопка з ім'ям bFont і текстом Шрифт у властивості Caption. Не забувайте про прив'язки кнопок до нижньої межі форми. Оброблювач OnClick для кнопки такий:
Дякуємо за Ваш чудовий курс!
У самостійній роботі №2 при компіляції модуля MyCript.pas (ОС: Windows 7 x64, Lazarus 1.4 win64) видається помилка на код асемблера
mycript.pas (54,5) Error: Asm: [push reg32] invalid combination of opcode and operands
mycript.pas (95,5) Error: Asm: [pop reg32] invalid combination of opcode and operands
Я розумію, що курс готувався для 32 розрядних ОС, але як бути в разі 64 розрядних систем?
У обробниках пунктів меню FileCreate і FileOpen, а також в обробнику закриття форми OnClose - в цих трьох процедурах міститься один і той же код
їх перед створенням нового тексту>
if Memo1.Modified then begin
// якщо користувач згоден зберегти зміни:
if MessageDlg ( 'Збереження файлу',
'Поточний файл був змінений. Зберегти зміни?',
mtConfirmation, [mbYes, mbNo, mbIgnore], 0) = mrYes then
FileSaveClick (Sender);
end; // if
Дозвольте запитати: чи не краще було б винести цей код в окрему процедуру, наприклад - в обробник події форми OnCloseQuery? Наскільки я пам'ятаю з досвіду Delphi, виклик цієї процедури сам по собі не повинен призводити до закриття форми. А значить, її можна використовувати і в процедурах очищення Memo1 і читання з файлу. Або в Lazarus так робити не можна?