Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Лабораторная работа №2
Разработка интерфейса пользователя
В этой практической работе вы научитесь создавать приложения Win32 с использование визуальных компонентов. В качестве примера мы рассмотрим разработку текстового редактора по своим возможностям схожего с программой WordPad.
1. Сначала мы должны определить список функций, выполнение которых должен поддерживать наш редактор (мы ограничимся только общими функциями, остальные вы можете реализовать сами): New, Open, Save, SaveAs, Exit, Print, About, Help, Copy, Past, Cut, Delete, Select_All. Смысл этих функций вам должен быть понятен без перевода.
2. На странице Win32 найдите компонент ImageList и поместите его на форму. Дважды щёлкнув на этом компоненте, вы откроите диалог, при помощи которого вам необходимо добавить в этот компонент иконки, которые будут обозначать описанные выше функции.
3. Поместите на форму компонент ActionList, настройте его свойство Images так, чтобы оно ссылалось на компонент ImageList, и дважды щёлкните на нём. При помощи появившегося диалога создайте отдельный объект Action для каждой функции, затем необходимо настроить каждый из этих объектов. Выберите первый, в Object Inspector появятся его свойства, переименуйте его (имя должно быть на английском), в свойство Caption поместите текст, (можно на русском) поясняющий назначение функции.
Используя свойство ImageIndex, выберите нужную иконку. Аналогичным способом опишите каждую функцию.
4. Поместите на форму компонент MainMenu, и дважды щёлкните на нём. Процесс создания программного меню очень прост и не требует особых комментариев. Отмечу только, что названия верхней строчки меню вам необходимо задать самим, используя свойство Caption, а для пунктов меню достаточно из выпадающего списка свойства Action выбрать нужную нам функцию. Для того чтобы иконки отображались и в меню установите свойство компонента MainMenu в ImageList1.
5. Теперь создадим кнопочную панель. Для этого поместим на форму компонент ControlBar (Additional). Его свойство Align нужно установить в значение alTop (т.е. привязать этот компонент к верхней границе формы). При помощи свойства Picture вы можете загрузить текстуру. Теперь в компонент ControlBar поместите компонент ToolBar (Win32), проследите, чтобы он располагался именно внутри своего базового компонента, и его нельзя было переместить в другое место. Затем настройте его свойство Images уже знакомым вам способом, а свойство Transparent установите в True, свойство Flat тоже установите в True, (кнопки будут прозрачными).
6. Теперь расставим кнопки по панели; для этого нажмите правую кнопку на компоненте ToolBar, в появившемся контекстном меню выберите “New Button”. Выделите появившуюся кнопку и настройте её свойство Action на нужную функцию. Поставьте кнопки для остальных функций, а при необходимости разделите их, используя Separator (обычно используется для разделения логически связанных групп кнопок). Теперь выделите все поставленные кнопки и установите для них свойство Cursor в crHandPoint.
7. Для придания нашему приложению более профессионального вида добавим компонент StatuaBar (Win32), этот компонент сразу займёт положенное ему на форме место, поэтому двигать его бессмысленно. О его возможностях мы поговорим позже.
8. Так как мы решили написать текстовый редактор, то нам потребуется компонент для отображения и редактирования текста, в качестве такового мы возьмём RichEdit(Win32). Установите его свойство Align в alClient (компонент должен занять всё свободное пространство) и удалите текст из свойства Lines.
9. Теперь перейдём к созданию контекстных меню. Приложение может иметь несколько контекстных меню, но мы ограничимся двумя. Поместите на форму два компонента PopuMenu и щёлкните на одном из них два раза. Процесс создания контекстного меню мало чем отличается от создания главного меню. В одно контекстное меню поместите функции для работы с файлами, а в другое для работы с текстом.
10. Контекстное меню, предназначенное для работы с текстом, должно вызываться при нажатии правой кнопки на тексте, поэтому выделите компонент RichEdit1 (предназначенный для отображения текста) и в его свойстве PopuMenu выберите нужное контекстное меню. Контекстное меню, содержащее файловые функции, должно вызываться с компонента ControlBar1.
На этом разработку пользовательского интерфейса можно считать законченной, но заметьте, что мы ещё не написали ни одной строчки программы.
1. Для того чтобы описать реализацию какого-либо метода, выполняющую ту или иную функцию вам необходимо: открыть компонент ActionList, выбрать одну из ранее описанных функций и сгенерировать для неё событие OnExecute. В созданную процедуру-обработчик необходимо поместить реализацию этого метода. Например, сгенерируйте событие для функции Exit и запишите в полученную процедуру команду, которая закрывает программу:
Close();
2. Независимо оттого, откуда пользователь вызвал эту функцию (кнопка, главное меню, контекстное меню) выполнится один и тот же метод.
3. Запустите программу (предварительно сохранив её), вы увидите, что и кнопки, и пункты меню не активны, кроме тех для которых существует только что написанное событие. Это очень важная особенность компонента ActionList, которую мы в дальнейшем будем использовать.
4. Для реализации файловых функций текстового редактора нам потребуются стандартные диалоги Windows. Поместите на форму компоненты SaveDialog и OpenDialog со страницы Dialogs.
5. Сгенерируйте событие для функции Open (смотри п.1) и поместите туда следующий код:
if(OpenDialog1->Execute()) RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);
Аналогичным способом создайте событие для функции SaveAs и поместите в него такой код:
if (SaveDialog1->Execute()) RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
Поэкспериментируйте с полученными функциями и самостоятельно напишите программный код, реализующий функцию Save.
5. Среди функций, которые мы определили в начале, есть функция About. Для её реализации нам потребуется дополнительная форма. Присоединить к проекту новую форму, можно выбрав в главном меню IDE Builder File->New Form. Но в данном случае мы воспользуемся репозиторием проектов Delphi и позаимствуем готовую форму оттуда. Выберите команду File->New, перед вами откроется репозиторий, который содержит шаблоны для различных типов программ. Перейдите на закладку Forms и выберите About Box.
6. Теперь ваша программа содержит два модуля. Перейдите на второй модуль(Unit) и напишите на форме этого модуля свои фамилии (для этого вам потребуются компоненты Label). Перейдите в первый модуль(Unit1) и впишите ссылку на заголовок второго модуля: #include "Unit2.h"
7. Сгенерируйте событие для функции About и вставьте в него такую строку: AboutBox->ShowModal; (AboutBox – это название формы).
8. Далее приводятся некоторые методы компонента RichEdit, пользуясь которыми вы без труда напишите функции для работы с текстом.
RichEdit1->CopyToClipboard(); – скопировать в буфер
RichEdit1->PasteFromClipboard(); – вставить из буфера
RichEdit1->ClearSelection(); – удалить выделенный текст
RichEdit1->SelectAll(); – выделить весь текст
8. Посмотрите на кнопки «вырезать» и «копировать» на панели Word. Он не активны, чтобы они изменили состояние нужно выделить текст. Чтобы реализовать подобную функцию в нашей программе необходимо изменять состояние кнопок. Найдите событие OnUpdate компонента ActionList и сгенерируйте его обработчик. В эту процедуру поместите следующий код:
Cut.Enabled=(RichEdit1->SelLength>0);
Copy.Enabled=Cut->Enabled;
Delete.Enabled=Cut->Enabled;
SelLength – это длина выделенного текста.
9. Для того чтобы распечатать текст его необходимо предварительно сохранить, а затем воспользоваться методом RichEdit1.Print(Text_Name); где Text_Name – это имя сохранённого файла.
10. Последнюю функцию New вы реализуете сами.
Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.