Ввод кода событий
Откройте страницу Events инспектора объектов. Общая методика написания кода такова: вы выбираете компонент (на форме или из выпадающего списка инспектора объектов) и дважды щелкаете кнопкой мыши на нужном событии в правой колонке страницы событий инспектора. C++Builder автоматически генерирует оболочку обработчика события и переключает фокус на окно редактора кода. Текстовый курсор стоит прямо там, куда вы должны ввести свой код.
Начните с кнопки “Выход”, которая должна закрывать форму, завершая тем самым приложение. Обработчик должен вызывать метод формы Close ().
Листинг 14.1. Файлы программы Prop — PropU.h и PropU.cpp
//---------------------------------------
// PropU.h: Заголовок для PropU.срр.
//---------------------------------------
#ifndef PropUH #define PropUH
//---------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "CCALENDR.h"
#include <Grids.hpp>
#include "CSPIN.h"
//---------------------------------------
class TFormI : public TForm
{
_published: // IDE-managed Components
TButton *Buttonl;
TCCalendar *Cal;
TLabel *Labell;
TCSpinButton *Spin;
TLabel *Label2;
void _fastcall ButtonlClick(TObject *Sender);
void_fastcall CalChange(TObject *Sender);
void _fastcall SpinDownClick(TObject *Sender);
void _fastcall SpinUpClick(TObject *Sender) ;
void _fastcall FormCreate(TObject *Sender) ;
private: // User declarations
public: // User declarations
_fastcall TFormI(TComponent* Owner) ;
};
//---------------------------------------
extern PACKAGE TFormI *Forml;
//---------------------------------------
#endif
//---------------------------------------
// PropU.cpp: Исходный модуль примера с календарем.
//---------------------------------------
#include <vcl.h>
#pragma hdrstop #include <stdio.h>
#include "PropU.h"
//---------------------------------------
#pragma package(smart_init)
#pragma link "CCALENDR"
#pragma link "CSPIN"
#pragma resource "*.dfm"
TFormI *Forml;
//---------------------------------------
fastcall TFormI::TFormI(TComponent* Owner)
: TForm(Owner) {
}
//---------------------------------------
void_fastcall TFormI::ButtonlClick(TObject *Sender) {
Close () ;
}
//---------------------------------------
void_fastcall TFormI::CalChange(TObject *Sender)
{
char s[40] ;
sprintf(s, "Новая дата %d/%d/%d",
Cal->Day, Cal->Month, Cal->Year);
Labell->Caption = s;
}
//---------------------------------------
void_fastcall TFormI::SpinDownClick(TObject *Sender)
{
Cai->Day = 1;
if (Cal->Month != 1)
Cal->Month-;
else {
Cal->Month = 12;
Cal->Year-;
}
}
//---------------------------------------
void _fastcall TFormI::SpinUpClick(TObject *Sender) (
Cal->Day = 1;
if (Cal->Month != 12) Cal->Month++;
else {
Cal->Month = 1;
Cal->Year++;
}
//---------------------------------------
void _fastcall TFormI::FormCreate(TObject *Sender) {
char s[40] ;
sprintf(s, "Текущая дата %d/%d/%d",
Cal->Day, Cal->Month, Cal->Year);
Labell->Caption = s;
}
//---------------------------------------
В соответствии с листингом файла PropU. cpp введите код для тела обработчиков следующих событий:
OnUpClick и OnDownClick кнопки прокрутки;
Если вы случайно, щелкнув лишний раз мышью, создали ненужный обработчик какого-нибудь события, лучше не удалять его вручную (не забывайте также, что одновременно с оболочкой обработчика создается его объявление в классе формы в h-файле). При компиляции программы он будет удален автоматически; C++Builder сам удаляет все пустые обработчики событий.
На этом этап написания кода закончен. Все остальное, что вы видите в листинге, генерирует C++Builder, в том числе определение класса формы в файле PropU.h. Для компиляции и запуска приложения нажмите кнопку Run. Кнопка прокрутки позволяет менять текущий месяц (и год), который отображается календарем. В календаре можно выбрать мышью текущее число. Получившаяся дата отображается меткой Labell.
На рис. 14. 2 показано окно программы сразу после запуска (вверху) и после некоторых манипуляций ее органами управления.
Рис.14.2 Запущенная программа
Как вы понимаете, ничего полезного эта программа не делает; она просто отображает (по событию OnChange календаря) выбранную пользователем дату. В настоящем приложении событие OnChange и извлеченная из компонента календаря дата могли бы, например, управлять чем-нибудь вроде ежедневника. Вся действительная работа с данными происходила бы “внутри” обработчика этого события в том смысле, что возврат из него означал бы переход программы в состояние ожидания выбора новой даты. Возможны, правда, и другие варианты организации потока управления, однако все равно — в приложении C++Builder любой программный код должен прямо или косвенно вызываться из некоторого обработчика события.