QQ登录

只需要一步,快速开始

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

TApplication类的简要说明

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

8 _8 Z! J$ @2 p+ UTApplicaton封装了标准API WndProc过程.每次创建工程时,C++Builder都会自动创建一

- x4 t: A. k n- l5 `0 l! R7 v) ?

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

" @9 L$ p" j6 X: m% {) T

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

5 s. u+ _/ w) X. @# c

lcation的代码.

# B8 b+ ?7 P* j5 z, F

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

4 F0 g' R M/ ~7 e0 l; w

+ R1 C3 d) h& t* r6 v

一>属性:

" l, [8 P6 ?8 L6 j

1.bool Active:

$ V0 w& ^( l1 J4 K- k

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

/ H7 k! s* K, r4 h2 C7 F/ k

rue,否则为false

" J) N% ^! i8 ?, g. m* ^+ \2 r

2.AnsiString ExeName:

) u6 f" N7 I1 T8 V9 X+ O1 I* j" k

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

; p+ x$ j% r7 O5 I: i, y

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

: v4 P6 H9 p; Y" [" y2 D1 V

的文件名部分

: W, }" e8 g5 g0 ^$ o k( H( L/ J

3.HWND Handle:

/ o0 O. t, P6 ]. d/ X

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

6 T" g% J C$ A$ e

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

* x% A" x7 B% m% n8 j, G0 G& G

4.TColor HintColor:

1 i( j* E( d4 W& t: C0 s

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

% {# ?# }) t) V; [) \

5.int HintHidePause:

2 J8 f; c; r8 p# h& h7 D

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

# J9 S/ P2 }( i5 K/ i" X* [

6.int HintPause:

, a$ S" e3 }" o/ Q) C3 s& k

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

6 K+ F4 R4 B/ t. e" g7 K( ]

0ms

* l/ M+ R* \( ]/ m

7.int HintShortPause:

% c/ {8 w6 v* d8 e9 p w

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

# A ^& ]/ ]3 R2 O

8.TIcon Icon:

3 h! z9 e! G+ L- N; R0 @: ]) B

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

4 g( Y' H- I& X( e1 S) l

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

9 w) ]* U3 V% Q6 ?& [7 o! C& u

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

- U2 o- ?8 ^( i: i

9.TForm MainForm:

1 i$ H6 T( c+ Y J

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

& h" A( M5 z4 C$ c5 I

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

' k! h Y% T+ \

10.AnsiString Hint:

: C; S0 Y# g4 `/ I( Y) D3 R/ q+ G5 [

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

8 G6 _1 j; }' N* A y& i

11.bool ShowHint:

, n" f9 f; y$ l! c' C1 l

是否显示提示

+ c/ V. z" O# L4 h" `$ ]

12.AnsiString Title:

/ M# A3 X% W$ z6 h! X

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

) s" v0 {' l6 Z5 p+ S

13.bool ShowMainForm;

8 l; a) v9 W$ o( B; D

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

1 @9 J$ J, h+ L0 W" v0 V0 G. J

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

0 C" w. _! g8 W! V$ `+ T

14.bool Terminated;

- }/ v: a+ B/ Z5 k* C5 d

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

. G; [ l2 m( v5 s

二>方法:

0 |) \/ z% `: d5 m

1.void BringToFront():

5 M: F7 Q- b: s: n

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

: D9 C; n' e; \" a' F0 Q. y

口之前.

7 D6 l/ A1 @! K/ F/ U# L

Applcation->BringToFront();

6 ?/ [9 _- a) r5 z! p) `! r- |

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

3 K( ?1 Y; O, j) j/ n% O! r

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

/ \( F+ u7 J+ k9 x

MessageBox函数.

" a$ t. N- G3 W; q: q

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

2 X! U( i1 ^( o3 L' [/ l/ n% H

caption:对话框标题

$ s5 `8 ?2 p/ Z9 \6 }0 S

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

1 e! `8 @& \3 p: E: e

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

) L- T5 V7 n( ?& b

MB_OK:显示一个OK按钮

; x/ h7 s7 u+ _) N; Q

MB_YESN显示二个按钮:Yes或No

1 e( v! w% H2 j% g, W3 ]% y

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

- |, f; y2 d2 F$ }) C

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

9 q9 P2 P' _; k& Y b# b% l w

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

. {" q% ~* M$ b9 {( o/ j

缺省按钮:

, n9 g( W7 I4 r5 u# A) o8 b, I

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

* W4 J# u6 B. a; A. [

按钮.缺省为MB_DEFBUTTON1

, m, Y! _- e, I3 r) w9 D! @5 N

图标:

3 `& _, t, P# d

MB_ICONSTOP:显示一个红色X图标

6 ]8 u& K. }! L5 u# ?! J- L

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

/ O7 l- \8 y4 I( [

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

0 l P/ h# t( l

返回值:

9 s& F# ?& f3 c3 X/ S+ E. @8 c

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

! @: B$ W. X+ c& R' I# D( r4 I

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

7 t# U2 n( t3 h# L. I

NQUESTION)==IDYES)

- `% {% n% r2 B) U7 o6 {

{

3 o. V" X" x0 x& G& Y, a5 S

Close();

& t/ _! J# A2 j2 T

}

5 j) C1 ]4 X6 l* i3 M' K4 a

3.void Minimize()

9 a. f2 Y: G% Y: S Z7 G

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

. Y3 ]4 a' v+ c B+ Y& Q

