[推薦] TApplication類的簡要說明 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
TApplication類的簡要說明來源:C builder資源中心 http://bcbcn.yeah.net 作者lynu TApplicaton封裝了標準API WndProc過程.每次創建工程時,C Builder都會自動創建一個名為Application的TApplication類對象.在Project Options的Applcation頁中,我們可以設置這個Application的Title(標題)和Icon(圖標).也可以在工程源文件中編輯Applcation的代碼. Application對象不是需要經常使用.下面是TApplcation比較常用的方法和屬性/事件等。 一>屬性: 1.bool Active: 這個屬性是一個運行時才有效的只讀屬性.當應用程序處於激活狀態且有焦點時它返回true,否則為false 2.AnsiString ExeName: 這是一個常用的屬性.它返回應用程序的全路徑執行文件名.運行時有效,只讀. Label1->Caption=ExtractFileName(Applcation->ExeName);//取得執行文件全文件名中的文件名部分 3.HWND Handle: 取得應用程序的窗口句柄.調用API時可能需要.這個句柄是不可見的應用程序的窗口句柄,而不是主窗口的句柄.要取得主窗口句柄,可以用Application->MainForm->Handle. 4.TColor HintColor: 確定工具提示窗口的顏色.運行時有效 5.int HintHidePause: 確定顯示工具提示後的工具提示顯示持續時間,缺省值為2.5s. 6.int HintPause: 確定工具提示顯示之前需要的停頓時間.也就是工具出現所需要的等待時間.缺省值為800ms 7.int HintShortPause: 確定工具提示再次顯示之前所需要的等待時間.缺省值為50ms 8.TIcon Icon: 應用程序的圖標.此Icon出現在應用程序的任務欄窗口按鈕上.並作為在文件瀏覽器中應用程序的圖標.一般在Project options中的Applition標簽中設定.當然也可以用代碼: Application->Icon->LoadFromFile("e:\\icon\\cb3.ico"); 9.TForm MainForm: 應用程序的主窗體.這是一個只讀的屬性.主窗體就是應用程序最先創建的窗體.可以在Project Options的Forms頁中設定.當主窗體被關閉時,應用程序將結束. 10.AnsiString Hint: 應用程序的Hint(工具提示) 11.bool ShowHint: 是否顯示提示 12.AnsiString Title: 應用程序的標題,它顯示在應用程序在任務欄按鈕中 13.bool ShowMainForm; 是否顯示主窗口,缺省為true.當我們想建立一個不顯示主窗口的應用程序時,在工程源文件中的Application->Run()之前設定這個屬性為false即可. 14.bool Terminated; 檢查應用程序是否已收到關閉消息.如果為true,表示應用程序即將關閉. 二>方法: 1.void BringToFront(): 將應用程序置於激活狀態並且擁有焦點.它將使用應用程序的窗口置於其它應用程序的窗口之前. Applcation->BringToFront(); 2.int MessageBox(char *text,char *caption,int flag); 這是最常用的方法了.顯示一條消息的對話框,可以有一個或多個按鈕.它封裝了API中的MessageBox函數. text:消息字符串,可以是多行,多行可以用"\n"隔開.如"你好!\n歡迎使用本程序." caption:對話框標題 flag:決定此對話框形式.常用的如下(位組合,用|) 按鈕,決定對話窗口的基本用途 MB_OK:顯示一個OK按鈕 MB_YESNO:顯示二個按鈕:Yes或No MB_YESNOCANCEL:顯示三個按鈕,YES/No/Cancel MB_ABORTRETRYIGNORE:顯示三按鈕:Abort(中止)/Retry(再試)/Ignore(忽略) MB_HELP:顯示幫助按鈕,當按F1或點按鈕時觸發Help事件 缺省按鈕: MB_DEFBUTTON1/MB_DEFBUTTON2/MB_DEFBUTTON3/MB_DEFBUTTON4:決定哪一個按鈕為缺省按鈕.缺省為MB_DEFBUTTON1 圖標: MB_ICONSTOP:顯示一個紅色X圖標 MB_ICONINFORMATION:最常用的提示圖標,一個小寫的i MB_ICONQUESTION:當MB_YESNO使用時這是最常的圖標,顯示一個問號圖標 返回值: IDABORT/IDCANCEL/IDIGNORE/IDNO/IDOK/IDRETRY/IDYES:表示用戶按了哪個按鈕返回. if(Appliation->MessageBox("你是否真的退出本程序?","關閉程序",MB_YESNO|MB_ICONQUESTION)==IDYES) { Close(); } 3.void Minimize() 最小化應用程序的每個窗口和當前顯示的窗口 4.void Restore() 還原一個最小化的應用程序 5.void Terminate() 自動調用API函數PostQuitMessage發送一個WM_QUIT消息以關閉應用程序 6.void ProcessMessages(void) 常用方法,在長時間循環中調用它以讓應用程序及時處理消息.它可以立即處理消息隊列中的消息 三>事件: 1.OnHint 當應用程序的提示要顯示時的事件.我們也可以將它指向自定義的函數中作特殊的工具提示顯示 例:void __fastcall TForm1::FormCreate(TObject *Sender) { Application->OnHint = DisplayHint; } void __fastcall TForm1::DisplayHint(TObject *Sender) { StatusBar1->SimpleText = GetLongHint(Application->Hint); }//一個Hint可以包含由|字符分隔的二部分.GetShortHint是另外一個函數 2.OnIdle: 當應用程序空閑時的事件.通常在這時候作一些不重要的狀態檢測或處理要求不是很嚴格的任務. 3.OnException: 當應用程序發生異常時.你也可以自定義一個異常處理過程而不用缺省的ShowException 4.OnMinimize 應用程序最小化時的事件 5.OnActivate: 應用程序被激活時的事件 6.OnDeactivate 應用程序失去焦點的事件 7.OnMessage 應用程序接收到消息時的事件.如果你想作特定的消息處理.你可以按管這個事件 8.OnRestore 應用程序由最小化狀態恢復時的事件 TApplication應用小技巧: A.打開相對路徑數據文件.通常要打開的數據文件(如程序需要使用的DBF數據文件,TXT/INI文件等)都不是固定路徑,而是相對於應用程序的安裝目錄變化的. AnsiString filepath; filepath=ExtractFilePath(Applcation->ExeName); //ExtractFilePath與ExtractFileDir是有區別的.表現在ExtractFilePath最後總是有"\\",而ExtractFileDir只是在路徑為根目錄時最後才師quot;\\" Table1->DatabaseName=filepath "data"; Table1->TableName="maindb.dbf"; try{ Table1->Active=true; } catch(...) { //...... }另外有一個函數ParamStr(int index)與Application->ExeName有同樣效果.ParaStr(0)就是應用程序命令行第一部分.也就是執行文件的全路徑. B.自定義異常處理窗口 缺省異常處理窗口是用ShowException顯示的一個窗口,其標題為應用程序的Title.我們也可以自定義異常處理函數,以便對異常進行自定義的處理。 void __fastcall TForm1::FormCreate(TObject *Sender) { Application->OnException = HandleException; } void __fastcall TForm1::HandleException(TObject *Sender,SysUtils::Exception *E) { AnsiString errorstr="應用程序發生了錯誤.\n" E->Message; Application->MessageBox(errorstr.c_str(),"發生異常",MB_OK); }C.利用OnIdle事件做一些時效要求不嚴的任務. 我們用Timer定時處理一些事務。但Timer是要佔一定CPU時間的,對應用程序的執行效率有一定影響。如果這個要處理的事務並不十分重要.我們就可以放在OnIdle中處理。讓應用程序在空閑進處理. void __fastcall TForm1::FormCreate(TObject *Sender) { Application->OnIdle = updatestatus; } void __fastcall TForm1::updatestatus(TObject *Sender,bool &Done) { StatusBar1->SimpleText=DateTimeToStr(Now()); }由於C Builder5已經將Application做到了控件選取面板上。這使得我們對Application編程比以前方便了不少。以上的方法對cb5以前的版本是很適用的。如果是C Builder5,我們也不用這麼麻煩地寫代碼了,直接在Application控件的對應事件中寫處理代碼即可. D.在一個長時間的執行代碼之前或之中及時處理其它消息 Form1->Label1->Caption="開始執行指定任務:" jobname[0]; Application->ProcessMessages(); runjob(0);//假設runjob是一個長時間的任務處理函數,在執行中不處理系統消息 時間就是金錢---[ 發問前請先找找舊文章] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |