QQ登录

只需要一步,快速开始

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

TApplication类的简要说明

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

0 p2 ?) z* \( q, ?" _1 R TApplicaton封装了标准API WndProc过程.每次创建工程时,C++Builder都会自动创建一

6 e( [4 W, d( g1 p/ P6 w* Y' H

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

& P4 `: d- h, D

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

& r1 M) q3 c$ r3 |) Y

lcation的代码.

6 S! D9 h' y) R8 h+ P0 N

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

1 A0 Z/ Y( n9 ^ u# x4 ?5 @

7 t( b) j4 @6 P5 N

一>属性:

8 W1 R; S' g/ |! p+ z

1.bool Active:

6 R( Q" ^, X4 r g9 |/ ]0 S

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

- C1 O8 i; x* b

rue,否则为false

4 R3 p7 ]3 Z1 }( I& k$ g

2.AnsiString ExeName:

8 H/ F- Z" a! | q) c

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

: y9 ~3 i, [% o: t8 x& Z

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

" p3 x8 p L0 G. u+ p7 H

的文件名部分

1 {. }2 z: A7 c6 [( a+ C- @

3.HWND Handle:

( H( {1 A5 G8 V( X

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

5 d. C0 A3 E7 G4 X$ F2 W$ e1 U( h

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

9 I: _4 a: A7 I& t x

4.TColor HintColor:

1 `$ u% m) P8 C9 K

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

4 n V z2 e& A! \

5.int HintHidePause:

9 K; {& Q. Q- P: }& ?4 E( ~

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

) k1 L# C# _' ?6 p! ]: w

6.int HintPause:

: {$ d; c+ l: a0 {$ c2 c( N5 c+ h

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

! `" Q: h2 c3 x C

0ms

+ m. {8 o% B& {1 o6 k0 B- d

7.int HintShortPause:

; ]* X8 @$ c1 j- v3 l# I

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

3 _+ j" D* y+ I$ E- z

8.TIcon Icon:

+ G, g; h) g) N V! J2 `" Q. ]

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

: N$ ]0 r; t2 u- M* _& z

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

* i7 A5 }# W2 o' h5 m8 B0 V( K

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

* c# y7 s- m% A2 A8 s

9.TForm MainForm:

( z$ v: U% n L; L1 f. H

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

3 X9 A. ]1 k/ ]0 j

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

7 i$ ?# a. b& o) j- D

10.AnsiString Hint:

5 ]1 T# p9 D' ]7 B( K

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

2 k, c7 p* u6 p! o* ?0 M. e

11.bool ShowHint:

7 [, F; m% g1 ~! H, \) j& f/ i

是否显示提示

( L* a9 e6 w$ a- K( U

12.AnsiString Title:

0 R0 r% s9 ]2 {* k( g8 _

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

8 Z' R, Z, w$ [

13.bool ShowMainForm;

5 I9 ~! i! k0 h# j! |* _

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

- v. ]; O1 w/ h. U! f, i

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

# X& u. R' s. n$ ?* u

14.bool Terminated;

; s; |) \/ L E7 P0 `: F

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

q' B% R7 L8 z9 v! j3 T3 E' Z

二>方法:

# D9 U+ Q% W+ D, S- s

1.void BringToFront():

0 r7 l0 i: {: E1 `0 A0 x

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

/ n4 v {/ M8 L, r3 W! J

口之前.

+ I4 m2 O( d5 \7 F

Applcation->BringToFront();

" @! M! P9 D( Z C9 ?9 A

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

2 S1 B, A' X2 T/ Z' R# }4 v

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

5 [7 z: ?, o* z

MessageBox函数.

& C* q! F7 Q( m

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

" {7 h, H/ b% `+ O V2 p3 L

caption:对话框标题

9 D8 J% R0 i. ?2 y9 h

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

* \& l5 B/ g4 p; I6 v, f

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

: y6 T, c/ d) R0 h8 F2 Y. Z- a

MB_OK:显示一个OK按钮

6 C7 z# q& q* k5 U

MB_YESN显示二个按钮:Yes或No

5 k, V: Q# o' ?. b: g, F

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

& G7 L5 i; a1 ^& a( p4 d+ R

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

# u" r* A u8 x+ b& I

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

o+ Q. W- b w/ k! K- w# z5 E

缺省按钮:

* `& I& w0 _6 F' n1 E1 Y3 z

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

5 Z7 {6 D! P/ q0 W$ U; J# Y

按钮.缺省为MB_DEFBUTTON1

: k* l( @2 v2 S" {5 ^8 H2 W

图标:

7 b! Z$ v' _* T

MB_ICONSTOP:显示一个红色X图标

# d: {9 a/ Z3 Y/ M

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

0 D2 [. X2 Y$ F

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

/ Z8 C( z& N( R/ Y, z

返回值:

4 y5 n J0 h+ l& O

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

0 I; C8 X/ M; {3 V d/ ^

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

}7 ]& B( z! u0 Y2 x. E6 f/ ^3 ?

NQUESTION)==IDYES)

- O4 S* e; v9 H) r5 @

{

( q3 g. V. G! i3 \

Close();

" O i) x6 ~4 H5 m, p

}

3 d& {7 C7 H9 S, `. ]# |

3.void Minimize()

6 f; A( Q# s6 Y5 y/ B

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

7 m4 f/ ]5 ?7 b2 ?

4.void Restore()

8 f! G# a) R1 _6 i8 ~' ?! [

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

) Y8 L& R) _4 [# J+ u) K

5.void Terminate()

7 Q4 }! V; a# f o J

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

* n% Q, t& P- C

6.void ProcessMessages(void)

1 b; G) H5 \0 f! m

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

1 ^( S, W Y% g: j, l

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

- h' g+ e+ W" G

返回值:

6 _! e/ E; q4 U: U" v9 ]8 P

按钮.缺省为MB_DEFBUTTON1

: e* ]# {. _5 S( O

图标:

" @' [. i/ F* c9 z, b

MB_ICONSTOP:显示一个红色X图标

6 b; U. M/ h8 Z) K

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

$ }3 D- ~3 Y3 v

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

+ q' |( t7 F6 U) J) f. i, D$ U: d

返回值:

, f2 V( G/ }# K: A+ V8 a9 T/ m7 {

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

w: k. P6 K3 v+ p4 [+ A

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

9 e1 M0 S( J7 h

NQUESTION)==IDYES)

2 g) @! ~! @! l* V6 M1 r

