QQ登录

只需要一步,快速开始

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

TApplication类的简要说明

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

/ t8 F& z; _7 |4 d TApplicaton封装了标准API WndProc过程.每次创建工程时,C++Builder都会自动创建一

/ ^8 R0 W3 w" J1 @1 A

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

0 J+ V/ ~# [7 I( q1 X

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

6 B' A* Y0 U' G% N- T( w. \

lcation的代码.

* l2 P& c: j/ x! ]# ~

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

) ~# s! y# c) K: O/ k( J( [) \

* w5 x. i$ g+ L/ d5 a8 V

一>属性:

. t6 L, e- O2 H0 f9 r4 b, x' C0 I

1.bool Active:

- o! E1 }4 y, |( h/ ]

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

" n6 K. o8 w, H1 L) U# y) u

rue,否则为false

0 z7 d/ ]9 ]4 f7 h) k9 O% }

2.AnsiString ExeName:

" u6 N: ~ \. v) y3 K* I: }

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

1 a( b" g2 ?$ F

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

4 Q/ r5 l/ ~; C6 d. x

的文件名部分

. o) I0 q7 s# E C9 u1 U

3.HWND Handle:

( f7 E( ~$ D+ o% w# [; i9 H

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

$ T& z, K5 H) W$ P

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

5 ?2 U( t! }# e" B( _2 w g

4.TColor HintColor:

% m, Q9 i6 `6 ?; `8 f1 R" g

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

$ b0 v. N! P, Y7 C" e

5.int HintHidePause:

- M, l3 ]) n- o& ^9 @$ P

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

" R5 e- X6 [/ S+ z) W

6.int HintPause:

( r8 _! H+ |& z

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

1 b% @6 R1 H z9 c' v

0ms

9 A! y' N5 z" K7 X4 P

7.int HintShortPause:

+ u# v; J8 x+ i5 b

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

, h2 l4 r8 {( y4 ]: X6 Q! R2 K( X

8.TIcon Icon:

* P: @6 `$ C2 L5 p* V- j. s

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

\* x- K" p( a* O

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

2 a/ ?$ q- M# |7 i0 d2 k

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

' U& z, p" d" s% z$ _' _6 K! Q

9.TForm MainForm:

6 V+ R& [" ]; x2 {9 A' h# |4 [, i0 K" K

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

K2 S; \7 h8 ?0 N7 V6 H( Z7 [* ^

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

# h6 v9 l A5 u* l+ R

10.AnsiString Hint:

& D% Q6 j: @$ V3 [% k8 u, v

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

* Y6 _& G5 r, P2 L

11.bool ShowHint:

* P8 L4 T7 s. i/ I: K2 E8 ^

是否显示提示

- ]5 a# J9 \7 f: ^; a( \* g) a" _

12.AnsiString Title:

9 T" l6 a# I& a, d- k4 c

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

- V) s/ E5 \2 i9 M9 h

13.bool ShowMainForm;

5 \1 }, ], Q& I! u& R$ J

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

! `) Y7 B& n- K" ^/ f7 t5 X

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

% k- u6 k) X* }$ O

14.bool Terminated;

7 g5 }; W2 f! R# m

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

, J8 m! m6 @0 W( ?, j

二>方法:

8 K; B# P- }$ k- Q. {

1.void BringToFront():

; C. X* X4 |2 Y

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

& H( j+ X6 x- o# G9 V/ S* ^

口之前.

& `: w& B3 d5 M& `8 s9 N z6 r

Applcation->BringToFront();

: A7 C, }% j4 i

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

+ x4 }! u6 O9 x% B3 h% e

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

- @" [6 {) @5 Q. Q4 [

MessageBox函数.

) W2 \( X4 ~: _4 _) j6 k

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

: n! \; r# M# Q: `

caption:对话框标题

7 q l/ D1 D& M$ v

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

6 J) w- k5 |5 ^9 ?

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

H) M7 W$ S4 n* R$ h5 X& @2 k

MB_OK:显示一个OK按钮

9 m0 Y3 R% N' \) o' a8 u

MB_YESN显示二个按钮:Yes或No

, J4 a( [* ?2 \9 q" V5 l1 v

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

3 W; b- L! R# V W% Y( ?/ }

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

( } c! V5 B) a1 U

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

, ~7 U q. D1 H) ]2 X+ ~& y8 F

缺省按钮:

) \0 g0 M& p$ o/ C

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

