Chinaunix首页 | 论坛 | 博客
  • 博客访问: 522575
  • 博文数量: 252
  • 博客积分: 6057
  • 博客等级: 准将
  • 技术积分: 1635
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-21 10:17
文章分类

全部博文(252)

文章存档

2013年(1)

2012年(1)

2011年(32)

2010年(212)

2009年(6)

分类:

2010-09-01 08:57:15

收藏文章】【】【】【】【字体: 】

重要:BCB程序机制是:窗体上的所有对象与窗体本身都成为一个类:TForm1,我们就是将类成员与类成员函数写到TForm1类中,程序运行时,实际上就是通过TForm1 类生成Form1对象,所以,Unit1.cpp中的函数都以void __fastcall TForm1::打头,这就表明这些函数都是TForm1类的类成员函数,它们可以调 用在类中我们定义的类成员。当然,我们可以在Unit1.cpp中定义我们自己的变量和函数,供其它函数调用,这点符合C调用规范。当然,这种类外界的函 数是不能调用到TForm1类中定义的类成员与类成员函数的,除非是公有成员与公有成员函数,但必须在公有成员与公有成员函数前加上对象名称,即 Form1->TForm1类公有成员(或TForm1类公有成员函数)。
1、本例是BCB面向对象设计的精髓,完全是利用类生成对象机制。
2、新建立一个BCB工程,在上面放一个按钮Button1
3、Unit1.h
////---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: //// IDE-managed Components
        TButton *Button1;
        void __fastcall Button1ClickClick(TObject *Sender);
private: // User declarations
        ////定义类私有成员函数,用来删除所有已生成的按钮
        void __fastcall DeleteAllBn(void);
        ////定义类私有成员函数,用来生成共公响应事件
        void __fastcall BtnClick(TObject *Sender);
        ////定义大小为30的按钮类对象
        TButton *Bn[30];
        ////用来记录已生成按钮的数量
        int BnCount;
public:  //// User declarations
        ////窗体类的构造函数
        __fastcall TForm1(TComponent* Owner);
        ////窗体类的析构函数
        __fastcall ~TForm1();
};
__fastcall TForm1::~TForm1()
{
  ////在析构函数中将已生成的按钮对象删除
  DeleteAllBn();
}
////---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
////---------------------------------------------------------------------------
#endif
4、Unit1.h
TForm1 *Form1;
////---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}

//// 释放所有资源
void __fastcall TForm1::DeleteAllBn(void)
{
  int ii;
  for(ii=0;ii   {
    delete Bn[ii];
  }
}
////---------------------------------------------------------------------------
void __fastcall TForm1::Button1ClickClick(TObject *Sender)
{
  int ii,yy,ww;
  ww=12;yy=45;
  //// 释放所有资源
  DeleteAllBn();
  ShowMessage("所有原先生成的资源都已释放!!!按任意键重新生成!!!");
  for(ii=0;ii<30;ii++)
  {
    Bn[ii]=new TButton(this);
    Bn[ii]->Parent=this;
    ////置响应函数
    Bn[ii]->OnClick=BtnClick;
    Bn[ii]->Caption=IntToStr(ii);
    ////根据窗口的宽度布置按钮的位置
    if(ww+Bn[ii]->Width+5>Width)
    {
      yy=yy+Bn[ii]->Height+5;
      ww=12;
    }
    Bn[ii]->Left=ww;
    Bn[ii]->Top=yy;
    ww=ww+Bn[ii]->Width+5;
  }
  ////标记当前生成了多少个按钮
  BnCount=30;
}
////公共响应函数
void __fastcall TForm1::BtnClick(TObject *Sender)
{
  TButton *cn;
  cn=(TButton *)Sender;
  ShowMessage(cn->Caption);
}
////---------------------------------------------------------------------------

本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( ProgramFan.Com )

阅读(454) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chulia200020012010-09-01 09:01:33

深入VCL源码研究DELPHI窗体的创建和关闭 http://www.q.cc/2006/09/14/12716.html

chulia200020012010-09-01 09:00:02

窗口像QQ一样窗口靠边自动隐藏vb源码 http://5uxy.com/vb/182/ QQ聊天时的窗体自动隐藏功能,用VC 或CBC都可以很简单地实现,前几天看到有一则用CBC实现的例子,便想用VB实现一下,可惜当窗体上放满控件时,FORM的MOUSEMOVE事件不能很好地触发,所以只好用以下的笨办法,现把代码贴上,窗体上需放一TIMER控件,Interval属性为200。大家如有好的意见,不妨贴出来,让我学习学习。 Option Explicit Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndIn