QQ登录

只需要一步,快速开始

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

TApplication类的简要说明

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

5 f/ |" O8 x( H! ] TApplicaton封装了标准API WndProc过程.每次创建工程时,C++Builder都会自动创建一

7 R0 f Q! U/ [' q W7 E

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

- k5 Q5 l9 n; t! x) C6 X( W

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

* }1 ]! A' G* D

lcation的代码.

/ s4 ?+ G( r' U+ f! f* {) M4 @6 U

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

0 ?$ _: X e% }/ b* ~. h. k

8 }, U4 l, x3 ^

一>属性:

* C/ L3 A# R6 A2 y6 G

1.bool Active:

$ U) H& s$ a$ n3 e/ g

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

% {6 ?3 P$ }8 |

rue,否则为false

7 t9 _2 Y. J# k. m' M* I# a& j( v5 G

2.AnsiString ExeName:

! Q, ?# j3 u* c* q! n) h

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

( p8 D! P4 L6 V9 Y$ d3 x+ F

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

9 u4 ] f c" P# C

的文件名部分

0 V, @7 R4 z: I8 D' _

3.HWND Handle:

* r- Y B" S% _9 P

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

# @0 C* v+ i6 t4 `' {* N

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

7 Q9 T( W% e7 j# d3 A! S6 Q

4.TColor HintColor:

0 S0 \& Q7 f3 O5 x

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

$ F _6 ~! h8 @. |; w) C

5.int HintHidePause:

" n% A& C9 b/ [5 H

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

1 y* U! h# U5 f

6.int HintPause:

7 B) d2 C6 L# \+ f* P0 n# `

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

. S$ h, Y5 W e. ?2 L( V0 h5 Y4 G! n

0ms

% S4 x4 }9 [, ~* ~1 b5 Z0 s# C

7.int HintShortPause:

+ O) m2 v. P+ s/ [

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

$ a! s1 f d. H

8.TIcon Icon:

) V9 [5 H# i( \1 {/ A8 ~

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

0 s& c. X' N) O# t" c' K$ s

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

" \9 W: a' K7 a% h1 n0 ?4 O3 }

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

3 d7 k) z! I1 _4 ^

9.TForm MainForm:

2 t. h0 u- f: \# \/ C; \! O3 f

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

& l" @5 N0 s- C& e a4 `

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

8 }3 o6 ^% D" D- v* v* |! |

10.AnsiString Hint:

4 W- o* N: U' `0 D- Z

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

" m2 \# j- U1 k/ d6 y

11.bool ShowHint:

4 v3 z: G; M$ ?% A- _ w

是否显示提示

& n' F, V3 \/ A! ]4 @0 ~7 ~2 i2 @0 \3 K' O

12.AnsiString Title:

: L9 g: k/ }( K6 R. ^

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

: W5 `# x' F: w7 {' S

13.bool ShowMainForm;

2 ]$ T) t, F4 T) C5 Z( d6 u* o

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

% S2 R" I! m2 ]: ^4 X$ q" |+ N

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

" C% E7 y$ B9 ]+ g/ C

14.bool Terminated;

, w, }% _! \# h) m+ H [$ G9 @& n4 z

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

+ F6 z; s7 X: H1 p v. m

二>方法:

9 s: |7 ], `' G: O* a' ]

1.void BringToFront():

