博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

马二进三名人传记

yjx2003---linux
  yjx2003.cublog.cn

关于作者
mail: xjybook7###yahoo.com.cn
把3个# 换成 @ ,就是邮件地址
|| << >> ||
我的分类


C++ Builder 初学问与答(一)

C++ Builder 初学问与答(一)

 出处:CSDN

责任编辑:ljx

 

[04-7-20 10:10]  作者:ch_builder 

 

 

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

 

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

 

  第一部分:基础入门

 

  1.窗体

 

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

 

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

 

  1ActiveControl指定窗体上的某个组件为输入焦点。如下面的语句将窗体上的Label1组件成为输入焦点:ActiveControl=Label1。在同一时时刻,应用程序只能有一个输入焦点。

 

  2BorderIcons用来设定标题栏上出现哪些系统图标。它是一个集合,可以设成以下几个类型:最大化按钮(biMaximize)、最小化按钮(biMinimize)、帮助按钮(biHelp)和系统菜单(biSystemMenu)

 

  3Icon属性用来指定当窗体最小化时显示的图标。

 

  4KeyPreview属性为true时,表示击键事件发生时先传给窗体,然后再传给有输入焦点的组件上,相当于窗体截获了原本属于组件的事件。缺省值为false,表示击键事件只送到当前有输入焦点的组件上。

 

  5 Menu属性用来指定窗体的主菜单。

 

  6Visible属性用来确定窗体是否可见。

 

  此外还有一些运行时态属性,这些属性只有在程序运行的时候才能通过编程访问。这种属性主要有:

 

  Active

  属性用来确定窗体是否获得输入焦点。

  

  ActiveMDIChild

  这个函数将返回当前活动的子窗体。

  

  DropTarget

  属性用来指定窗体是否是拖放操作的对象。

  

  Parent

  属性用来设定包含窗体的窗口控件,通常是另一个窗体。如果窗体没有包含它的控件,那么它的Parent属性为nil

  

 

2)问: Windows窗体有很多样式,比如对话框,弹出窗口。如果我要控制窗体的边界样式,应该怎么办?

 

  答:属性BorderStyle可以指定窗体边界的外观和行为。它一共有六种可能的取值。

 

  bsDialog

  表示大小不可变的标准的对话框边界。

  

  bsSingle

  表示大小不可变的单线边界。

  

  bsNone

  表示大小不可变、没有边界。

  

bsSizeable

  表示标准的可改变大小的窗体。

  

  bsToolWindow

  与bsSingle时类似,但是标题较小,用做工具框窗口。

  

  bsSizeToolWin

  与bsSizeable时相似,但是标题较小,做工具框窗口。

 

  要注意的是,对于MDI子窗体,bsDialogbsNone将不起作用。

 

  3)问:同样是获得焦点,ActiveControlSetFocus()有什么不同?

 

  答: ActiveControl是把焦点交给组件,它是一个属性。而SetFocus()是组件主动要焦点,是一个方法。书写格式也不一样。例如,我们想使同样的一个Button1获得焦点,可以下的两种写法:

 

  ActiveControl=Button1Button1=SetFocus()

 

  二者作用是一样的,不过一般都习惯用第一种方式。

 

  4)问:属性FormStyle有什么作用?

 

  答:属性FormStyle可以确定窗体的类型,它一共有四种属性值。

 

  fsNormal

  表示窗体既不是MDI父窗口也不是MDI子窗口,只可能是单文档SDI窗口或者对话框。这个属性值是缺省值。

  

  fsMDIChild

  表示这个窗体是一个MDI子窗口。

  

  fsMDIForm

  表示这个窗体是一个MDI父窗口。

 

 

