- •Программирование для Windows
- •Литература
- •Вам необходимо знать и уметь
- •Первая программа
- •Соглашения операционной системы Windows
- •Вызовы функций Windows
- •Идентификаторы, написанные прописными буквами
- •Новые типы данных
- •Описатели
- •Венгерская нотация
- •Точка входа программы
- •Оконная процедура
- •Регистрация класса окна
- •Создание окна
- •Отображение окна
- •Цикл обработки сообщений
- •Оконная процедура
- •Обработка сообщений
- •Воспроизведение звукового файла
- •Сообщение wm_paint
- •Сообщение wm_destroy
- •Сложности программирования для Windows
- •Синхронные и асинхронные сообщения
- •Думайте о пользователе
- •Лекция3. Приступаем с изучению компонент
- •Урок 4. Класс tObjectи его потомки
- •Урок 5. Работа с кнопками
- •Урок 6. Компонент ActionList
- •Урок 7. Работаем с меню (класс tMainMenu)
- •Урок 8. Работаем с контекстным меню (класс tPopupMenu)
- •Урок 9. Компонент Edit
- •Урок 10. Работаем с двумя формами
- •Урок 11. Текст (компоненты tLabel и tStaticText)
- •Урок 12. Компонент ListBox
- •Урок 13. Компонент ComboBox
- •Урок 14. Используем api-функции
- •Урок 15. Разные MessageBox'ы
- •Урок 16. Компонент CheckBox
- •Урок 17. Компонент RadioButton
- •Урок 18. Класс tStrings
- •Урок 19. Класс tStringList
- •Урок 20. Работаем с сетью. Клиент (класс tClientSocket)
- •Урок 21. Работаем с сетью. Сервер (класс tServerSocket)
- •Урок 22. Компонент ImageList
- •Урок 23. Пересчитываем компоненты на форме
- •Урок 24. Форма - добавление методов
- •Урок 25. Форма - добавление полей
- •Урок 27. Значок на панели задач (компонент tTrayIcon)
- •Урок 28. Работаем со сплиттером
- •Урок 29. Компонент Panel
- •Урок 30. Совместное использование сплиттера и Panel'ей
- •Урок 31. Компонент HotKey
- •Урок 32. Компонент StatusBar
- •Урок 33. Установка главной формы приложения
- •Урок 34. Рисование на форме
Урок 10. Работаем с двумя формами
Приложение редко состоит только из одной формы. Почти в любой программе есть дополнительные формы с разными настройками и параметрами. Для добаления в программу еще одной формы нажмите на кнопочку New Form:
Появится еще одна форма. Разместите на ней Edit и две обычные кнопки. Для первой кнопки задайте свойство Caption как "OK", для второй - "Cancel". Пользователь будет задавать в edit'е некоторый параметр, который мы будем передавать в главное окно нашего приложения. Появляться же наша вторая форма будет по некоторому действию пользователя (выбору пункта меню, щелчку мыши и т. п.). Напишем теперь код, по которому наше второе окно будет появляться. Для этого, во-первых, добавьте строку
...
#include "Unit1.h"
#include "Unit2.h"
...
в файл Unit1.cpp реализации первой формы.
И, во-вторых, добавьте код для показа второй формы в модальном виде:
...
Form2->ShowModal();
...
Добавить его можно, например, в обработчике меню (или там, где вы хотите, чтобы ваше второе окно появилось).
Запускаем программу и проверяем. Второе окно появляется при выборе пункта меню. Правда, кнопки OK и Cancel не работают. Напишем для них соответствующий код. Добавьте для обработчиков нажатия на кнопки OK и Cancel такой код:
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Close(); //Закрываем форму
ModalResult=mrOk; //Результат закрытия - mrOk
}
...
void __fastcall TForm2::Button2Click(TObject *Sender)
{
Close(); //Закрываем форму
ModalResult=mrCancel; //Результат закрытия - mrCancel
}
Код достаточно понятен - метод Close() закрывает окно, и в свойство ModalResult второй формы мы раписываем значение, соответствующее нажатой пользователем кнопки. Осталось переделать код для показа второй формы. Измените его следующим образом:
...
if (Form2->ShowModal()==mrOk) //Если нажата кнопка OK
Form1->Caption=Form2->Edit1->Text; //то меняем заголовок у формы
...
Как вы видите, мы тут анализируем, что за кнопку пользователь нажал. Если эта была OK, то меняем заголовок у формы на заданное пользователем значение, если Cancel, то ничего не делаем.
Урок 11. Текст (компоненты tLabel и tStaticText)
Компонент Label (метка) расположен на вкладке Standard Палитры Компонентов:
Перечислем его основные свойства. Самое важное из них - это, несомненно, свойство Caption. Именно оно определяет, что за надпись будет иметь наша метка.
Следующее свойство - это AutoSize логического типа. По умолчанию оно равно true, и наша метка будет автоматически увеличивать свои размеры, если текст, задаваемый свойством Caption, будет достаточно длинным.
Свойство WordWrap определяет, происходит ли перенос длинных строк. Если это свойство установить в true, то длинная строка разобьется на несколько. При этом свойство AutoSize должно быть установлено в false.
Для цветов служат свойства color (цвет фона) и подсвойство color свойства font (задает цвет шрифта). Первому из них (для цвета фона) рекомендуется задавать значение clBtnFace. В этом случае цвет фона для надписи будет сливаться с цветом формы.
Для задания шрифта используется составное свойство Font. У него есть ряд подсвойств (Size (задет размер), Style (задает такие характеристики как курсивность или подчеркнутость шрифта)). Подсвойства свойства Font можно задавать как на этапе разработки программы в Инспекторе свойств, так и на этапе работы программы. Например, вот так:
//Задаем новый размер
Label1->Font->Size=16;
//Задаем полужирность и подчекнутость шрифта
Label1->Font->Style=TFontStyles()<< fsBold << fsUnderline;
Компонент StaticText расположен на вкладке Additional Палитры Компонентов:
Его свойства совпадают в основном со свойствами label'а. Самое существенное различие между этими двумя компонентами в том, что label - это безоконный элемент, а StaticText - оконный (т. е. имеет свой hwnd).
Если компоненты Label или StaticText должны отображать значения числовых переменных, то следует воспользоваться функциями IntToStr и FloatToStr, которые переводят соответственно целые и вещественные числа в строки.
Оба компонента - и Label, и StaticText - могут использоваться для доступа с помощью комбинации клавиш Alt+что-то к элементам, не имеющим такой самостоятельной возможности. Например, если вам надо получить доступ по комбинации клавиш Alt+D к edit'у, то действовать надо следующим образом: размешаем на форме edit и label (или вместо label можно StaticText, для него действия будут те же самые). Label'у у свойства Caption перед буквой D пишем знак амперсанда (&). Например, свойство Caption может быть таким - &Date. Далее нам надо привязать label к edit'у. Для этого мы устанавливаем у label'а свойство FocusControl в edit1 (если мы оставили свойство name для edit'а по умолчанию). Это значение мы просто выбираем из списка:
И, наконец, свойство ShowAccelChar для метки должно быть установлено в true (если его установить в false, то ничего работать не будет). Запускайте программу. Если нажать Alt+D, то edit получит фокус.