% r9 x% e; i- S

按钮.缺省为MB_DEFBUTTON1

' u" g( g! t G

图标:

' j9 a4 \1 d: \5 O$ v7 S

MB_ICONSTOP:显示一个红色X图标

8 Q8 y' f1 y1 P+ ?# H

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

, Y- F" q+ L) K8 b2 @: K- g

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

: s) w" H* m! r) Z

返回值:

: O- J* }/ f' |' W G. e

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

4 k4 p/ w# ?- H, k

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

$ s, D: K7 l6 B; [$ T

NQUESTION)==IDYES)

) ^, `: X/ B# i% S! H: z$ p5 u0 I1 P8 q

{

! b" o( G! I. Q: W" \1 S% T

Close();

8 J% ]+ R; Q' }/ s/ w# s4 y' \

}

+ {6 k2 p9 q% Q" K2 l4 Z% k

3.void Minimize()

\8 V1 K8 [. Y, j* C8 |, @. g

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

, R5 l$ c7 P" b5 T% Y6 `

4.void Restore()

+ m {4 Y( Q& i- r1 {

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

, h* H! ?' S+ p' @, ?5 A4 b

5.void Terminate()

- t3 E% ^, \' w1 J! i7 W

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

* k5 V$ y/ E0 k, ~( R+ P, N

6.void ProcessMessages(void)

* v( S- d/ T1 E# `" m# J/ z5 d' w

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

* j( F; F/ n" h6 p. \

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

( {+ h4 A5 a+ G$ `! o; a

返回值:

; o5 |! @! t1 M0 }& V1 ]

按钮.缺省为MB_DEFBUTTON1

1 P' c0 [/ }5 Q

图标:

7 n* ?" k% b1 I- V' v4 c

MB_ICONSTOP:显示一个红色X图标

: U' k$ a; E6 X% Z6 U( [4 y% q3 `

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

0 T$ G. X6 x/ v% k2 L

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

# }1 M# V' |: X7 W0 ^

返回值:

, S/ C& a9 T, V

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

7 g# Y; d# B. Z; ^7 G( e) B: y

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

8 \ k% ]; G8 z/ o

NQUESTION)==IDYES)

; H% d% `, D% ~( ^. r7 X8 E6 t( n

{

8 _' M$ q; { E" M

Close();

( W! {2 S/ l1 V# C

}

9 o Y' Y- L& S0 L1 x. \

3.void Minimize()

v, t& X/ O, j# c, A% U/ I

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

0 Q* |9 [ d& }/ Y

4.void Restore()

; J, t+ E0 Y$ W5 k

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

9 |$ l! a. I q( e: `& x0 W4 V" C% p& m

5.void Terminate()

4 O9 y3 F7 q; w$ v* f

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

1 ~! u7 _9 ]9 _% c6 [) M( I

6.void ProcessMessages(void)

" v \& D; ~7 Z: E0 B

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

( S4 W8 M+ j$ ^2 J* ?

中的消息

, {5 L8 s: u8 h* i9 y4 R# e; c

三>事件:

/ Q5 l$ W) \: _! C2 d

1.OnHint

% B* l! I2 I' w, m4 f

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

3 Q. ]( L; q- n& Q

示显示

4 C7 ~0 o% D( s c! A/ I. r

例:

: p+ F; c, |; s* ?0 X3 g& I: k

void __fastcall TForm1::FormCreate(TObject *Sender)

# _) {& ^! p* `- _' R) i6 v

{

8 T' e( X: w$ K! m- M' O- ?/ D

Application->OnHint = DisplayHint;

7 x6 X6 F, t; U- [1 n

}

/ l Y5 r/ P2 ^' D% G& i0 I& s

void __fastcall TForm1:isplayHint(TObject *Sender)

& g% a* Z( \) W, Q9 S3 N: J/ {' ~

{

/ a; o5 }, g8 D

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

* d/ h n: i7 U7 E2 }

}

4 X$ Q* i4 G8 H. E6 X

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

s& D1 M" G9 R* O& S; u

2.OnIdle:

" v- v( u; i7 E* G! }* c

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

! O* j6 n# D! L9 i$ m Y1 f

的任务.

7 T* k& Y7 `: @* e* H

3.OnException:

3 C' i" [2 p5 E8 A" f% ^3 W

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

- G/ v5 |$ R5 a _

, g2 U5 ~5 f4 i

4.OnMinimize

5 ]- A" C( _ y

应用程序最小化时的事件

4 i8 [) k. m7 y# T0 C8 U% V$ f

5.OnActivate:

5 ^% N! {! r' d+ z- w5 `

应用程序被激活时的事件

- i: {( y) ~& P* g

6.OnDeactivate

# z2 A1 |& G0 e- u* u

应用程序失去焦点的事件

" p/ W( V$ w y& C3 g

7.OnMessage

& B' E) K8 u+ k; H

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

% t8 H& K* V( i' X3 B; k

8.OnRestore

8 S f% B8 N1 l8 P; z. E

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

1 S2 w2 y6 q) W% r( H1 b, y

TApplication应用小技巧:

+ ]3 j% v! d8 ?" X

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

& \2 q+ ~/ c I3 m- X- {8 w6 H

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

9 F0 ?( }$ r( B% ?7 K0 i8 j( l

AnsiString filepath;

- D, v- G$ j! R3 L3 I' `, ^

filepath=ExtractFilePath(Applcation->ExeName);

+ [5 i0 `# ] _1 ]8 N, l7 o* n

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

2 J- V, Q$ [ B% G) p f/ W

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

6 ]" Y+ f0 e* X, o' A* B

Table1->DatabaseName=filepath+"data";

* ]& l) A! f: ^

Table1->TableName="maindb.dbf";

, x, M, z& A% o7 a# M. s; U

try{

( V+ `0 @8 B" g6 @# s$ h- H2 P

Table1->Active=true;

! X2 ?( A( R0 @* j' R

}

, ^- B. r, E) x! }! k

catch(...)

5 X, x1 `7 }% E8 R$ @; O+ j" Z

{

: [2 L6 I" O7 m) G) D$ m

//......

5 k$ r1 K& b4 z8 Y+ S/ r: G" w! J

}

) O1 K" {' j0 C% Y ~+ V* P

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

5 a# T* _( Z1 Q5 P/ l" V

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

9 w7 T& @ e. G' N& q9 W

B.自定义异常处理窗口

2 z& ^4 z, T; f) m. Z' G2 c* |

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

& V0 K* G5 F3 c$ c1 W

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

: X4 U% }% U6 x$ E2 J, W7 Q

void __fastcall TForm1::FormCreate(TObject *Sender)

' J/ O% C9 b# c/ c$ I

{

7 r2 r( l, G& o! ^6 M+ I3 e

Application->OnException = HandleException;

; ^1 |4 M2 [% g4 C5 S1 }* L0 E( C

}

# M* k! p: B' h3 O9 b1 R& G% y

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

6 N. J# T% _ }4 a# m v, d" t

*E)

( {6 g+ n: r9 r, {6 ^4 d

{

9 t' x9 _9 H0 l& g9 U7 |) r

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

0 X6 x# \$ d( L$ b5 D1 i9 \

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

* W" _% B4 k$ L$ C, `! [7 l

}

- f, I5 i$ R1 v: ?. T# ~

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

: w, \. O( I/ v

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

& I( l: o% r! m( s

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

$ n* @2 K0 H$ X0 y5 `

用程序在空闲进处理.

. _4 ?9 A, r: i# E 5 O2 n# K9 k! g" a

void __fastcall TForm1::FormCreate(TObject *Sender)

; s0 x! Y0 Q3 ?- @9 t$ }5 I( v

{

% B. _ W4 b, X% b) m' R5 t

Application->OnIdle = updatestatus;

* M; Y7 B/ S# a' B

}

$ c$ e7 I; t& F. w

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

) j4 M- u* {7 y% _! z2 l

{

5 F8 \3 i# v8 Z! C$ `' e+ M7 i2 S

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

: b/ Y+ A* U* X) |, ?4 N

}

9 }; Q& U3 _, B2 S* D

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

! X$ Y8 i/ Z0 U0 c- f; O2 t2 Q3 z

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

$ i3 x1 n2 c7 O1 Z! f; ]

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

$ R" e5 |, g2 s6 R

即可.

& Y& h$ `' G. w+ E, P g

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

9 v) I( N# A! \0 Q$ w

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

- F" s7 f) ?6 Q2 n/ P

Application->rocessMessages();

- p4 }1 E8 j' C- R. S

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

: V) |, |, p) f: z l

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-10 21:09 , Processed in 0.365684 second(s), 52 queries .

回顶部