QQ登录

只需要一步,快速开始

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

TApplication类的简要说明

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

+ j; [, t4 L4 v; S8 J0 F TApplicaton封装了标准API WndProc过程.每次创建工程时,C++Builder都会自动创建一

$ s ]; Z- K% ]" s( C6 m5 d; i

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

A7 f B# x7 L. K

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

% }+ ^' {" g- [4 ], ~! i- t

lcation的代码.

; V1 g! m: e/ [6 G

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

& G: @5 G4 W5 K# K

0 ?, ~: S- o* M0 R

一>属性:

3 S- r4 S$ S/ W/ R2 c7 N8 f5 x! S

1.bool Active:

# B; t$ b# K# c* D1 a3 Z W( s

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

; c5 g7 r6 w, A; A. n6 @. ~

rue,否则为false

: A5 z( l1 A1 F2 ~2 k6 Y

2.AnsiString ExeName:

% @# t6 S, v) T7 t0 _5 r% ~9 H

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

/ @+ A3 \, l: I8 Y/ J1 {9 V" r

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

5 R( C0 F) F1 n1 L+ C* Q4 s

的文件名部分

4 f6 q# e" h$ D2 r( o: f7 V6 B

3.HWND Handle:

% h7 c+ _, Z$ l

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

4 z; Q" ? T( F# Q

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

1 v/ ^1 p9 K& C# ]; U) Z

4.TColor HintColor:

5 g; h+ B1 ?8 U! O

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

3 w8 x- z& _5 j, A7 E

5.int HintHidePause:

6 {2 N- A/ Q- L

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

( A5 W( Q Z4 E& T, C6 A# A

6.int HintPause:

, e* a( L- X7 R% R

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

; W2 u: p" P: j6 @. ^1 S7 X

0ms

! `- p( x$ ^$ O8 Y9 Z2 `3 i. b

7.int HintShortPause:

6 ~& D2 Y K, v) B8 R

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

% `. U/ J$ Y/ [) C3 o4 s. c

8.TIcon Icon:

# V+ r& h9 o' ^. G3 U

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

: C" w5 ]/ T/ g0 f e% T, d

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

, e4 a; l' _8 K3 ^

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

9 V' ~+ Y: j8 E+ }

9.TForm MainForm:

' g3 z+ X# T0 E( f$ r; a

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

/ M8 N6 r* O# L# d8 ?5 e

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

. C, u) b/ a/ X

10.AnsiString Hint:

4 q; ?! E7 P2 x. s9 | n

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

* J. q# p% k$ ^! S0 ] W r

11.bool ShowHint:

V( A. ^$ e, r

是否显示提示

$ D' C4 r, ^3 T) T5 j, W' t7 ]

12.AnsiString Title:

7 T* ]& D. [6 B, i$ v: b' B; @

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

. z) d# l/ ]3 [- e; }2 \ Y6 i

13.bool ShowMainForm;

# |) }( Z, I# z5 |2 f

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

. h* x1 X% k9 S& \8 s$ W/ `

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

* S; e$ j+ U: f7 o( C$ ~& y

14.bool Terminated;

: b) @; o7 d$ j+ M, m' o* a

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

4 P( X) y( v, A! P

二>方法:

C; }) c5 C+ [1 o7 Y3 v. [

1.void BringToFront():

5 N8 n! C+ p+ J1 I0 D- \

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

: O! ~. Y1 ]6 q" V. @5 H

口之前.

$ z# R6 v$ a2 f9 e% F

Applcation->BringToFront();

& G/ w% E2 g0 D+ {8 R4 X3 l" I

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

* c3 G$ T U, M& J$ ^5 h

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

, L! R2 m( v8 v) Y& n: z: c6 `

MessageBox函数.

* X$ }" ? q" h$ y/ A% q

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

) r* k' U' M/ `# N* s* u. _: a

caption:对话框标题

4 k; g) P8 G' Z

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

5 S1 V. t, Z6 N+ d$ S

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

! `! T, K8 s) c5 S, a$ u4 u

MB_OK:显示一个OK按钮

' r; l/ e$ F" ^1 u& _& ?7 \. o9 e) @

MB_YESN显示二个按钮:Yes或No

, V3 D2 q( X3 D' N% M

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

5 r% Q; w3 b$ ]. \

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

* g5 w \) `; p0 B1 ^ X; l9 Z7 I1 y8 H8 t

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

* k9 p( w E; ]1 W7 _

缺省按钮:

* i- ]' w' ]4 {- C2 |( m

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

6 F, b! b. R- P3 b7 n; a

按钮.缺省为MB_DEFBUTTON1

4 J+ f( \+ @) J& n

图标:

8 a+ ~* X( l8 k. s1 V3 K7 u

MB_ICONSTOP:显示一个红色X图标

C. ~& r+ C' H# o8 { H

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

! t1 j5 a( E2 f9 ?/ l& q' H& T1 k

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

) V' s {) A" m2 I0 P

返回值:

) ~. v! ?. `, E. A% W9 ]3 `7 E

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

; e2 d. N0 @% n/ I# ]. I, y

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

2 z+ b0 i7 B; Z5 H/ X. I' n

NQUESTION)==IDYES)

6 h- A% l1 R1 Z, q

{

+ Q. Z! O! B! j! i7 ~1 @

Close();

2 e, T; o2 R9 h U0 U7 E& h2 c+ G$ \

}

+ H6 o; E4 }8 J, R" @

3.void Minimize()

G0 z6 g# C3 Y! F9 g

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

. c/ q6 V% R& |* ], ^+ u

4.void Restore()

2 }3 v/ H+ ~) ]+ G. f

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

