QQ登录

只需要一步,快速开始

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

TApplication类的简要说明

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

# C9 B; s% E" v; f) B& b# G TApplicaton封装了标准API WndProc过程.每次创建工程时,C++Builder都会自动创建一

8 v+ U- ~; p. F3 M

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

4 O& s, T) s- F- H! t, H

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

: A2 j% ~- V' [. H) F& z: [+ K w

lcation的代码.

$ Q2 t2 Q+ S. A$ d. C% L

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

& u d: a1 F+ V$ A

7 D, J; n$ ~. A/ d

一>属性:

% c8 ]. M% ^7 E, Z

1.bool Active:

, Z7 p8 L* P1 Z, n8 k

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

8 _& b& v& z% b& f/ S1 `9 k5 F

rue,否则为false

' n0 w& c& f! C6 G1 i) R

2.AnsiString ExeName:

. F7 L7 Q* A j9 R4 D! j9 I

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

1 Z% t. {' E: N# O6 H

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

' c i3 j4 u7 o, ~* G/ i% O, T

的文件名部分

+ g& q1 ^, ` e

3.HWND Handle:

, b7 z( W' C5 c7 m" L0 u b

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

4 ?; x1 x+ u) U

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

8 p1 B2 k# i; S+ @1 x& Z

4.TColor HintColor:

0 f( g) j8 \; @+ z ?& ~8 s3 ?, e* m

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

% J# h/ m; b1 Y0 k

5.int HintHidePause:

N" s0 ]5 ]7 l' Y4 g/ Z

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

3 W) c+ R D. Z2 W

6.int HintPause:

6 m/ n8 [& M0 H3 U

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

+ K1 T# S- X$ J

0ms

/ J3 c( D# S) C3 M

7.int HintShortPause:

8 Y5 l+ N, {; t! v' H+ n) b' w2 z

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

0 a/ ?" {+ c2 ^: K0 B; |

8.TIcon Icon:

9 t% k% o1 T, @

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

) f2 o5 M" r3 I" W3 Q9 B' ~* o

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

$ ^5 ^8 p3 ], U8 H! I9 v9 H

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

: x( u4 @& X& ^. B9 D! j0 |

9.TForm MainForm:

$ W/ a7 R' R5 ^! g

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

9 U- `) E' T2 f) Q, W& D# O' q4 H; v

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

3 T- m, u4 o! q9 L& I

10.AnsiString Hint:

0 }" z! z1 `& Y. _5 @ T

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

- C0 N1 ]5 f; U, w3 U+ K# T1 c

11.bool ShowHint:

! p& ~+ H7 |" a8 [

是否显示提示

8 H" ]" g% n2 m5 F; e! G" Z

12.AnsiString Title:

1 W9 R Z- J5 c% @+ P

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

o% R6 j/ R" c$ `# o7 x

13.bool ShowMainForm;

# a5 o/ M( ?8 Q, ?( B8 r

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

0 x: E' K* w! f. x- p, d3 f

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

4 v8 O( Z) O' s( n7 _; |4 Q

14.bool Terminated;

- f: p+ z) M5 j$ Q* o

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

2 T5 @+ S, [, a- U

二>方法:

" { y2 k2 b4 s I N& y

1.void BringToFront():

3 U: Y0 j+ D, _* v$ O# @

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

1 T' d, s% V5 a

口之前.

3 _- B! u# I S

Applcation->BringToFront();

8 o' C5 `0 K% X3 m0 E$ R7 P

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

/ R3 ?, L. @% K0 D& H

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

, E" s3 z. ]6 C

MessageBox函数.

0 u4 s0 r- I; P. d6 q" x5 J; _

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

# K# N' w. ^0 S0 Q9 `/ S7 c

caption:对话框标题

9 i# B6 [* |9 r4 A5 ?

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

& t" [, K6 b/ e3 H A4 i$ e

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

a( L8 x! U1 L; i

MB_OK:显示一个OK按钮

+ Y7 f0 ]+ @; u1 x

MB_YESN显示二个按钮:Yes或No

, R6 L6 P7 G) _7 ^$ Y

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

9 R7 |3 _. W6 o/ S3 `

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

9 [! D) G& j7 Q, G, c* K. J

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

4 ?# U3 l: D( b

缺省按钮:

/ _6 @/ W. q( `4 Q; D

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