/ y2 L& {# x& j- Q

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

) d4 v1 W- J, z& W( K2 r! M! F1 K

口之前.

9 ~; b( d6 Q: t( n2 m- `# Z

Applcation->BringToFront();

* T0 }* O0 H0 h: _

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

$ g3 F5 T6 u4 z4 q4 l

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

7 Y% V" U7 I+ k: ], L) O' L0 p

MessageBox函数.

* w/ _" R( l9 R* K. j+ j5 @$ w

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

9 q& L( g6 K6 Q( y

caption:对话框标题

8 \' X- Z" r# h1 Y5 Q3 p# M8 u

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

! j9 |3 ?! W* w; K. J9 n

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

; i0 j) _3 ?" b# Y6 M* F; h

MB_OK:显示一个OK按钮

% z2 F0 v4 E% V) ~8 Q, c. X

MB_YESN显示二个按钮:Yes或No

* P" m# |# ?3 ^4 |9 ~) F5 A

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

3 D3 t. P. _- y- y1 r

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

0 X# G' ]) ]9 ?; U3 H7 f

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

9 E: }, {* ~- y+ O* c

缺省按钮:

( A: p$ E! s9 U( G+ V4 B

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

`9 S* ^% `" [0 o# A

按钮.缺省为MB_DEFBUTTON1

. T. B$ b+ e+ S" l7 N) L: z: y

图标:

" E; h1 F6 F6 g8 D1 k

MB_ICONSTOP:显示一个红色X图标

: ^" e: d' d9 V5 r) X+ C

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

2 ~" \5 V- @" W* M2 ^5 L9 V, q3 S

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

3 i: \: {8 n; d' Y" o; I6 t

返回值:

! I* ~ E3 r; C( R9 Z2 b3 m

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

% H4 k7 }7 t4 Q; F8 V$ h

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

" a& o% B. B1 a r4 K; W

NQUESTION)==IDYES)

2 j9 Y# S( C7 D# A+ l' N8 S

{

( U1 m/ E- T) e! s r. f2 N2 b6 j% j5 O* u

Close();

( A: x [# m1 R" e5 i

}

3 r$ V8 m3 U" t1 I6 T& `

3.void Minimize()

( @' N1 y% F- A/ c$ u. ?

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

0 u2 [7 v3 }1 e0 N7 R. z* z. w

4.void Restore()

Q3 D* m* K& O5 }# C

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

/ D! h& N) k" U$ q. B, e

5.void Terminate()

7 G' M# }$ `- u+ w0 e7 n# l* i5 x$ T8 u

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

8 | i* f6 b6 i* p5 w6 \

6.void ProcessMessages(void)

4 C3 y/ c9 v% M: a: N% R# N

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

( s4 P" X1 }( R* ?6 g0 d2 {) p

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

. \* {" c; R* n

返回值:

. M# ?( F- ^; ?7 p' C6 X6 ]$ k! |

按钮.缺省为MB_DEFBUTTON1

i! V R; M6 ?: k7 r3 I1 p! j6 H/ [

图标:

) y9 n9 B- u; B: J2 d' s) s1 P

MB_ICONSTOP:显示一个红色X图标

2 Z4 l. s0 y! l

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

, [9 U- V; @8 L: w' r

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

) R2 i4 X1 Z2 ]2 U) ?

返回值:

/ E0 Z3 N( M8 ?$ Y' p( _0 y

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

7 U$ S" S% H' f2 h! |# F

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

2 z: [+ D3 ]/ p6 h+ }

NQUESTION)==IDYES)

