Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
70
Добавлен:
27.03.2015
Размер:
379.39 Кб
Скачать

Работаем с двумя формами

Приложение редко состоит только из одной формы. Почти в любой программе есть дополнительные формы с разными настройками и параметрами. Для добавления в программу еще одной формы нажмите на кнопочку 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, то ничего не делаем.

Используем api-функции

В программах для Windows на C++ Builder, как правило, все API-функции можно использовать без особых проблем и без дополнительных объявлений и include'ов. Вот пример, как можно с помощью API-функций сдвинуть кнопку Пуск на Панели задач:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

HWND hWnd = FindWindow("Shell_TrayWnd", NULL);

HWND hWndBt = FindWindowEx(hWnd, NULL, "Button", NULL);

MoveWindow(hWndBt, 30, 2, 98, 32, TRUE);

}

Разумеется, этот код надо разместить в обработчике нажатия на кнопку на форме. После щелчка на кнопке нашей программы кнопка "Пуск" сдвинется вправо:

Если же вы разместите этот код в консольном приложении, то вам необходимо добавить файл windows.h:

#include <windows.h>

int main(int argc, char* argv[])

{

HWND hWnd = FindWindow("Shell_TrayWnd", NULL);

HWND hWndBt = FindWindowEx(hWnd, NULL, "Button", NULL);

MoveWindow(hWndBt, 30, 2, 98, 32, TRUE);

return 0;

}

Как правило, этого include'а достаточно для использования любой API-функции в консольном приложении.

Некоторые API-функции требуют в Windows-приложениях дополнительных include'ов. Например, функция PlaySound. Она без проблем будет работать в консольном приложении (если файл windows.h подключен, разумеется), в Windows же приложении нужно добавить строчку

...

#include <Mmsystem.h>

...

после чего в вашей программе вы сможете проигрывать с помощью этой функции звуки:

...

PlaySound("music.wav", NULL, SND_FILENAME);

...

Приведенный фрагмент проиграет файл music.wav, который вы должы разместить в папке вашего проекта.