fsStayOnTop

  表示窗体始终保持在窗体所属工程中其它窗体的上面,除非还有别的窗体的FormStyle属性也被设置成了fsStayOnTop

 

  要特别注意的是,在程序运行期间不要修改窗体的FormStyle属性。

 

  5)问:属性Position有什么作用?

 

  答:属性Position可以确定程序运行时出现在屏幕上的窗体的大小和位置,它有五种可能的取值。

 

  1poDesigned表示使用设计时指定的尺寸和位置属性时显示窗体。尺寸属性是指HeightWidth,位置属性是指LeftTop。这个属性值是缺省值。

 

  2poDefault表示窗体在屏幕上显示的位置和大小由Windows决定。每次运行应用程序时,窗体都会稍微向下向右移动。

 

  3poDefaultPosOnly表示窗体以设计时的窗体尺寸显示窗体,但是在屏幕上显示的位置由Windows确定。每次运行应用程序时,窗体都会稍微向下向右移动。当无法再向下移动时,就又会从屏幕的左上角开始显示。

 

  4poDefaultSizeOnly表示窗体的位置由设计时指定的值确定,而尺寸由Windows确定。

 

  5poScreenCenter表示使用设计时指定的尺寸和位置属性,在屏幕的中央显示窗体。

 

  6)问:如何最大化或最小化窗体?

 

  答:属性WindowState与窗体的显示有关,它有三种可能的取值。

 

  wsNormal

  窗体既不是最大化显示也不是最小化显示。这个值是缺省值。

  

  wsMinimized

  窗体最小化显示。

  

  wsMaximized

  窗体最大化显示。

 

  7)问:属性ClientHeightClientWidth有什么作用?

 

  答:这两个属性用来定义窗体用户区域的高和宽。所谓用户区域窗体的实际工作区域,就是除了窗体的标题栏、菜单条、工具条和状态条以及边框之外的窗体区域。所以对于新创建的窗体,它的用户区域比窗体的大小要稍微小一些,相对而言,窗体的大小是由属性HeightWidth确定的。

 

  8)问:如何动态创建一个窗体呢?

 

  答:我们先创建一个主窗体MainForm,把她的Caption改为“主窗体”,把FormStyle属性改为fsMDIForm。再创建一个子窗体windows1,把Caption改为“子窗体”,把FormStyle属性改为fsMDIChild

 

 

选择“Project|Options…”菜单项,将会弹出一个如图所示的对话框。

 

  在这里我们可以通过下拉框选择主窗体(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事件,而由上我们知道窗体没有关闭,而是最小化,说明在OnCloseAction的此时的值为caMinimize。所以我们要写上面的方法来关闭。

 

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

 

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

 

 

 #include “Unit2.h”

 

 

 

 

 

  在要调用的地方加入:

 

 

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

 

 

 

 

 

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

 

 

 void _fastcall TForm2::Button1Click(Tobject *Sender)

 

{

 

 Close();

 

}

 

 

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

 

 

卓越网上书城 C++Builder及计算机 相关图书
C++ Builder网络编程核心技术
市场价: ¥31
卓越价: ¥23
VIP价: ¥22.4
从卓越亚马逊购买

 

C++ Builder案例开发集锦(附光盘)/商业开发代码库系列
市场价: ¥40
卓越价: ¥31.5
VIP价: ¥31.5
从卓越亚马逊购买

 

C++ Builder项目开发实践(附光盘)/项目开发实践系列丛书
市场价: ¥45
卓越价: ¥35
VIP价: ¥35
从卓越亚马逊购买

 

C++ Builder数据库开发经典案例解析(附光盘)/经典案例解析
市场价: ¥48
卓越价: ¥35.9
VIP价: ¥35.9
从卓越亚马逊购买

 

Java网络编程精解
市场价: ¥55
卓越价: ¥41.2
VIP价: ¥41.2
从卓越亚马逊购买

 

Java编程思想(第4版)
市场价: ¥108
卓越价: ¥75.5
VIP价: ¥77.4
从卓越亚马逊购买

 

CSS网站布局实录 基于Web标准的网站设计指南(第二版)
市场价: ¥39
卓越价: ¥26.6
VIP价: ¥26.7
从卓越亚马逊购买

 

C#2005 &.NET 3.0高级编程(第5版)上下卷(第一本面向.NET 3.0的C#经典名著!)
市场价: ¥158
卓越价: ¥118.3
VIP价: ¥114.8
从卓越亚马逊购买

 

算法导论(原书第2版)
市场价: ¥85
卓越价: ¥63.2
VIP价: ¥63.6
从卓越亚马逊购买

 

PHOTOSHOP CS/CS2 WOW!BOOK
市场价: ¥138
卓越价: ¥104.1
VIP价: ¥104.8
从卓越亚马逊购买

 

 

====================================================
====================================================

订阅免费电子杂志〈名人传记〉

每期发送电子图书,广读博览融汇贯通。阅读电子书时,请注意保护视力。╭○═○╮╭◎═◎╮╭●═●╮同步发行《名人传记简装版》简装版只包含附件联接地址,大小控制在80k以内。同时发送《热点》期刊

 

1 邮件订阅方式
向下面的邮件地址发一封信,邮件正文(不是标题)填写subscribe zhuanji
邮件地址  bentium@list.bentium.net

1.主页订阅

主页地址一 

http://list.cn99.com/cgi-bin/getlsts?listname=zhuanji

主页地址二   http://yjxsuccess.blog.hexun.com/

马二进三名人传记搏客 yjx2003.cublog.cn
向潜规则低头 图书 计算机基础应用 思路 杂文 linux c++ builder VB.NET tinyOS and eclipse

 

发表于: 2008-02-17,修改于: 2008-02-17 21:04,已浏览482次,有评论0条 推荐 投诉


网友评论
 发表评论