QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2281|回复: 0
打印 上一主题 下一主题

TApplication类的简要说明

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 01:10 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

4 g0 [0 j; Z; V9 S8 ~% x3 NTApplicaton封装了标准API WndProc过程.每次创建工程时,C++Builder都会自动创建一

6 O* N3 q$ h3 ^6 m- c5 S4 P

个名为Application的TApplication类对象.在Project Options的Applcation页中,我们

" O- o9 ?2 E% }8 w4 l+ a3 D

可以设置这个Application的Title(标题)和Icon(图标).也可以在工程源文件中编辑App

* j2 R. t- t/ p

lcation的代码.

U- f2 o( V, p7 p5 R7 S

Application对象不是需要经常使用.下面是TApplcation比较常用的方法和属性/事件等

+ Z5 [+ @3 ^9 B {" c0 l

. c$ `4 S* o/ a6 @2 f2 U7 u

一>属性:

" y! S% R$ M9 h) b

1.bool Active:

" p1 ^! w: o7 b1 e1 O2 }! `

这个属性是一个运行时才有效的只读属性.当应用程序处于激活状态且有焦点时它返回t

: I. N& V& Y; n6 }6 F- H

rue,否则为false

% D" @: r5 d/ X: ]) _6 Q

2.AnsiString ExeName:

$ M* F. h2 f& ?+ b) I" L

这是一个常用的属性.它返回应用程序的全路径执行文件名.运行时有效,只读.

4 k2 _) d; V" J& l( w. ?

Label1->Caption=ExtractFileName(Applcation->ExeName);//取得执行文件全文件名中

$ }# [* K( P& S0 `- M0 D6 g# F

的文件名部分

' w# n/ i3 c! ^1 a3 A# H

3.HWND Handle:

$ m& q W) x5 K) H# t

取得应用程序的窗口句柄.调用API时可能需要.这个句柄是不可见的应用程序的窗口句柄

9 Y+ v/ k; D) [+ x

,而不是主窗口的句柄.要取得主窗口句柄,可以用Application->MainForm->Handle.

- ^! ~7 u8 k% v5 k( Q& G# p

4.TColor HintColor:

5 v/ G- d _8 G: {

确定工具提示窗口的颜色.运行时有效

6 x; E) @0 {4 O6 O+ s& [7 n

5.int HintHidePause:

/ M6 Y2 ~& v7 c8 M

确定显示工具提示后的工具提示显示持续时间,缺省值为2.5s.

0 b" @5 r- x2 I9 j" z5 T

6.int HintPause:

7 U+ p$ v" g) S& D7 ^8 I6 J

确定工具提示显示之前需要的停顿时间.也就是工具出现所需要的等待时间.缺省值为80

1 y d6 |6 s0 \' W

0ms

% X4 j5 X2 W3 C: a8 y# {( T

7.int HintShortPause:

6 _7 f2 H9 X" E8 q: G& C- M

确定工具提示再次显示之前所需要的等待时间.缺省值为50ms

$ S1 f) Y7 ?" a- l

8.TIcon Icon:

' W" x, E5 y. t( O. E/ g

应用程序的图标.此Icon出现在应用程序的任务栏窗口按钮上.并作为在文件浏览器中应

) S) ?, |3 t0 s4 C; y

用程序的图标.一般在Project options中的Applition标签中设定.当然也可以用代码:

( P: [( M: c- N

Application->Icon->LoadFromFile("e:\\icon\\cb3.ico");

6 o) |- Q+ X, n+ I8 r2 \! ]6 {

9.TForm MainForm:

# z% Y3 ?! I" K

应用程序的主窗体.这是一个只读的属性.主窗体就是应用程序最先创建的窗体.可以在P

( N& x* ^4 ?2 S F- q% f" H

roject Options的Forms页中设定.当主窗体被关闭时,应用程序将结束.

/ a! y5 J% M+ M! A, G) p/ w' v

10.AnsiString Hint:

. X5 h0 A* V! `' A: v6 R3 B k1 Y

应用程序的Hint(工具提示)

f1 z& g( `6 H& f+ Y

11.bool ShowHint:

- W" _' ^& Z1 K R5 W, x

是否显示提示

% T: Y4 S S5 g' y/ d; e) n

12.AnsiString Title:

3 t3 ]( k2 N9 m" Q8 c

应用程序的标题,它显示在应用程序在任务栏按钮中

8 Y# j) A% O% O9 p. U. q' R

13.bool ShowMainForm;

7 U) u4 a1 }9 T/ h/ G# s1 b

是否显示主窗口,缺省为true.当我们想建立一个不显示主窗口的应用程序时,在工程源

J& ?/ ]& q. u f6 j5 X. D4 \1 }3 z% ^

