敬业的IT人 >> 编程开发 >> C/C++ >> C++ Builder初学问与答1

C++ Builder初学问与答1

敬业的IT人 互联网 佚名 2008-1-3 19:21:40

  一直以来都想写一点为BCB初学者快速入门的东西,前不久写了几篇《闲谈BCB》想把自己学习BCB中如何来解决难点的方法说给大家,没想到被骂得不成样子。本想不写了,但觉得这些东西留下来能做什么呢?还是用另一种方法来重新演译我的思维吧,最近有些忙,那几篇没有写完的文章,我也会尽快写完的,至于《深入QR》,我想我一定会用另一种手法来写,让你一看就会把QR这个娇女的所有衣服都脱光,不整理到这个地步,我是不敢轻易再拿出来,还请朋友见谅!

  本文分为《基础入门》、《快速提高》与《成功编程者》三部分。

  第一部分:基础入门

  1.窗体

  1)问:Windows的编程就是在窗体的基础上实现的, C++Builder是怎样处理窗体的呢?

  答:窗体的一部分功能通过窗体的属性来实现,窗体的属性非常多,这里只对其中比较重要的属性进行介绍。

  1. ActiveCborder="0" alt="C++ Builder初学问与答1" width="424" height="425" />

      在这里我们可以通过下拉框选择主窗体(Main form),在左侧的Auto-create forms里列出了所有的窗口,这里面的窗口通常是动态创建,你可以把需要动态创建的窗口(Available forms)通过中间的那四个按钮调到右侧,然后OK就可以了。

      动态的创建的方法如下:

      void _fastcall TForm1::Button1Click(TObject *Sender)
    {
       Tform2 *Forms;
       try
       {
           Form2=new TForm2(Application);//动态创建Form2
           Form2->ShowModal();
           delete Form2;//把Form2释放
       }
       catch(Exception &exception)
       {
           delete Form2;
           Application->ShowException(&exception);
       }
    }

    进入讨论组讨论。

      要注意一般你可能不喜欢用上面的那种形式,而写成如下格式:

      void _fastcall TForm1::Button1Click(TObject *Sender)
    {
       Tform2 *Forms;
        Form2=new TForm2(Application);//动态创建Form2
        ……
    }

      你要记住,无论你的子窗体创建是否完成,你都必须运行delete来释放你刚才创建的子窗体,当然你也可以把释放的过程写在OnClose事件函数内,这个函数有一个参数为Action,它有四个取值:caNone为不关闭窗体,什么也不操作;caHide为不关闭窗体,但把它隐藏起来;caFree为关闭窗体,同时释放内存;caMinimize为最小化窗体,不关闭。所以我们也可以象下面这样来释放子窗体。

      void _fastcall TForm2::FormClose(Tobject *Sender,TcloseAction &Action)
    {
       Action=caFree;
    }

      9)问:为什么我们用Close()不能关闭我当前活动的子窗体?

      答:关闭当前活动窗体,很多人会用如下的方法:

      void _fastcall TForm1::Button2Click(Tobjcet *Sender)
    {
       ActiveMDIChild->Close();//注意这是在主窗体(或者说在其它窗体)中来关闭当前活动的子窗体,这样做不好,一般的关闭应该象10)问中那样来做
    }

      此时窗体并没有关闭,而是最小化了,因此要在子窗体的OnClose事件中用如下代码来关闭。

      void _fastcall TForm2::FormClose(Tobject *Sender,TCloseAction &Action)
    {
        Action=caFree;
    }

      这段程序不用多说了,上面都说过了。

      这里有一点要说明一下,就是在调用Close()时,会自动触发OnClose事件,而由上我们知道窗体没有关闭,而是最小化,说明在OnClose中Action的此时的值为caMinimize。所以我们要写上面的方法来关闭。

      10)问:Show()与ShowModal()有什么不同?

      答:我们的程序中不可能就只有一个Form,比如,有Form1和Form2两个窗口,我们在Form1中调用Form2应该先在Unit1.cpp的开头部分加入:

      #include “Unit2.h”

      在要调用的地方加入:

      Form2->Show();//或是Form2->ShowModal();

      两者的区别在于若使用了ShowModal()则必须关闭Form2,才能处理其它窗口的内容,而Show()则不用。当然你可以直接在Form2直接创建一个Button1来关闭她,程序内容如下:

    浏览地址: 进入讨论组讨论。
    • 如何重装xp系统图解
    • 下载Flash播放插件
    • 巧妙清除Windows 2000/XP登录密码
    • 如何利用路由器设置局域网
    • QQ空间打不开
    • 开机后鼠标不动怎么办
    • Excel密码保护的解除方法与解除原理
    • Windows XP注册表详解
    • 3dmax不锈钢金属材质的制作方法
    • 硬盘变成raw格式怎么办

      void _fastcall TForm2::Button1Click(Tobject *Sender)
    {
       Close();
    }

      在Close前,不需要加上Form2,因为这行程序就是在Form2上运行的,所以默认的父组件就是Form2。

      (待续)

    浏览地址: 进入讨论组讨论。
粤ICP备06119539号
Copyright CiscoSky.Org,Some Rights Reserved.
Email:me1228#tom.com