QQ登录

只需要一步,快速开始

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

TApplication类的简要说明

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

* G& f) m4 }3 v) w( ]6 [ TApplicaton封装了标准API WndProc过程.每次创建工程时,C++Builder都会自动创建一

: z8 l0 e8 L. |" y

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

4 s5 }8 |$ b, e9 O/ T6 m6 T2 ?

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

) r: h0 f5 W2 I8 A1 `- o

lcation的代码.

4 S1 C8 [& R' v" }5 [

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

9 i; m9 R* P0 ]0 Z- E; b0 Z5 ^

0 ~* ]1 W4 [) M1 v: d" ~

一>属性:

" U; l, n9 |9 b9 q$ A

1.bool Active:

# O% R* A# w( g

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

" U0 [3 _( O* K. n5 O1 e- L k* `

rue,否则为false

: z8 C3 Z. M/ A% g" a

2.AnsiString ExeName:

* z. c! |4 p5 i. x

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

) s7 O9 @( W/ ^

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

5 w1 H# \+ e) `( V

的文件名部分

. Z" w# `8 c& m, k( U

3.HWND Handle:

+ l; W$ ]( q/ Y4 ~2 X: t. s

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

* m/ V! H% H; r5 ?5 G

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

5 l* F0 b$ y! e

4.TColor HintColor:

4 c" A7 g4 ~0 z6 ?# R8 p# k

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

0 ?" K M2 f/ G0 ]

5.int HintHidePause:

" W+ D& h/ ]# V! Q0 S' S

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

: p$ B# \6 w. u

6.int HintPause:

$ I2 T) U8 p2 A) b5 Y

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

" Y7 ~2 h4 z( I2 Q4 F

0ms

5 M: Y" L. ?7 Z. [- |+ C, D

7.int HintShortPause:

- c6 B& I( Z0 Q5 p' [( A) [

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

[* Z* c( M! X: Y7 D

8.TIcon Icon:

' L4 k2 y5 m) f

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

7 t9 ^+ K2 X' [- j

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

% B n! X5 u8 \$ m" d& n) k5 O

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

* j0 H! q; I0 u# y$ e3 B

9.TForm MainForm:

: [& W0 a9 C6 @2 X* n: b

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

0 j% n# e2 W" ?' m0 w# z! I

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

& Q4 i2 F- q/ |" Y- u8 h

10.AnsiString Hint:

; Z6 V' U7 o6 h, H. t' Z6 O

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

/ O+ `) q4 u3 j2 n. j7 D

11.bool ShowHint:

6 ?7 v; I9 s2 e/ N# l z/ c6 w

是否显示提示

. F) m3 x& J4 U9 j6 [* A- U

12.AnsiString Title:

J5 p) ^* r% j8 \

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

1 E3 h$ Y% B( A- l* ?5 ^: M6 m- {

13.bool ShowMainForm;

& c% h0 H0 x5 |# K; @: I4 O, o+ Q

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

( {+ n0 n6 z- G! h3 l5 J

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

; i8 m s. y4 d, b M

14.bool Terminated;

0 `) K$ b0 Y L2 V

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

1 v: I& a- U$ C5 N9 J0 s9 _

二>方法:

" t: b$ T. L8 J2 a4 }! G

1.void BringToFront():

t5 R W C; c# h

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

- E6 U/ `' [5 R$ Y( r

口之前.

/ d3 i k, f" R2 M8 p; I" U

Applcation->BringToFront();

" L/ H- b- E, H/ E" e

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

3 b5 S# E; R" Q4 p; X: E

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

3 K. N7 w+ i" ]3 ?

MessageBox函数.

* [) W1 D- H. h; d2 R

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

$ [- f: B' r/ @; I0 H5 ?' d

caption:对话框标题

! P s$ o* \ G; S6 f

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

. o" D/ J1 ] C3 ~$ K u9 W

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

, O& I, I! i- S8 h$ |

MB_OK:显示一个OK按钮

: W0 W1 a3 O) P3 X5 k/ a

MB_YESN显示二个按钮:Yes或No

8 j& F! q+ q2 p

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

2 b+ V1 R" P+ p6 P

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

% G& M; m1 A/ l/ \9 P$ F

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

' f, x* Y1 V* \3 [2 S4 o: E- u8 Y# P

缺省按钮:

' u; ~. b3 l& F+ ~0 ]* l

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

. Z2 l4 F, L, h$ }5 e u

按钮.缺省为MB_DEFBUTTON1

/ W! m3 h0 }6 { d2 w

图标:

+ Z% r5 b6 y L8 j$ E

MB_ICONSTOP:显示一个红色X图标

" G0 Z* T3 P7 A9 G2 R5 o

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

( r" Q; l B4 u& Z

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

% ^2 ]) |2 I2 S* \* J: d |3 V

返回值:

. o6 G) K( W" @+ r

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

6 ?& m8 n$ ?: H# g! S4 h8 o: _) A

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

- t) A' _6 m* A& W! z

NQUESTION)==IDYES)

1 n+ ^/ P8 X- e p

{

6 A$ e% }; v* W* L0 n

Close();

& ^" \( D! d/ U8 }( S5 \6 o

}

$ K5 [% X; |( H- @3 y" O: R, \

3.void Minimize()

( U3 w# y" b; f$ W

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

! r- D. o# B* x% d% O

4.void Restore()

$ k5 x, k: Y7 H

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

/ O( s0 x0 u% i% x( [

5.void Terminate()

5 e( C" M" _6 }2 l

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

' W3 Q& ?2 L; H2 @2 m* G9 a

6.void ProcessMessages(void)

1 Q% W/ d9 V5 d8 x L

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

/ A7 i; |) k# R0 j5 R/ T

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

! O+ K. m- t# N' `' L5 @$ w1 |

返回值:

2 N! T. t& @' d$ J+ f. V) T

按钮.缺省为MB_DEFBUTTON1

2 g5 X$ G# `; E9 J

图标:

4 [' n8 n$ ~2 y; k1 \

MB_ICONSTOP:显示一个红色X图标

]% z4 T& r, H& r! z( w

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

* n8 T- [ ^# c. ^4 y4 |

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

7 a. c6 M! l( [+ j5 R

返回值:

" S& n0 \. k& c, A" ^

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

) s: O$ d5 p+ L; _

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

/ C8 h6 P# S& Z# q0 m

NQUESTION)==IDYES)

- @' b5 a% J" b5 ]% v

{

9 Y* K3 a- l; z+ ?; s* F0 n

Close();

2 |" Q9 z+ ?) g$ U

}

' Z% N* |1 \, y( O- I) W% C$ d

3.void Minimize()

+ U1 x- v( {$ V) s' ~" f( M

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

9 N; s, Z, P; \

4.void Restore()

1 B+ A# i! v4 {* T: V% `) @

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

$ Y9 |; ~/ f1 u* k5 j

5.void Terminate()

- `, k: {2 I/ x" T2 N! A/ Z& C

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

8 w) _+ P( j4 n1 {. v0 a, k! ?4 x

6.void ProcessMessages(void)

$ F3 }) u: J! X9 u) r2 R

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

' l6 e, l; s3 i- _; }% h; d

中的消息

% u& ]+ u! g3 m8 _8 b1 O

三>事件:

% z' d9 ?6 W- P1 N. ]" V

1.OnHint

7 ?: y9 _& y6 W. z' \

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

" {4 J1 ?7 j; Z7 R( {/ k7 N

示显示

2 ?# R/ U# i5 ~8 r! V3 K% b$ N( d* [

例:

7 I( \/ `3 ^/ {9 i

void __fastcall TForm1::FormCreate(TObject *Sender)

0 }" ^' P8 _& w- h) Y, `. ?

{

5 o+ ]' F; j& q

Application->OnHint = DisplayHint;

* S0 _% L* V7 y

}

+ ^5 N; k& E. n, o8 @$ h9 g1 m- v0 y

void __fastcall TForm1:isplayHint(TObject *Sender)

% l; X8 j& I( b' x. ~

{

4 G' Z: `- P8 f

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

4 Q2 S' N4 }7 h2 m" m9 ^

}

% T0 j% m; g/ x' v: B" v

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

. X# x, V' l* Q5 }& }' E

2.OnIdle:

9 K* F$ I) W0 b& Z, y2 Q

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

. L- H8 q# A; h

的任务.

2 V/ T- v( ~! L- _0 |

3.OnException:

$ e- f5 q1 E) X% N7 p2 H7 Z" e" g

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

# m4 o; g: e i& K D+ k

0 A6 n' A. n% Y! A# l2 g

4.OnMinimize

' V8 A: f1 i/ C. O. i, R

应用程序最小化时的事件

7 e5 t, {3 C9 S, B* v

5.OnActivate:

j! ~# }/ i3 _6 a ~

应用程序被激活时的事件

/ h% n- i0 I- N! K* Y3 r

6.OnDeactivate

7 a! w+ L: n6 d7 y' E

应用程序失去焦点的事件

! z) y) Y0 u3 ?8 g" L- L, @7 O2 u

7.OnMessage

& f; [' x5 u8 ?0 B( \5 Q

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

- v x" }# U. N

8.OnRestore

/ _. h$ A c1 z6 e5 h8 B

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

( l$ D2 p' k; k( }" a3 A

TApplication应用小技巧:

8 c0 L+ I( ?) w% w# l# \% N9 u

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

& L, G' @9 J. B

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

- `, U1 a# m" P. e4 c/ D5 s

AnsiString filepath;

/ L$ B( i5 b1 P) A6 g

filepath=ExtractFilePath(Applcation->ExeName);

; P) S! X( t9 L A8 q

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

0 n9 ~4 [2 U+ H g* u1 u- n

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

7 I- e; J' o" |. j

Table1->DatabaseName=filepath+"data";

Q) f7 x+ z& S6 d P& j: K

Table1->TableName="maindb.dbf";

" e7 Y. ]% l2 f F

try{

8 }2 |/ X: A% y

Table1->Active=true;

; V! z+ ~- N% T5 P0 w$ B

}

9 x8 I8 f; h9 p6 O, _' l' T4 |

catch(...)

0 g7 z8 K' x/ |. t

{

7 ]/ ^5 a$ S+ Y, v

//......

+ b# k$ V2 p& d0 h; ?4 b

}

5 s4 C! J, z. E+ w. ~- d: @3 h7 T

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

6 }7 I' Z1 I3 G' D' Z

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

, S2 E# g% d+ T

B.自定义异常处理窗口

2 Y' S2 m1 Y- ^+ M) G

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

/ ^5 W+ x( k2 |/ i+ p

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

& K/ A0 q9 E9 U+ G+ c6 ^

void __fastcall TForm1::FormCreate(TObject *Sender)

& Y" Y6 }+ ?7 t$ G3 z

{

* X. D( U+ [) X

Application->OnException = HandleException;

8 f& k( k6 C( D& T! L0 h

}

" L; A7 _2 O0 p( ~4 P' G

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

& A6 v! o. E9 [3 x

*E)

; u4 a1 @1 D" _4 N" O2 a

{

& j) h+ k; x) j9 i j1 j

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

" T0 L- O4 k% J) R( F. R

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

( {- ?1 }! X# t4 A

}

4 Q$ v p8 W7 \2 k) J& i! t

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

5 N' i& j" G' J% N2 a' r, M5 b

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

: |/ [1 d( \% K' t

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

, f# ]$ I/ l- k7 [) c; W

用程序在空闲进处理.

7 D6 H, w, X' D3 `9 y0 y3 z7 Q4 `4 H# V i1 C ?* s, {( D

void __fastcall TForm1::FormCreate(TObject *Sender)

2 J% Z8 s. O; B. ]& P( m8 c x& E J- G

{

$ i) J/ J @7 ?( ? {" G

Application->OnIdle = updatestatus;

' g4 Y# [5 \. |" K ~" m

}

0 c! n1 u: u' y$ [9 V- o5 _+ q; p

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

" b. h3 _7 M$ @* E# |0 g

{

: C7 Q- ?/ X! P2 N& F

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

" g3 W6 x9 R/ T. A, T

}

* Q( E7 @2 ]" c% T' y

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

/ b [, o( n1 D" j) V6 I, f2 ?: A

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

* Y7 F$ X( \& n! f

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

+ l; p7 b y; I5 y+ S! v

即可.

+ c+ C7 n3 [# ]2 `# Q( g

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

! L+ y, d: S) |: u6 @6 b/ P

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

+ k4 t+ m4 n/ | v7 G2 K# ^" f

Application->rocessMessages();

* _, ^7 k. k# r2 Y1 ~9 y

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

$ m" d5 E* w( V1 b. m' 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-8-13 04:58 , Processed in 0.381070 second(s), 52 queries .

回顶部