{

$ e/ ]) C d5 T* C

Close();

; }8 b( {4 ?0 w0 X5 j @, ?1 O8 F3 _

}

( c3 R; |2 M/ L% z& H+ X/ F

3.void Minimize()

1 c2 ^8 b: s* m8 x% Q' {2 K2 h! n

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

: q/ s$ Q$ u ?5 X# N

4.void Restore()

9 y% U% H% B" m9 n$ s! `

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

- b* Y7 j, Y7 u' B1 f7 e

5.void Terminate()

4 y5 L6 w* N* X" b# K

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

# P/ n/ e4 F1 F* q5 ]

6.void ProcessMessages(void)

# r3 O# L, k, m' W

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

: d D4 w3 d/ t6 Q' r* V+ B' I

中的消息

! @/ Q6 t8 Y* ^7 `5 S% b+ ]

三>事件:

' E, f. D! A0 s6 e9 r: `1 T

1.OnHint

% {( V3 z. J7 F% A, e

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

% I# {6 u' T: g. \

示显示

, i4 C8 |; t3 c# u9 J0 @7 w/ L

例:

8 a& k {# E( L$ G- g& M0 ?

void __fastcall TForm1::FormCreate(TObject *Sender)

$ z! D( e* R5 M6 U1 s0 U' Y6 ]

{

7 a" ]- }. |2 M; B$ S2 q

Application->OnHint = DisplayHint;

& K* H- ]0 r! J3 R* ~2 c# A

}

0 i# H1 v* z9 R# L; V

void __fastcall TForm1:isplayHint(TObject *Sender)

( I8 V* |& Y3 M

{

0 q" N. p+ p8 l5 @

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

5 M7 }( S+ u8 ^$ L

}

: R1 e! W7 u5 ~7 P2 w

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

6 E! S# T6 b; J0 A( \- y

2.OnIdle:

6 t: ^7 J0 `1 g u

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

! y2 G- b+ b+ V( X! ^

的任务.

# G( B! X, o/ m: o7 J+ f

3.OnException:

% Y1 `7 e' [8 x/ d( ` c. N' D" A* a

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

& C9 Y. j {' C( Y

# X, B9 S' l8 t# q3 i

4.OnMinimize

) g3 p6 p9 k: |# h

应用程序最小化时的事件

; ~6 E$ O. e: [. i$ E d

5.OnActivate:

- S0 @1 G9 @4 {* L$ k; ?4 V

应用程序被激活时的事件

5 j c0 I$ e* u

6.OnDeactivate

& L3 k# _- ?( a

应用程序失去焦点的事件

7 v. t7 r: t: z4 h8 q* p

7.OnMessage

$ ^9 k! A0 f. t2 Y; ?

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

6 M4 G% ^8 e/ K: f2 m9 q3 V* ]

8.OnRestore

2 w9 S* ]7 L1 c3 f6 f

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

7 L9 F9 J/ \' |' E4 W

TApplication应用小技巧:

5 p5 S* {2 l# e9 G$ [# s0 j

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

8 K, }# |. ~: W4 `9 {( y6 m

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

, |/ f# s6 K r, K- k0 D$ q! a

AnsiString filepath;

. W* s2 j l8 g, g f. B6 W3 `; e

filepath=ExtractFilePath(Applcation->ExeName);

: L" H& l5 W& `1 \3 \7 V5 m

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

* O" _7 d! j* k3 u/ e/ w

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

8 P9 R" c; _& ~" v0 M

Table1->DatabaseName=filepath+"data";

7 d( `; x/ f& V9 w

Table1->TableName="maindb.dbf";

; p+ C1 n* _; ~

try{

$ ^: X8 T, v {+ T

Table1->Active=true;

) }6 {: X6 X8 Y

}

( Q; T% x% F; N5 C0 B2 E" W( Z

catch(...)

, D- ]2 H) I1 l* n6 p ~% [

{

) Q. i" R* P( K! B# N3 D v/ n

//......

2 g7 O6 s$ ^" A- R5 y0 T3 i2 r

}

+ Q0 l* r5 K3 k+ T M7 W1 ~3 @% x

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

: @! s" G# P3 }! d

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

$ q7 x; e" K: r1 t! @+ \

B.自定义异常处理窗口

; R3 G. K7 Y7 E* e- _7 k

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

9 f$ W4 M7 j' ~( M/ Q' ?0 ~

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

# Y4 l9 S/ U% {+ s, k' X

void __fastcall TForm1::FormCreate(TObject *Sender)

) e& L x1 {' \3 E: s+ j

{

3 Q; g: `2 _* a5 Q( m; ]2 b! X8 {

Application->OnException = HandleException;

' ~+ t1 @" A& `& H3 O- o1 u9 S

}

0 J9 C$ B# I4 H! _' ?* v

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

6 F, b7 i- c; l9 K

*E)

5 X1 A( b$ Y: o+ s y) P2 b

{

" d* [+ r2 L ~6 i# x+ J. p

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

- J0 L |9 y! X5 [4 g) `2 S9 J7 U

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

/ N4 d5 `: t$ t# Y) r. S

}

% H3 A- Y. R m& I+ p

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

7 M `$ ~3 |3 ]) i7 J( m

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

3 L* l6 E% J! i/ R! Q( E3 d( O

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

/ X& l. u* ^: m& ~% m6 f

用程序在空闲进处理.

$ \9 r/ |/ t! p9 G * C& |1 i: R" k" _3 L, C& Y

void __fastcall TForm1::FormCreate(TObject *Sender)

' ^. O5 }: [4 R- {

{

) ^% d( U5 o/ Y# O4 s; [4 g, s

Application->OnIdle = updatestatus;

. v; V0 [/ g' ~1 e

}

6 Q# z" {+ A& Z& s/ k6 ?; y

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

6 p9 ^5 @0 \; i

{

$ \4 `0 e( X! c1 s" L( L& p

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

% o, S. V% U3 F7 K9 Q8 A

}

' g6 B6 B7 f4 N1 G ?2 R0 o

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

1 S4 K$ J4 M$ H5 U

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

) S9 I* M& ]$ d: D1 r

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

" d/ i" f. B% j2 s7 `( F b* g' h$ \

即可.

+ m0 Y' z( W/ k- B1 f& i

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

$ F8 V. A& K* v6 L- L9 L% @

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

# Y- p7 u" g" b2 u/ M- r8 [" X- Y

Application->rocessMessages();

, n$ T; A0 d% G8 k% N9 [/ \

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

2 Q9 ~. ~+ T* L% b8 |& M: v+ _0 h) 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-4-18 13:55 , Processed in 0.355702 second(s), 52 queries .

回顶部