4.void Restore()

4 S/ b' h: F" [; o' P* p' K

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

0 E# [& [* H/ Y3 {6 V7 ?# Y, A# F- B& m

5.void Terminate()

' Y3 }& q4 s4 s; w/ [

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

% H5 g6 W+ `3 T, d

6.void ProcessMessages(void)

# k E! i3 D% r1 @$ n. r3 @

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

3 A% `- i" V t

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

" E0 ?% p: \+ i- ~/ d

返回值:

! m; Z7 c3 i ?1 P+ g

按钮.缺省为MB_DEFBUTTON1

. H" k2 z$ \, H8 F) T* B" ^. n

图标:

1 w+ v3 y: `+ n x9 E/ R3 C

MB_ICONSTOP:显示一个红色X图标

7 N& x/ L' C1 k# t. ]; }! J) P

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

# ^) [7 L! R; S! i( l

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

) Y- z9 W: M- a6 T4 g C

返回值:

[" w& Q8 F/ d2 X

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

8 ~; N9 ?. P, G+ C o+ |

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

1 Z+ R9 O$ U6 M k L/ Q) p) ]4 l4 |

NQUESTION)==IDYES)

: ^1 J6 F% T! Z. H5 @: g

{

) Q- m, |1 M$ ]; a8 _& A

Close();

) X, @" m2 p" e0 O

}

% t" }7 q( _$ U1 U4 R

3.void Minimize()

: k! d L% e* x& j

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

9 W) J. q! x8 ]- Y

4.void Restore()

- \/ r: A3 H. U

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

- _# p# a, ]; t% {5 ^% f6 k

5.void Terminate()

9 {) O+ L# Y% v# M) x

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

1 h+ _- Y; H5 N; j

6.void ProcessMessages(void)

0 M; k9 m. S+ i# s

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

# b( f$ M ~# ?1 M

中的消息

0 Z& Y: U* q3 H4 X. _

三>事件:

7 G: O0 w0 p7 M

1.OnHint

# }. i& K8 D! g5 x" ~

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

3 O% Q+ j" r2 n! A* O& n+ m

示显示

! I2 E$ J r. @

例:

0 m6 |* g/ D4 F8 C& {3 w3 ]

void __fastcall TForm1::FormCreate(TObject *Sender)

& X; K+ \& I v

{

" Q0 j$ k6 Q* g3 N7 j9 R0 G0 G. C. b

Application->OnHint = DisplayHint;

5 O& @5 H- g4 s( i( x: g

}

3 ~) d" W* l) z9 `5 G w

void __fastcall TForm1:isplayHint(TObject *Sender)

! Y8 S6 K4 Q8 ^8 S3 T+ N" @

{

; R0 z n$ H4 W5 a* x5 N8 O* }. Y' B

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

# X. z% E/ j1 n) [

}

! V) T# ? _! m1 N0 n

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

$ d$ a9 w/ v$ Z! i

2.OnIdle:

8 Z6 [: R. X, P, q' P8 @* b O

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

' g, f4 Z( R1 P0 \$ n

的任务.

+ f1 }$ b& b3 y5 t0 u4 _6 d, z0 \' r

3.OnException:

' v M5 e8 c$ s: n6 P1 m% J; O, B) }

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

l; W+ B, |0 @5 E) e! ^& E8 \- t

