QQ登录

只需要一步,快速开始

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

TApplication类的简要说明

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

0 v* W: |. u4 z7 g. U7 E TApplicaton封装了标准API WndProc过程.每次创建工程时,C++Builder都会自动创建一

; f; C6 @: G& O

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

: b d1 k' }5 F

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

* j3 S2 ~* J O8 M/ x, t

lcation的代码.

1 B: b; d! e; E" @

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

. j9 I' E$ J* v7 j+ t

( g& ?+ v5 Y0 a- O7 n$ e4 L# W( Y

一>属性:

- M; p- o3 D2 s l* q" U1 Y

1.bool Active:

P$ `% K6 t i7 ^

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

4 H6 L, y' ]: g( g% K) w

rue,否则为false

5 g$ l0 P9 H1 P5 Q; G

2.AnsiString ExeName:

% D) _6 ]- h' `5 P

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

1 s3 t \# d X* Q

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

2 N2 H! Z! m% b( B# a& C

的文件名部分

2 G, v( }& C7 C6 K0 z! e

3.HWND Handle:

2 @8 R4 S& k3 r3 p

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

# b$ f7 ~# T) A. ^

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

1 h! M3 v. o- j6 e9 K, T! n

4.TColor HintColor:

9 `/ D- X3 e# I: x$ K s

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

) V2 h. I: [, L: O

5.int HintHidePause:

+ X5 q) P5 V0 A, K

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

, d* m! D, J+ G$ O, y8 J* L1 R1 J

6.int HintPause:

# W9 g; F. r7 Q S/ v9 L8 m

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

/ X. T2 k6 f; [( E+ s n6 I: V

0ms

; }) e0 g Z0 u( p- j e' q+ d9 F( ~/ ^

7.int HintShortPause:

. }# \ v9 A. n4 n

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

& u5 i/ L- e4 M" I% y

8.TIcon Icon:

3 L' R9 V" N# R6 p

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

# Q* U. X N( o+ m, V% {

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

1 h9 y I7 c0 f4 D3 g' X% Z

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

# Y+ V* m+ x: G" }# N

9.TForm MainForm:

1 t5 r2 @- t; l/ \( B5 B

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

( q: b& i" U$ o, P7 F! B+ B

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

' r0 f# l- w% ]0 g% f

10.AnsiString Hint:

5 u- _0 Z# C5 ]6 j

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

9 s, o( X6 ~. ^# G

11.bool ShowHint:

]' [/ B; A) A+ j

是否显示提示

# Y1 L! F2 Q- ~$ m- i, Y

12.AnsiString Title:

! h9 q4 j% j4 v+ Y

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

4 M) q0 @5 z0 v1 G$ V

13.bool ShowMainForm;

* c8 p E' ], K/ d$ K: ~

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

. Q- ^. Y4 d( |$ m2 P# M% J/ s

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

; R) Q' K: K* J: i% v3 x

14.bool Terminated;

+ D9 ]' {* a9 L& s, @

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

9 J8 P1 b. b) t

二>方法:

( b# P$ _) s& J' Y

1.void BringToFront():

2 ?: L6 m( H9 d. ?

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

( r$ ?% |) r u

口之前.

9 F4 O3 D& A' {& F3 B7 G2 F

Applcation->BringToFront();

5 d9 k$ Z5 B! z7 }7 B7 n7 I

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

& {, Z; f7 P7 t" W [

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

; J) M% B) c7 p% ~4 D+ t

MessageBox函数.

; Q3 Y" v( Q4 f( q

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

2 r3 l2 N8 m! O2 ?

caption:对话框标题

( o5 E/ s( C5 q2 U8 S& A5 H

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

# |6 T+ N0 d; d

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

; ]- V5 J3 U1 {; X- ?

MB_OK:显示一个OK按钮

2 g2 g8 [3 s& a8 T1 |& H

MB_YESN显示二个按钮:Yes或No

- r' H9 w' T9 f0 ~! b

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

3 X% y, f) T! b8 D. {* X

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

3 Y# \/ |% V9 G# o4 P9 ~) v, H% Z

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

; n9 t$ Q& ^7 g$ Z

缺省按钮:

) i6 Q1 ^1 R) k, p* y

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

0 V; ]0 y1 v) u, e7 U& Z- o

按钮.缺省为MB_DEFBUTTON1

( B0 T/ i4 f* O; C9 H* s$ u9 H) U

图标:

2 [/ V( I' F, k+ [

MB_ICONSTOP:显示一个红色X图标

4 f$ v! E4 V" y- g# A$ P

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

3 i7 T' O- c+ l# a% @2 _

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

' W% K' T4 n9 b" a& h, O5 |; h

返回值:

. B& r0 A( k1 W G

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

5 E4 T) l7 N. g% G1 s% t0 H

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

3 {) @2 Q& h. d6 q$ B

NQUESTION)==IDYES)

8 F# i0 |" z: S+ O3 o: d9 _2 y9 g. P

{

8 O6 y. v( X- }+ G) E

Close();

" v0 e' y# _) b0 `. f9 e

}

* g1 c0 Z5 o; z

3.void Minimize()

7 I5 Q3 }1 N3 d/ D: ]

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