& Z2 {' }# I" y

{

* n$ ?% y! j/ x6 c5 ?# v

Close();

# b/ R- R& l3 A# o5 o

}

2 [4 f- [7 O' k8 @- O; d

3.void Minimize()

/ W8 l% B1 r* _

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

0 G) L9 W4 { y5 z3 N2 F6 B$ w

4.void Restore()

" C Q$ Z$ [! I% q

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

6 q$ L5 I7 x1 x

5.void Terminate()

; v% g! ^( [( g# ^6 Z3 Q

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

$ o1 P, I# ], p% |; M! T

6.void ProcessMessages(void)

/ C1 Y3 d9 k) G' y

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

, D/ ` t4 G4 f( s5 I- L* `

中的消息

2 H! H& Q7 c0 w: g) M

三>事件:

9 C% }. w) B* V" T

1.OnHint

* J( Q1 E& Q( i9 ]- [6 w

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

# |+ J9 z1 P3 f# Y9 b

示显示

/ J$ m% H4 U; y

例:

6 ]# F6 N3 M* L7 @1 ?; F/ N

void __fastcall TForm1::FormCreate(TObject *Sender)

1 E! [5 {# L1 I0 R

{

9 {2 u$ m: L2 I. w

Application->OnHint = DisplayHint;

) c0 n( s9 |; N- _) y

}

3 U# `; z4 h8 S0 p7 ~$ K, ~

void __fastcall TForm1:isplayHint(TObject *Sender)

, i, f: ^8 @1 p; n4 p

{

5 e' w; I9 G2 v) K

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

. Z# N8 R) G5 y

}

: Q9 y0 F" {3 e6 f5 \

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

& m A' D. A( U9 F ^

2.OnIdle:

9 o' m; \: d3 G

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

5 `5 r4 T+ A6 d

的任务.

, U }- I% q% |

3.OnException:

* _! ]& `' y7 T5 u9 V

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

7 Z' X4 U) X% n% X4 y4 e

^0 B/ N2 _9 O' E) k- }

4.OnMinimize

6 s( z) ?) a: E$ _# t$ h

应用程序最小化时的事件

1 @) [6 ~5 O" \1 T( N4 M

5.OnActivate:

! B8 f P* F8 Q: }& I

应用程序被激活时的事件

4 E$ {, U$ k" K5 i, Q

6.OnDeactivate

; g$ n' Z) P7 Q2 {) m

应用程序失去焦点的事件

* c- K' P1 ~" G" [0 h. E

7.OnMessage

$ b: `+ {: ]: ~' h

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

# N" s. t, ?6 ~" |1 Q, z3 y

8.OnRestore

3 j6 Q' ]/ w" k) g% \& ?

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

. _* i$ e# S* }- ~

TApplication应用小技巧:

$ G4 ]; D* i* z9 y! D; D; t4 p

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

) C6 X8 ^# q9 ?6 \/ R

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

1 G6 U0 W. ~7 `

AnsiString filepath;

6 q& C( D. R2 V, ?

filepath=ExtractFilePath(Applcation->ExeName);

' u q/ Y7 M1 ^% e6 p6 i

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

; g3 X( k, q* f9 S' X

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

6 P. d/ J! q# z& [( c% M+ w! g; |5 \

Table1->DatabaseName=filepath+"data";

7 s1 e4 ~3 H! H5 C. ?2 [

Table1->TableName="maindb.dbf";

8 Y( J! w I$ {% e: R( L

try{

/ |& }( J V, E% [% S1 D4 z

Table1->Active=true;

4 l% Z- n$ h: _" R: E; L

}

: q: f7 E2 ?/ w( R" Z

catch(...)

4 _- k. Z$ A! g, k

{

/ [/ A7 G, S4 k ]. M, q$ N

//......

0 E! r( D/ @6 O b: W6 T3 p

}

~2 m0 N+ d( T0 Y3 E4 D- K/ \+ _ x8 n

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

$ @* K' u, a/ t6 Y

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

' A9 Y6 l# }" C3 X, o8 \3 H

B.自定义异常处理窗口

6 c7 q4 R- Y7 l2 Q) O2 r

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

( Z8 g- I, h6 |' K( Y+ Z) F

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

) i8 O6 e8 j" M

void __fastcall TForm1::FormCreate(TObject *Sender)

9 Z/ v2 g4 d0 n9 ]2 a7 g& H

{

0 L9 j2 @8 O: Y) x; i& m% a

Application->OnException = HandleException;

8 l4 A: `! d6 w/ }

}

7 n/ J% v* d0 n/ [" n0 M$ r

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

+ K! f: o8 u$ _

*E)

; `0 h* m, t1 T0 }) P( w+ B

{

, B- F* f; F+ o) v$ E

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

6 r7 q$ k9 c Q$ @1 @) ?

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

9 {3 }8 ~, g k3 `' b

}

8 r/ s& g L& D! c

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

; K; @8 j* h' p

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

4 d1 X/ I9 i( Q4 C& w

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

- x, Q8 a3 n) X' ?& a

用程序在空闲进处理.

1 ]) y# g J } 0 Z( \1 K3 l8 K. H

void __fastcall TForm1::FormCreate(TObject *Sender)

$ x5 u$ U) Z5 l$ H$ L

{

/ {$ M5 f# I1 Q, e3 a

Application->OnIdle = updatestatus;

" q6 V6 ]3 E/ }5 n6 r5 B+ v

}

; L; o# o6 p0 T8 C

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

0 s+ l$ J- P! X; y: W f9 F

{

8 M+ t. i, v: C

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

' v; n; Z; q( B. B1 {

}

- {. s& {' _: u+ S W

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

; n1 J4 U3 S$ k' t; Z

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

& N9 L: g Z$ T+ W9 P! Y

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

$ O( B1 z$ ~$ N7 g5 P3 R: ~

即可.

9 I' I' u* n* G

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

, _8 V) F+ A* \5 }0 Z

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

" `( \+ t3 ~8 l

Application->rocessMessages();

, e; S; h) v: B0 x

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

! _: y# `* }1 L" C# H

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-18 10:42 , Processed in 0.420557 second(s), 52 queries .

回顶部