! t$ }) b0 s- ]8 R, y

5.void Terminate()

, C% x* t4 l, j& p" e

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

3 I ?' f& w" g4 z" m3 n

6.void ProcessMessages(void)

9 u8 D% U, b, v* T0 L& S

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

, Q% k: S9 k$ D" r

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

+ N/ F5 I1 m0 k5 n7 x& A0 E

返回值:

, [5 x# ~6 k K6 d9 M$ n( ^/ k

按钮.缺省为MB_DEFBUTTON1

3 H) [, i2 b3 d6 r( H: S6 l2 A& d

图标:

( p: Q! {! ^. I

MB_ICONSTOP:显示一个红色X图标

# }! O( V, s7 \" [2 s& z

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

% y! U% j" d! n8 Z" `

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

" Q- [" u# u' f) a/ q( U

返回值:

' l- B6 [( @) B! ?1 G h8 I# t

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

. `# ~4 F4 N# q

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

5 ^3 }: d2 w E7 R# o: Q/ C

NQUESTION)==IDYES)

4 \( h7 U1 |( F7 s3 b( ^! ^2 ^9 u

{

$ m9 ^" V* a( i5 V9 _

Close();

" ^6 V. T+ g W' X* U9 B9 L. v

}

; V4 M0 Y+ R- z- [

3.void Minimize()

/ C: g) _6 V9 K' k* {- _8 G* `: X

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

& d. u% J4 A. g' X: U

4.void Restore()

3 V, u7 y4 H; y% _5 G3 f0 O

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

z1 e. u# L1 M% i. o) Z

5.void Terminate()

" C$ ^; ~- W2 O/ V

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

+ w* G) ]! d- m0 w2 @

6.void ProcessMessages(void)

+ D; V- u5 B8 y

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

/ x# Q9 N# D6 [7 S& X- c9 S

中的消息

4 G0 X% m" U! `

三>事件:

; ^# J& l* k, Y# F

1.OnHint

! r- ?6 G" w- X

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

2 q6 a, `% H. p5 T: T

示显示

2 s8 B; [# j' W/ D. X3 D" o* G

例:

5 N! ^$ t7 f+ r: E7 N

void __fastcall TForm1::FormCreate(TObject *Sender)

9 R- {* [" ~ b1 j! x" w

{

$ M( T: P9 V- R4 P

Application->OnHint = DisplayHint;

2 w0 v. c7 n2 O% Z) ?

}

: u7 T7 e/ u! ]" L' n8 v! I+ x1 M

void __fastcall TForm1:isplayHint(TObject *Sender)

3 Y( m. n; f7 j4 [

{

2 D+ `" s: n, a! T7 l' T* k0 J5 ]

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

; G& r1 D9 m+ r; r7 c

}

" l, v2 }! L+ Z$ t% J2 N

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

+ i1 P/ c s T& \

2.OnIdle:

) q( i' R7 ]7 | g0 Z0 B9 u0 B/ i/ A

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

5 f+ v& J6 ~* ~

的任务.

# @2 k; Y/ L0 `3 O, E. S8 r! _) J( S

3.OnException:

/ S$ w: E/ `* `/ {' x, l

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

, ^3 }- O$ k: S! U+ K6 B: H: L( O

$ V! K2 f; q* N& y; t, z, k

4.OnMinimize

# b3 N" _1 P$ T8 S! w

应用程序最小化时的事件

3 O, Q6 g& N8 Q9 j; q

5.OnActivate:

* e* j# T1 f2 g* S+ ]* o% R

应用程序被激活时的事件

) U3 h9 D; Q$ y: V2 M) J; n