+ u, l* l* f: t% W4 ]9 q( ^" c

4.void Restore()

( A) n' G" S- G! W% o

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

- I' j: N" {7 H5 I( E9 L# l

5.void Terminate()

, |* y( q' o- B

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

$ L% z- I# \0 u4 @/ m

6.void ProcessMessages(void)

9 @: t, J, B' ?; |* u- |1 G

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

1 H7 V& h1 H( O7 v

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

8 V' L; R8 F: p5 d

返回值:

1 h' J" Z, g0 E/ K

按钮.缺省为MB_DEFBUTTON1

: w; E0 P# Q& @- C5 y

图标:

" V) Z5 i& E6 N

MB_ICONSTOP:显示一个红色X图标

4 m" g, [; ?5 Y J

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

4 o0 J; K c/ }2 Q6 H6 T

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

L# G8 I: ]* q( F5 E. U

返回值:

- ^( a- ~ a, ~

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

& d; [2 E3 _* A. Z8 w

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

5 Q, L; p0 o' M6 w

NQUESTION)==IDYES)

7 l1 _+ U: [( C) ]2 K& m; I

{

4 t0 i' S$ O, |4 d4 v" B8 |

Close();

x1 t, G. v4 p4 f1 ~; l; u# q

}

+ H; }; {7 p$ j( U b

3.void Minimize()

2 M4 u7 C/ |8 j

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

+ z. L2 G% N- F& K# }

4.void Restore()

/ y, u1 O+ R7 v4 w* E

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

/ Z, B9 W/ M& `4 h( `3 {' Z. ~, k

5.void Terminate()

/ U5 m3 @5 y4 L. d; F9 o

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

0 l( D2 r4 {; U9 G7 c* ~! ~: r

6.void ProcessMessages(void)

" S# c+ ~7 [1 f* Z! F1 b6 }

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

: n8 ]7 W6 e7 o6 ]9 V& l* ]/ I

中的消息

8 q# Q4 |3 D* k+ y E0 m

三>事件:

# V1 A% ?' L, V% E; y# x

1.OnHint

6 Z' Z. t* ^; n/ X

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

. ~/ J1 Q# n0 p; M, W# U# N

示显示

& N+ p& g5 ~5 h6 d! O X

例:

, p: }! r7 u s

void __fastcall TForm1::FormCreate(TObject *Sender)

7 |: `- ~( u- J5 U9 J# `

{

3 E+ Z( V3 d& L

Application->OnHint = DisplayHint;

5 y, V7 m' O* {1 k9 V

}

4 {2 B% z! ]7 w4 R4 l

void __fastcall TForm1:isplayHint(TObject *Sender)

" ^( {) v2 B* j) E

{

" S5 m- g7 |9 v& g6 x! g( ?

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

# ^* E$ w9 C/ T$ x5 M! r- m

}

: y0 G- p" C( R, I* B

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

3 n6 s% x& ^" L' O! G* J

2.OnIdle:

: c, t0 N* p. Y2 i) P) K; v

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

2 e: q9 @- S9 {5 B5 q% Q8 }. a

的任务.

1 j3 B3 O5 o$ p: F' Q, \

3.OnException:

; Y- ~2 S# [" E9 f) a

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

2 r- A9 m# J3 X( h7 T) h

- Q, K- |4 _, N- |

4.OnMinimize

9 u- h, K' h1 {5 |/ Q7 ]

应用程序最小化时的事件

8 I s3 z: U( d) a

5.OnActivate:

" v/ ]6 t& c( I& T& V

应用程序被激活时的事件

9 v8 U; g; q- B( D& u }

6.OnDeactivate

9 J' ~' O4 Z9 r

应用程序失去焦点的事件

/ N \( K7 {2 c

7.OnMessage

3 ]7 [: F! g. S1 _1 U; R7 u

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

) ?6 W/ S; t$ w6 E6 ^8 H O

8.OnRestore

& ]- x- S% b6 p3 m9 V- K8 C

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

U1 o( }7 D) H

