C++ Программирование в среде С++ Builder 5

Ввод кода событий


Откройте страницу 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 введите код для тела обработчиков следующих событий:

  • OnCreate формы;


  • OnClick командной кнопки;


  • OnUpClick и OnDownClick кнопки прокрутки;


  • OnChange календаря.




  • Если вы случайно, щелкнув лишний раз мышью, создали ненужный обработчик какого-нибудь события, лучше не удалять его вручную (не забывайте также, что одновременно с оболочкой обработчика создается его объявление в классе формы в h-файле). При компиляции программы он будет удален автоматически; C++Builder сам удаляет все пустые обработчики событий.

    На этом этап написания кода закончен. Все остальное, что вы видите в листинге, генерирует C++Builder, в том числе определение класса формы в файле PropU.h. Для компиляции и запуска приложения нажмите кнопку Run. Кнопка прокрутки позволяет менять текущий месяц (и год), который отображается календарем. В календаре можно выбрать мышью текущее число. Получившаяся дата отображается меткой Labell.



    На рис. 14. 2 показано окно программы сразу после запуска (вверху) и после некоторых манипуляций ее органами управления.





    Рис.14.2 Запущенная программа

    Как вы понимаете, ничего полезного эта программа не делает; она просто отображает (по событию OnChange календаря) выбранную пользователем дату. В настоящем приложении событие OnChange и извлеченная из компонента календаря дата могли бы, например, управлять чем-нибудь вроде ежедневника. Вся действительная работа с данными происходила бы “внутри” обработчика этого события в том смысле, что возврат из него означал бы переход программы в состояние ожидания выбора новой даты. Возможны, правда, и другие варианты организации потока управления, однако все равно — в приложении C++Builder любой программный код должен прямо или косвенно вызываться из некоторого обработчика события.


    Содержание раздела