文件中的Application->Run()之前设定这个属性为false即可.

6 j+ ]; Z, H' \4 a- m1 n! M

14.bool Terminated;

, U* s. f! b3 I% {: c6 _5 l

检查应用程序是否已收到关闭消息.如果为true,表示应用程序即将关闭.

" B% \0 `: T& a: o

二>方法:

! N& ]# t- M) f6 M

1.void BringToFront():

2 [& S1 B# T7 p- ]

将应用程序置于激活状态并且拥有焦点.它将使用应用程序的窗口置于其它应用程序的窗

1 R/ r" S% X7 I4 p& \6 J

口之前.

1 V; q5 @, j9 W- i( s& W

Applcation->BringToFront();

- u' y u8 k. b' A- h4 K

2.int MessageBox(char *text,char *caption,int flag);

1 P7 u& F) Y) B( N( _7 u) `, `

这是最常用的方法了.显示一条消息的对话框,可以有一个或多个按钮.它封装了API中的

: y1 w) M) K E* o8 V$ Y

MessageBox函数.

( B6 ?( W8 \( y

text:消息字符串,可以是多行,多行可以用"\n"隔开.如"你好!\n欢迎使用本程序."

' J. {* z @$ ^% _# h/ ~5 w9 A* I

caption:对话框标题

! V& C5 u* w% k8 Q$ Z4 h: B o, Y

flag:决定此对话框形式.常用的如下(位组合,用|)

7 C. ^. o% h( c' R

按钮,决定对话窗口的基本用途

# f ^/ w/ p: E8 q# i+ `

MB_OK:显示一个OK按钮

8 Z% w# ]3 V$ J" p& N& `( `/ ~

MB_YESN显示二个按钮:Yes或No

3 J% Y. W' v4 t% r( ]' M

MB_YESNOCANCEL:显示三个按钮,YES/No/Cancel

; Z8 `- i( Z- E9 g

MB_ABORTRETRYIGNORE:显示三按钮:Abort(中止)/Retry(再试)/Ignore(忽略)

# T, P: l/ i$ `( r: }

MB_HELP:显示帮助按钮,当按F1或点按钮时触发Help事件

! Y$ m# w: m o3 s* Q) C

缺省按钮:

1 V8 D9 t3 c& w5 D

MB_DEFBUTTON1/MB_DEFBUTTON2/MB_DEFBUTTON3/MB_DEFBUTTON4:决定哪一个按钮为缺省

4 x6 ^# W* _5 U$ N

按钮.缺省为MB_DEFBUTTON1

: S* Q! f! q$ u2 G9 O0 q

图标:

9 X. S" I/ \# X; U9 j! a

MB_ICONSTOP:显示一个红色X图标

- l* ~" N2 H/ M1 D1 M

MB_ICONINFORMATION:最常用的提示图标,一个小写的i

- N1 ~2 x# V& h; I

MB_ICONQUESTION:当MB_YESNO使用时这是最常的图标,显示一个问号图标

* z: F0 _2 l! c& ?, B

返回值:

* q7 b3 D2 w& s" B" A9 t9 x

IDABORT/IDCANCEL/IDIGNORE/IDNO/IDOK/IDRETRY/IDYES:表示用户按了哪个按钮返回.

1 A# @: \7 l( Y: W7 A3 M8 x

if(Appliation->MessageBox("你是否真的退出本程序?","关闭程序",MB_YESNO|MB_ICO

: m7 c3 d& Y3 E& g

NQUESTION)==IDYES)

" w. S- J. Z" K+ @+ j# d( c' j

{

# y$ o7 [1 e, r. f1 {5 b

Close();

2 T4 L8 B; g+ [/ x9 P, E5 _1 r- o+ \

}

0 R# P6 `$ i+ }

3.void Minimize()

6 _, t+ S; n7 n6 o6 u+ X w

最小化应用程序的每个窗口和当前显示的窗口

. C( h4 o6 D& X

4.void Restore()

' r$ Q5 x0 o6 x- h4 g

还原一个最小化的应用程序

" |1 U$ `8 H8 Y7 Z$ ^

5.void Terminate()

. v& B0 i& E7 H: d. i; M. a: E

自动调用API函数PostQuitMessage发送一个WM_QUIT消息以关闭应用程序

5 K9 |" Y. }5 h6 K/ C% T+ m; ]3 z2 W7 R

6.void ProcessMessages(void)

) u% o% f' ?/ n1 G

常用方法,在长时间循环中调用它以让应用程序及时处理消息.它可以立即处理消息队列

* {$ F6 {8 t! b0 _

MB_ICONQUESTION:当MB_YESNO使用时这是最常的图标,显示一个问号图标

0 Y8 L3 z) W7 g; K5 _1 ~. V

返回值:

; O( Q$ g: L0 P/ b. L: G' Q

按钮.缺省为MB_DEFBUTTON1

J/ h3 [# P9 L' h7 P' h; j6 f5 Z1 t

图标:

# C. }( b* b8 U% u5 S

MB_ICONSTOP:显示一个红色X图标

2 \% t1 ^) P3 z% i* l4 Z

MB_ICONINFORMATION:最常用的提示图标,一个小写的i

/ q- |% q0 D7 L, j- Y% S

MB_ICONQUESTION:当MB_YESNO使用时这是最常的图标,显示一个问号图标

3 y; }4 m( W, h& W" J+ I' }

返回值:

( f- B; d5 H, S3 j

IDABORT/IDCANCEL/IDIGNORE/IDNO/IDOK/IDRETRY/IDYES:表示用户按了哪个按钮返回.

- V& e0 K4 C' y7 C

if(Appliation->MessageBox("你是否真的退出本程序?","关闭程序",MB_YESNO|MB_ICO

- ]6 ?. T/ O% C

NQUESTION)==IDYES)

9 K" O! U7 S& R# c' a. s

{

. i$ R4 o6 A8 ^ [& b

Close();

/ O7 M/ h2 K& Q, ?/ R" H# a

}

8 N# n% k; U+ j y0 u

3.void Minimize()

0 ~1 \ S- p4 N+ u% Y! h

最小化应用程序的每个窗口和当前显示的窗口

2 F1 a- C; E- U4 {4 N

4.void Restore()

6 v0 v9 ?! Z- l$ E% X' ?

还原一个最小化的应用程序

/ P# f8 @$ n) L( w

5.void Terminate()

8 v J5 y8 y4 O [* s" U, J

自动调用API函数PostQuitMessage发送一个WM_QUIT消息以关闭应用程序

$ P* p! Y) M6 b9 {

6.void ProcessMessages(void)

4 h. g3 }2 G w8 t4 ~* ]

常用方法,在长时间循环中调用它以让应用程序及时处理消息.它可以立即处理消息队列

1 a5 U0 n/ l# R/ w6 @" C/ {

中的消息

; b2 j* ~; H/ G

三>事件:

6 y$ e. X/ x, Z5 g! N

1.OnHint

1 |; t* ~4 S" e- A/ Q5 ]

当应用程序的提示要显示时的事件.我们也可以将它指向自定义的函数中作特殊的工具提

5 e* V; \+ {1 K/ |5 m( ]; W

示显示

. i/ E2 M) G7 o3 a* ^% i; `

例:

; P6 N' D6 L5 r# ^" K ~' ?

void __fastcall TForm1::FormCreate(TObject *Sender)

5 Z. t# s- y* J

{

9 V3 ] U3 i, {6 W# c' S2 `

Application->OnHint = DisplayHint;

" f2 ~$ V5 a" V

}

& x& {0 p+ M- r7 u, v

void __fastcall TForm1:isplayHint(TObject *Sender)

2 _3 o" x0 C# \# p9 w6 e, q6 h

{

; L0 K7 ]5 `* m* E, y

StatusBar1->SimpleText = GetLongHint(Application->Hint);

( h! |+ ]. B+ H. b3 @ A' N

}

8 u8 l- C u+ u0 E

//一个Hint可以包含由|字符分隔的二部分.GetShortHint是另外一个函数

1 n ` H( c+ x

2.OnIdle:

% R: h) ~. U( U$ L7 M

当应用程序空闲时的事件.通常在这时候作一些不重要的状态检测或处理要求不是很严格

9 y5 W8 i5 e5 a3 Y! }

的任务.

9 a: a/ @" K* S# X! i% G

3.OnException:

# J* t8 S% |: B+ _3 C% \! o) s

当应用程序发生异常时.你也可以自定义一个异常处理过程而不用缺省的ShowException

1 N' h& X/ R; v

7 e2 V6 P7 r" S

4.OnMinimize

& b$ L% _4 R) l

应用程序最小化时的事件

( z6 h; r. H, ^7 j/ u+ j; ]& z( i2 w# `

5.OnActivate:

! } ^$ j% W# V2 @+ N

应用程序被激活时的事件

2 E. W& \! Y3 ~( y5 p

6.OnDeactivate

* \% }' Q% J+ Y

应用程序失去焦点的事件

$ u% _. r" p7 s, o8 P6 P6 ]

7.OnMessage

: s& G& \$ N* ?- k" g

应用程序接收到消息时的事件.如果你想作特定的消息处理.你可以按管这个事件

$ h0 n' B/ G/ ` P$ ^

8.OnRestore

- J' J; ^. s; y1 C9 K; w9 d

应用程序由最小化状态恢复时的事件

& i, U' P9 o) p0 \6 e! M

TApplication应用小技巧:

' b, [$ v3 {9 I

A.打开相对路径数据文件.通常要打开的数据文件(如程序需要使用的DBF数据文件,TXT

9 g h3 W) x# G. a+ {3 B

/INI文件等)都不是固定路径,而是相对于应用程序的安装目录变化的.

+ Y3 M2 H Q( b- I5 |; R* d9 j

AnsiString filepath;

4 D9 [1 \; E& |# K9 F

filepath=ExtractFilePath(Applcation->ExeName);

+ q% t9 ]5 g( T

//ExtractFilePath与ExtractFileDir是有区别的.表现在ExtractFilePath最后总是有"

" ?. N5 ?0 ]7 Z% p7 Q B# p$ A

\\",而ExtractFileDir只是在路径为根目录时最后才是"\\"

7 R, r$ G: \6 D5 F Y. |# H

Table1->DatabaseName=filepath+"data";

# H5 J0 u2 F+ B1 v, |: I: n

Table1->TableName="maindb.dbf";

7 s0 @% e+ P% z! m

try{

" h1 K, Q1 O6 x, w

Table1->Active=true;

+ @& O* Y4 n, R; o6 h! }6 m2 J% m

}

- m9 u0 D0 [5 l$ z6 i) K, t( K

catch(...)

7 m+ M9 H2 a( }& g

{

, R% K) O7 b9 @5 G- y% V

//......

; R3 d) n! i) @3 G0 n5 ~- k

}

0 O9 ^1 \4 l( \9 X! g; H7 [: U

另外有一个函数ParamStr(int index)与Application->ExeName有同样效果.ParaStr(0)

5 P, }# D N" E2 s+ L9 @' i% Y! N- Z

就是应用程序命令行第一部分.也就是执行文件的全路径.

$ o* @% y7 Y* \. d! c' R$ k1 b

B.自定义异常处理窗口

" r' K' z" K" k0 y, U

缺省异常处理窗口是用ShowException显示的一个窗口,其标题为应用程序的Title.我们

& C V* ^' S0 Y* E6 @7 Y! T, R

也可以自定义异常处理函数,以便对异常进行自定义的处理。

: M' X7 T2 I- f; @. K+ e4 X

void __fastcall TForm1::FormCreate(TObject *Sender)

: K0 Z: G# X, T1 U) w: q, t

{

1 _: c) u4 j& q) E9 Y" ?( S

Application->OnException = HandleException;

- n# B1 U% ]6 W6 v

}

9 J3 @. Z" {; E6 Q

void __fastcall TForm1::HandleException(TObject *Sender,SysUtils::Exception

3 f. I2 \3 x, N3 X/ a# V) U- k

*E)

; @- f D1 u' l* h4 z' k

{

! b1 I! t. Z5 j* @9 s1 B7 V9 V

AnsiString errorstr="应用程序发生了错误.\n"+E->Message;

+ p/ f( K' V7 r/ }% t3 b5 Q. c

Application->MessageBox(errorstr.c_str(),"发生异常",MB_OK);

+ b* `; u6 H1 j! y4 L

}

3 a- d( R" j/ }, o- @7 D* J" ^

C.利用OnIdle事件做一些时效要求不严的任务.

6 b0 w9 [& j6 I# G0 s) }

我们用Timer定时处理一些事务。但Timer是要占一定CPU时间的,对应用程序的执行效率

7 g2 L: o, X3 j- E8 ?8 S5 d

有一定影响。如果这个要处理的事务并不十分重要.我们就可以放在OnIdle中处理。让应

9 y+ n8 q' ?* |

用程序在空闲进处理.

. j; C" J' Z/ _, q* r* q! o) W8 M$ k: `! A/ o/ F; u9 c; i

void __fastcall TForm1::FormCreate(TObject *Sender)

( {& m+ s# `% e9 I' B3 {6 e

{

; `9 I5 J# d* ?* o* K4 T# B# e

Application->OnIdle = updatestatus;

+ O: v6 h2 z0 ?* k3 L* R, @

}

' K+ u+ |) s/ ^

void __fastcall TForm1::updatestatus(TObject *Sender,bool &Done)

9 h" d' Z/ i: @

{

/ z% M$ y& \" j3 [" Z& Z3 J4 y7 O

StatusBar1->SimpleText=DateTimeToStr(Now());

' E( @$ Y4 O2 }

}

' ] Z+ f, e: f8 M b8 J

由于C++Builder5已经将Application做到了控件选取面板上。这使得我们对Applicatio

: x6 m$ e1 ^4 D) R. m3 b; t$ p, @

n编程比以前方便了不少。以上的方法对cb5以前的版本是很适用的。如果是C++Builder

0 y/ b# i: x9 g9 w" h3 O

5,我们也不用这么麻烦地写代码了,直接在Application控件的对应事件中写处理代码

- Z! ]/ ^( G' z

即可.

: q$ z6 K: Q1 h$ o5 b, O2 [

D.在一个长时间的执行代码之前或之中及时处理其它消息

7 P4 g! @/ M3 q

Form1->Label1->Caption="开始执行指定任务:"+jobname[0];

. O- w5 k9 Q5 R7 C! k, w

Application->rocessMessages();

, g: p m& U8 n' f2 I8 W

runjob(0);//假设runjob是一个长时间的任务处理函数,在执行中不处理系统消息

2 n& k5 K* ~5 w! N3 Q& C. Z. p

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-20 00:43 , Processed in 0.426962 second(s), 51 queries .

回顶部