TApplication应用小技巧:

- F" t: Q I9 Q6 E

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

9 H: l! B9 W' @1 x- T. P

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

9 g/ c/ V7 S o; y( x; r) D- F* l

AnsiString filepath;

3 ~& | L9 ` F5 Z( ~. ~

filepath=ExtractFilePath(Applcation->ExeName);

1 A. K8 t% x% |0 f( f

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

* q/ M0 h: I+ w9 V6 E( j' i ^/ o

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

& Q; q$ S! R+ i6 Z, y$ \

Table1->DatabaseName=filepath+"data";

" X' X1 k3 L( j1 O+ q+ q/ I

Table1->TableName="maindb.dbf";

/ |; A% X' [' Q

try{

) n2 e: C5 i- {! d% J1 Q

Table1->Active=true;

2 E9 f) Z! [, s/ Z- A

}

% }5 t I' L) G, q9 S, t6 M

catch(...)

, N( y, Z: G1 K) D% n7 A

{

; `+ M) ^1 q7 U0 [$ `

//......

2 P E7 @' i. o* H: Z- m

}

4 j( m2 O0 i) [4 V) P1 U. S

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

( P( y/ d7 c3 M/ ?9 n( t

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

L" i# x( D5 ~0 ?9 V* f' i

B.自定义异常处理窗口

{( l# _9 k6 i( A6 F

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

9 Z+ t! J/ n, Y

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

6 A" A3 z; T2 o+ n

void __fastcall TForm1::FormCreate(TObject *Sender)

' r# a. o! H' M# g! F4 Q& p

{

$ b, W9 k# I+ n G

Application->OnException = HandleException;

2 w* Z( h; @3 X& l

}

4 n8 N* u1 |' [4 _

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

1 l# b8 t! a$ Y" K# J& {( ~: P' |

*E)

6 e# A0 R/ \( `% G4 X# R: F

{

) }, T4 H* A+ }

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

& P4 U, h1 S4 u$ P7 F

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

" c* \. R- S! c- y/ H8 f

}

" y) C6 W0 w( ^4 S+ K. t

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

( \ Q$ [! t3 n

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

- ~+ f8 B( c2 Y, i4 Z# |( @

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

6 p" b; W1 U( Z( b8 Y' Y1 O4 ~

用程序在空闲进处理.

) e4 O& t) c7 z8 y- t , N+ D1 _3 A8 s" T4 z5 [' t

void __fastcall TForm1::FormCreate(TObject *Sender)

, \. _& \) J7 ^( L9 s) c% m

{

! ?' } |! s/ E t: Q# s; q

Application->OnIdle = updatestatus;

& t4 ^' u; {: ]6 D/ c

}

9 ?" T! c R, b+ }8 W* v) F8 ^: y M4 H) i

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

8 Z& q. D9 r5 J: U2 f) v1 t6 x2 Z

{

# i6 Z8 M" O$ y$ a

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

1 H6 Q% P/ c) D

}

0 P: N |" e0 L" L% T1 ~# o, B

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

& L7 Y" k6 S# Z4 {1 z3 F

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

. `6 W" y$ Y3 g3 {2 c' [

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

8 L' ^$ D4 ^. }" D# \6 q

即可.

h/ ]4 C" B2 T; n7 C* T+ Q

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

+ G6 e' T: g& }+ J& D. C

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

0 ~% o$ w& Y- r/ w# d$ [

Application->rocessMessages();

/ Y) b: e$ S% W( \% a. p6 D

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

2 x& E- g( A2 v& y1 B

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-6-11 01:49 , Processed in 0.301766 second(s), 52 queries .

回顶部