# F( ^4 l( C; n# D9 j( i* T) r4 H

按钮.缺省为MB_DEFBUTTON1

$ w9 [) y6 x% i4 m

图标:

- c$ f+ Y. F9 c

MB_ICONSTOP:显示一个红色X图标

2 y1 h y7 w' f, ~

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

4 |$ ~, N! u+ x# m# x7 f: T

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

0 }4 V7 n/ Q) h( `0 {' d& K, F

返回值:

& A7 c" T% `! r6 ~7 l" ^/ u! B

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

6 b# z# ?! T% O3 ~! R# E

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

9 [9 U( [, \' u4 r' F

NQUESTION)==IDYES)

8 d& J, S4 p1 f4 @

{

- Z2 W8 T' \+ k2 ~+ V

Close();

9 Q' H2 t0 R+ e2 L

}

# F3 u( @3 G4 ]/ b. f' P

3.void Minimize()

$ O$ H1 I1 l. B3 H1 M7 x& i& w3 N2 W

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

8 z: p( @' V/ { ?

4.void Restore()

7 t0 j1 V m8 H1 K

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

: M ?; X3 G) `; U

5.void Terminate()

$ j, k7 ^$ K7 L. ]

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

- G# d& i) k: D. X+ L/ r

6.void ProcessMessages(void)

" g/ y% s# g6 ~- [6 |

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

+ {( `: `. e4 |4 R/ i7 u2 Y

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

, ]' g% b" A& ^- ~; ^

返回值:

2 E5 [9 x, |' Q/ K2 I

按钮.缺省为MB_DEFBUTTON1

9 u& b8 A1 m$ d- i

图标:

# J1 u/ J3 n6 {+ y* k7 v# o! \

MB_ICONSTOP:显示一个红色X图标

, \2 x2 n. ~, m6 _/ v' K& o: D

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

, y1 H/ w6 z/ K

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

( v) F1 E( V" v7 ^$ V! U

返回值:

* y6 |* }/ R1 U" Z5 c% L

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

5 U- q0 ?. A, c1 _# A. ]

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

( @$ u B! \2 v7 x o

NQUESTION)==IDYES)

6 E5 ^ J6 b: @

{

& H8 F7 ]1 l) N% Z0 B

Close();

/ W& ?1 {3 _% V# ^

}

1 z$ v" a7 ^2 I$ D# h( ^7 A

3.void Minimize()

9 K; V5 x2 M- t( @4 x1 O" `* h

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

H% A/ \, |7 \4 G

4.void Restore()

2 _4 P f4 a4 @) o& N# ~

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

8 i! c* B3 F8 S# m; P# L ~

5.void Terminate()

* t" K I$ a' D$ O% `$ v% d+ E/ A

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

' U0 ~! r7 H0 b/ w+ a

6.void ProcessMessages(void)

; U! }* W. B1 c+ r" X9 [4 S

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

2 f% b; @" U, ]6 ^" P) l& S$ c5 x. _. v

中的消息

4 i7 \# e. T- C+ X3 D

三>事件:

1 L8 `( p% E( T g' `1 g1 W% H

1.OnHint

! w: R3 H: Z' A) C, J

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

; ]2 _; z) B1 y9 L$ M

示显示

- M' f; Z4 u# M) }1 I

例:

$ `1 R( q; |1 W& z' z

void __fastcall TForm1::FormCreate(TObject *Sender)

1 ^) b1 w& l& |' P# {# T

{

+ S# d, b( s+ z" O) V

Application->OnHint = DisplayHint;

( @1 {/ m* x/ E" ?

}

/ P* s' ?8 }+ D) f

void __fastcall TForm1:isplayHint(TObject *Sender)

$ J! T* z. R; P0 O$ d) ^3 p- Y

{

2 v5 J* s4 d5 I- i, J( x/ {. h

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

: `$ D7 z4 D$ G! Y- L+ C# B

}