6.OnDeactivate

- q% y/ W$ R+ }/ Z1 q- T

应用程序失去焦点的事件

7 z$ R6 p+ a6 ^ A

7.OnMessage

! N( e- V; W5 l0 o& {- N

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

5 m: ?1 f) t. B3 ^. ]

8.OnRestore

: O) M; W! {+ O3 Z0 C! s- h% v

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

0 F: ^' V5 x% \

TApplication应用小技巧:

, x8 W2 e+ S3 W

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

4 N* Z, Y3 Y) I2 a. m+ N1 z% s

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

( M" l9 \5 p2 }: G+ e0 L

AnsiString filepath;

& E# i0 ]9 N" j4 t

filepath=ExtractFilePath(Applcation->ExeName);

0 a; U( _3 I: f' T

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

8 C8 r& T% A; m# i* Y0 Y8 n

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

0 N- W2 x8 Q6 D* g3 V$ L$ D ]

Table1->DatabaseName=filepath+"data";

0 ?3 O4 s, a% X: v9 u; ~4 `

Table1->TableName="maindb.dbf";

3 r0 D7 G% c7 C+ z

try{

: q. x5 n/ R O! \, P

Table1->Active=true;

4 }; S* N h5 i$ B/ V4 o7 x

}

I! @; y: q% I+ t% F+ v' X

catch(...)

# q+ x V: L2 \7 t0 v3 S

{

9 \( f& N9 R0 u$ T' A/ ^2 J2 q. j9 v

//......

' ~ ^* E5 r& z/ Y( y% ~! R

}

/ ?1 p+ [7 E3 `6 r- z7 W4 H

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

3 A- u9 Q6 H' P# x* x/ X4 x

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

8 z5 E3 [9 k: t* [7 O" _

B.自定义异常处理窗口

& w# D7 q3 a0 l6 K1 N8 q

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

# N) g \1 c/ F/ u' z' C

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

; z: M0 [4 c, e$ f

void __fastcall TForm1::FormCreate(TObject *Sender)

' B6 x9 U( S, g" ^" a. R

{

* o5 ]/ p P9 i7 i8 [- ?

Application->OnException = HandleException;

6 a, L8 f6 T6 K8 E8 P" u) p

}

p- Q( C2 @1 U3 v! i

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

2 c* e, @1 U& o

*E)

# w3 x' P5 X6 E; ^) u& G

{

6 m4 R# N+ e+ Z9 N4 d$ M( T q. F

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

& [+ s1 \. d8 {7 P6 }( a5 W. ]

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

9 u7 S2 J% J: ]# Y$ L {8 F

}

6 g* c# h. |1 I

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

! ?1 }1 m5 g: }8 R9 }

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

6 s% G( A9 O4 Q$ U

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

2 n. R s2 g+ ~2 p& x

用程序在空闲进处理.

# B6 U8 M% Y1 S 1 {1 P7 H: H' K) r* w5 H: V

void __fastcall TForm1::FormCreate(TObject *Sender)

) L& }5 r- X9 |$ V0 [

{

+ _- |2 \/ v. E, q

Application->OnIdle = updatestatus;

" u% i4 e' ?5 ~7 Y# F t

}

8 k5 a" I a$ K; |7 |7 _

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

( F+ c1 o) O1 B2 F5 y% w/ }! k$ K" i

{

, A( L0 ]+ G& v

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

9 c+ }9 R1 Z6 W8 A/ @

}

- t0 _* V% Y& V$ X5 y" e5 j

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

+ A. W0 ~- J. m. f0 Q7 A; ~

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

) f4 o$ Y0 B+ A0 {6 w

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

/ G% T# C% l# V/ l+ |

即可.

) K. @- n$ n: Z% [# D

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

' J: m* m, X0 F' X" n

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

" a- Z/ v5 `, }- D' j$ E

Application->rocessMessages();

# h1 F; T5 i- y7 Z+ i' S- U- ^

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

+ j( X- b& ^8 R \

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 12:06 , Processed in 0.507732 second(s), 52 queries .

回顶部