Отправляет email-рассылки с помощью сервиса Sendsay

Инвестирование с нуля

  Все выпуски  

Программирование на Си и С++ с нуля: Формы


Школа программирования

153) Программирование на С++: Формы

До сих пор мы рассматривали работу с одной формой и, соответственно, с одним модулем (набором файлов, описывающих работу формы или некий законченный смысловой блок). Теперь изучим, как добавить к проекту вторую форму и как ее вызвать.

Создадим новый проект и добавим на форму кнопку. Дадим команду File - New - Form - и к проекту добавится новая форма. Она получит по умолчанию имя Form2 и будет доступна в менеджере проекта и проектировщике под этим именем. Но в запущенной программе она видна не будет - ее надо вызывать программно.

Создадим обработчик нажатия на кнопку и запишем в нем одну команду:

   void __fastcall TForm1::Button1Click(TObject *Sender)
  {
   Form2->Show();
  }

Эта команда означает, что вызывается метод Show (визуализация формы) объекта Form2 (второй формы). Однако в текущем файле Unit1.cpp доступа ко второй форме пока нету. Его надо организовать явно - добавить в начало файла инструкцию подключения заголовочного файла Unit2.h :

   #include "Unit1.h" // эта строка уже была
   #include "Unit2.h" // эта строка добавлена вручную

Запустим программу, нажмем кнопку - на экране появится вторая форма. Между двумя окнами программы можно свободно переключаться, а после закрытия второй формы ее можно вновь открыть нажатием на кнопку.

Далеко не всегда удобно держать открытыми одновременно несколько окон одной программы. Как правило, вспомогательные формы вызываются для ввода различных настроек и работают в так называемом модальном режиме - пока такое окно, называемое диалоговым, не закроется, переключиться на исходное окно невозможно.

Для показа окна в модальном режиме используют метод ShowModal:

    Form2->ShowModal();

При этом желательно диалоговое окно Form2 оформить подходящим образом - в частности, запретить изменять его размер. Для этого в свойстве формы BorderStyle выбирают значение bsDialog (оформление диалогового окна), а в свойстве BorderWidth (ширина границ) вводят число 2.

Метод ShowModal хорош еще тем, что возвращает значение - результат взаимодействия пользователя с модальным окном. Таким образом мы можем проверить, принял ли пользователь предложенные в окне модификации, или же отказался от них. Для поддержки такого режима надо задать возвращаемый модальный результат элементам управления на форме.

Добавим на первую форму поле ввода. Перейдем ко второй форме и добавим на нее поле ввода и две кнопки. У каждой из кнопок есть свойство Modalresult - результат, который форма вернет при нажатии на эту кнопку. Назовем первую кнопку ОК (свойство Caption) и выберем в свойстве Modalresult значение mrOk. Вторую кнопку назовем "Отмена" и в свойстве Modalresult зададим значение mrCancel. Теперь нажатие на любую из этих кнопок приведет к закрытию формы.

Перейдем к первой форме - к обработчику нажатия на кнопку. Введем в него следующий код:

  void __fastcall TForm1::Button1Click(TObject *Sender)
  {
   if( Form2->ShowModal() == mrOk )
     Edit1->Text = Form2->Edit1->Text;
  }

В условии условного оператора вызывается метод ShowModal() - в момент вызова работа данного обработчика приостанавливается, и на экране появляется вторая форма. Человек нажимает одну из двух кнопок. Если он нажал первую кнопку, значением, возвращаемым методом ShowModal, становится константа mrOk. Условие истинно, и выполлняется оператор, в котором в текущее поле ввода Edit1 первой формы копируется содержимое поля ввода Edit1 второй формы. Если же будет нажата кнопка "Отмена", то результатом ShowModal будет константа mrCancel, и копирования не произойдет.

Аналогичным способом организуется взаимодействие с другими элементами управления сторонних форм и с большим числом форм (тремя, пятью итд).


(c) 2004-2007 Сергей Бобровский bobrovsky as russianenterprisesolutions.com

Школа программирования с нуля
Все предыдущие выпуски базового курса всегда тут:
http://www.infiltration.ru/p/

Неофициальный сайт поддержки (со срочными вопросами - сюда):
www.prog-begin.net.ru.


Мои учебные курсы "Технологии Delphi / C++ / C#. Разработка приложений для бизнеса".
http://shop.piter.com/display.phtml?a_id=17681&web_ok=all

Все эти учебные курсы рассчитаны не только на разработчиков, но и на всех тех, кто хочет стать ИТ-менеджером. Для этого как минимум нужно иметь общее представление о современных технологиях разработки и их истории и владеть соответствующей терминологией.
В книгах описаны десятки технологий, каждой из которых посвящены отдельные книги. Таким образом, купив один учебный курс, вы существенно сэкономите :) В книгах полностью описаны:
- Delphi (версия 2006, полностью совместимая с Turbo Delphi) для обеих платформ - Win32 и .NET;
- C# (новый язык Microsoft, на котором базируется платформа .NET и все новые версии Windows);
- C++ для платформы Win32.
Охвачены также темы работы с файлами на этих платформах, создания файл-серверных, клиент-серверных, распределенных приложений, веб-программ (Indy, ASP.NET, веб-сервисы). Описаны языки SQL и OCL. Немало глав посвящены истории программирования и различных технологий. Особое внимание уделено созданию программ с помощью технологии ECO и языка моделирования UML - программы фактически рисуются, и теперь даже для создания корпоративных приложений и их переноса в Интернет не обязательно знать программирование!
Отдельная часть отведена технологиям организации групповой работы, управления требованиями, контроля версий, локализации и тестирования.
Тут подробнее про книги.

Мои книги, которые пока доступны в продаже:


Дизайн рассылки: Алексей Голубев - Web-дизайн и web-программирование


В избранное