% `3 P$ h% [; u0 P3 e+ T

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

5 Z- s- {1 y, F8 j3 c

2.OnIdle:

2 m6 l; Y! e0 x$ b, Z0 g- E/ q8 [( \

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

/ V) `( N" p! a# U$ X

的任务.

! o( E. W2 z+ Z( f R

3.OnException:

: w# D3 l; ?7 ]; l4 |

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

9 L8 }8 ?; c1 H

2 @1 ^! C! _; X; J

4.OnMinimize

( }9 Q3 r! `# m5 g( K

应用程序最小化时的事件

, B2 S# `& Z' h' _$ a1 k

5.OnActivate:

$ K6 D3 `$ A# a- q: o2 _5 w

应用程序被激活时的事件

; |" |+ D8 B; Q: a

6.OnDeactivate

# C- b) V; L. f' T

应用程序失去焦点的事件

- L9 J, I9 m2 n* h* t* @

7.OnMessage

9 s5 V# p, d# V- w- m0 N

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

3 X5 M+ N1 |2 o

8.OnRestore

# K/ B# d" b% ]. F' R

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

& d: Y4 B. _* I0 o! k) E

TApplication应用小技巧:

+ _ X, m$ J$ e+ L' d' e

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

- F. R/ `4 m; t, Q2 F

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

4 T ]' N5 V8 k% J

AnsiString filepath;

- h, @( X( H+ A0 M* s

filepath=ExtractFilePath(Applcation->ExeName);

. Y9 j- v, v3 H. ^/ J

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

: _* _. h% |2 t9 _( ?- Q. g% F

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

, w$ _' D" j6 }

Table1->DatabaseName=filepath+"data";

, h4 N4 ~# Q7 W$ U( B

Table1->TableName="maindb.dbf";

; n% S+ @4 z. H- L1 G8 a

try{

3 z4 d! f0 A0 j5 Z3 [9 Y* b

Table1->Active=true;

3 ? V9 k3 b; Q; G/ y

}

8 [) \/ b, f1 l1 Q8 ]/ Q

catch(...)

# ~8 g0 _2 C. f6 O6 D

{

& P) L. h2 b& U- z. ~ R

//......

" y0 ?. E3 ~ Q9 N. V. b/ A/ F

}

. e+ U2 }3 J( V7 B2 {

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

3 W# E E2 a8 m, Y4 u1 \( M2 [

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

* h- k8 x- A2 J, c; s6 Y. n* {# r

B.自定义异常处理窗口

) V, I' Y j9 h( v: e

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

9 g" b' w2 j- `

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

. W7 f9 x( q/ W6 ?, U+ E5 h

void __fastcall TForm1::FormCreate(TObject *Sender)

3 |* W5 ^! F8 z1 ~9 ^( s

{

1 _& ~) [0 t( k- z, N

Application->OnException = HandleException;

+ ^ `( s8 F+ M m/ a# N2 e2 V& h5 O

}

' r4 G( e, U; V

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

4 l% m) E( t& K% @* }

*E)

" Y, Y) ]4 {6 y4 G( b% d( k

{

( u. r) _; H( B I+ t1 _& ^. e% n; N

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

: X; n9 ^8 m6 U! s8 W

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

1 T: e/ S2 T* y7 H. S

}

! `7 q X/ J4 Z5 l$ @0 T

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

1 j$ B n8 @) V8 d3 s0 q3 g

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

l7 Q: y' q+ o3 m& Q% S

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

) ~5 s( i w! R4 K* F$ D- H! f8 C# w

用程序在空闲进处理.

" f# ]- Z# @; p7 Y5 ?3 p 2 h; [9 p* U" q1 P$ ]* T) }/ \; f% u

void __fastcall TForm1::FormCreate(TObject *Sender)

( L( x5 Y0 o, ?! o+ E0 Y( q) e3 w

{

5 I/ n8 a1 l2 U4 c

Application->OnIdle = updatestatus;

' [4 Q3 D7 M0 Z" w! }5 i

}

( a ~3 E7 [( J

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

: w0 ~& P* Y) b" F8 |

{

0 h# t) j# Q& Y% X# U1 N% @

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

5 J: t. y0 E: Y

}

& L, y4 i+ ]6 Y8 d

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

% R) b' R) n3 o8 N: A! s6 h

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

( B9 R/ K1 u' {( l6 P

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

4 C. ]9 u. |1 o: H% a. n/ R

即可.

* _# k- B: Q# [1 l3 Y1 D' z, Q( a

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

: W& Y& p% z2 N6 L' z

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

8 p) n0 \% q' v& j; }: s. [; n

Application->rocessMessages();

: w8 N% w: [& A: v) A D' _9 n

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

3 v$ V+ |, J+ y, d7 p& Z

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-12 17:02 , Processed in 0.602637 second(s), 52 queries .

回顶部