% l9 i+ T1 d# x8 n

4.OnMinimize

5 E, `9 a( Y& U- l! F9 m7 I8 n8 F- ?

应用程序最小化时的事件

2 c6 I+ a* e& {# c2 h1 v' z

5.OnActivate:

7 }- V- D! |: p7 @

应用程序被激活时的事件

/ ?& J4 t+ y. g, s9 v

6.OnDeactivate

3 b# l! M1 y" l3 D* d

应用程序失去焦点的事件

5 E8 m1 o0 U" v7 B

7.OnMessage

$ q9 b) e( @- \% Z5 _% N7 C

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

, h) }, n7 U& J A

8.OnRestore

0 s% ]3 f/ F# b# B* Q* s

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

+ R. a5 X& C$ s; Y

TApplication应用小技巧:

# b; s# j2 |' z- @

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

0 b! b0 F! h e" m2 ^

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

, Q$ G; `% E {0 l9 H1 m' z

AnsiString filepath;

1 L. U: K5 B: i" d% j

filepath=ExtractFilePath(Applcation->ExeName);

7 ~! @- V4 h" v1 a: Q

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

4 C. G: @7 b1 E; E3 `

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

# i5 k8 W' P, _- ^( U, P/ n( K

Table1->DatabaseName=filepath+"data";

9 H. I' d% u J* \0 R+ r ?8 Q h

Table1->TableName="maindb.dbf";

) Y$ n0 e# n }$ k/ r8 w+ M

try{

) a! Y' S. b8 {3 J

Table1->Active=true;

$ r6 ]( \4 Y: k; b- B6 r

}

7 z6 e. E- v+ B* t* ~# g4 M

catch(...)

E! G5 Q' i7 P" r/ U' ~+ P

{

7 O$ _- a1 x# Z; }" e

//......

7 K5 @; R' _/ ~. _0 q

}

" b. F7 d6 \4 Y. p- ?7 E+ m( G9 g# }

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

3 F6 o- M5 K8 c7 Y1 j

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

7 D- A x! \1 s3 ? i6 s

B.自定义异常处理窗口

$ Q2 `: o( d" z& Y) w2 R/ r

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

& ^6 O; j, y5 L

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

; w' U8 l2 h5 }

void __fastcall TForm1::FormCreate(TObject *Sender)

3 c; F2 ?7 l& _2 I

{

+ G: }9 F2 a$ F, |' O

Application->OnException = HandleException;

9 Y( i# G3 O- o

}

' b/ p; s' q% I1 t

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

' S" [1 {) [5 R

*E)

@1 i$ Z0 G- v- D3 i- U

{

' q2 m& ^+ Z- t) B( ?4 h8 k9 ^

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

. E, G8 K& r7 ~. F% ^ T; i$ O r

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

+ j+ O% t; Z$ K

}

/ e2 H. |' w, `$ [) d

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

2 j! o9 L7 G+ w7 r# t* v ]3 I

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

2 e. c7 p' A3 p

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

% }# g" y) N, K

用程序在空闲进处理.

8 D j* E. c2 Q+ M2 h' M & B; G3 s: `0 E$ `/ Z5 q

void __fastcall TForm1::FormCreate(TObject *Sender)

6 z d- w$ k4 P: ~& u. \0 B$ d. Q

{

, `* {' C1 H5 o+ h. G

Application->OnIdle = updatestatus;

. A3 n) r- h9 I$ z$ d- |) G$ b0 l2 b

}

1 x8 W+ U5 v* Q4 w

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

! D/ N/ c8 y0 `' t

{

$ q5 x8 h+ ?2 @+ {, X

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

8 ~# Z P4 s$ ?3 A, [

}

! y' K" B3 o) O R# Y# t

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

2 L4 f+ i4 C) [& L& y; ^

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

# @* J# `# i- Q C" [2 Q

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

( ]: u: X K4 w1 l" L5 w

即可.

: }1 t+ c$ Z: u: A% z9 r# O+ b5 N

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

7 p Z; F+ H: ^6 k1 ]

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

8 ?, A* R4 V* I9 e1 q1 r

Application->rocessMessages();

/ o. u2 Z" }* y4 a0 Z) ^+ N7 M& |# w; W

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

, g1 [5 ^* g# a+ F

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-13 09:19 , Processed in 0.465267 second(s), 52 queries .

回顶部