ÎÒÃÇÔÚWindows98»·¾³ÏÂÖ´Ðп½±´Îļþ¡¢²éÕÒÎļþµÈ¼ÆËã»úºÄʱ½Ï³¤µÄ²Ù×÷ʱ£¬ Windows»áÏÔʾһ¸öС µÄ¶¯»£¬Ö¸Ê¾ÕýÔÚ½øÐеIJÙ×÷£¬ÓëËÀ°åµÄ¾²Ö¹Í¼ÏñÏà±ÈÔöÉ«²»ÉÙ¡£ÄÇôÎÒÃÇ×Ô¼º¿ª·¢Èí¼þʱ£¬ÄÜ·ñÒ²ÏÔʾһ¸öÕâÑùµÄ¶¯»ÌáʾÄØ£¿±ÊÕß¿ª·¢ÁËÒ»¸öÄܹ»ÔÚPBϵ÷ÓõĶ¯»DLL£¬ÓÉÓÚ²ÉÓöàÏ̱߳à³Ì£¬PBµ÷ÓõÄDLLº¯ÊýÄܹ»¼°Ê±½«¿ØÖÆȨ½»»¹¸øPB£¬²»Ó°ÏìÓ¦ÓÃϵͳµÄÔËת¡£
Ò»¡¢´úÂëÓë±àÒëÑ¡Ïî
ÔÚC£«£«BuilderÖд´½¨Ò»¸ö¿Õ°×µÄDLLÏîÄ¿¡£
´´½¨Ò»¸ö¿Õ°×µÄForm£¬ÐÞ¸ÄËüµÄÊôÐÔΪ:
BorderStyle=bsDialog
BorderIcons µÄ ×Ó Êô ÐÔ ¾ù ΪFalse
FormStyle=fsStayOnTop
Position= poScreenCenter
Name=StatusForm
ÔÚFormÉÏÌí¼ÓÒ»¸öWin32ϵÄAnimate¿Ø¼þAnimate1£¬ÐÞ¸ÄËüµÄÊôÐÔΪAlign=alTop
ÔÚFormÉÏÌí¼ÓÒ»¸öStandard ϵÄButton ¿Ø¼þButton_Cancel£¬ÔÙÌí¼ÓSystemϵÄTimer¿Ø¼þTimer1£¬ ÉèÖö¨Ê±Intervalʱ¼äλ250£¬½Ï¿ìÏìÓ¦Óû§µÄÈ¡ÏûÇëÇó¡£
ÒòΪPBÓ¦ÓÃϵͳÓ붯»´°Ìå´úÂë·Ö±ðÊôÓÚÁ½¸öỊ̈߳¬²»ÄܲÉÓÃPBÏß³ÌÖ±½Ó¹Ø±Õ¶¯»´°ÌåÏ̵߳Ĵ°¿Ú£¬ ·ñÔò»áÒýÆðϵͳÔËÐв»Õý³££¬Òò´Ë²ÉÓÃPBÏß³ÌÉèÖùرձêÖ¾£¬¶ø¶¯»Ï̲߳ÉÓÃTimer¿Ø¼þ¶¨Ê±¼ì²é±ê Ö¾£¬Ò»µ©¼ì²âµ½¹Ø±Õ±êÖ¾£¬¾Í¹Ø±Õ´°¿Ú£¬Çå³ýÏ̱߳êÖ¾£¬½áÊø¶¯»Ï̡߳£
ÏÂÃæ¸ø³ö±àÂë¼°±àÂëÔÀí£º
(1)DLLÖ÷Ìå´úÂ룺
/ £ªDLL Ö÷ Ìå ´ú Âë
¡¡ £ª ¶¨ ÒåDLL ¹« Óà ±ä Á¿
£ªg_CommonAVI ¶ÔAnimate ¿Ø ¼þ
¶¯ » Àà ÐÍ Ë÷ Òý
¡¡£ªgi_Canceled Button_Cancel
°´ Å¥ ÊÇ ·ñ ±» Ñ¡ Ôñ ¹ý
¡¡£ªgi_AVIType Òª ÏÔ Ê¾ µÄ ¶¯ » Àà ÐÍ£¬
ÓÉDLL Êä ³ö º¯ Êý ×ö Ϊ ²Î Êý Êä Èë
¡¡£ªgi_RequestClose Çë Çó ¶¯ » Ïß ³Ì ¹Ø ±Õ ±ê Ö¾
¡¡£ªgi_WindowActive ¶¯ » ´° ¿Ú Ëù ´¦ µÄ ×´ ̬
¡¡£ªlpsWinTitle ¶¯ » ´° Ìå µÄ ±ê Ì⣬
ÓÉDLL Êä ³ö º¯ Êý ×ö Ϊ ²Î Êý Êä Èë
¡¡£ª/
¡¡ ¡¡TCommonAVI g_CommonAVI[]={
¡¡ ¡¡ aviNone, aviFindFolder,
¡¡ ¡¡ aviFindFile, aviFindComputer,
¡¡ ¡¡aviCopyFiles, aviCopyFile,
¡¡ ¡¡ aviRecycleFile, aviEmptyRecycle,
¡¡ ¡¡aviDeleteFile
¡¡ ¡¡};
¡¡ ¡¡int gi_Canceled=0,gi_AVIType=0;
¡¡ ¡¡int gi_RequestClose=0,gi_WindowActive=0;
¡¡ ¡¡char lpsWinTitle[256];
¡¡ ¡¡HWND hWndParent=NULL;
¡¡ ¡¡/ £ª ¶¨ ÒåDLL Êä ³ö º¯ Êý £ª/
¡¡ ¡¡extern ¡°C" __declspec(dllexport) int pascal Dll
? EntryPoint(HINSTANCE hinst, unsigned
long reason, void £ª);
¡¡ ¡¡extern ¡°C" __declspec(dllexport) int pascal
ShowStatus Window
(int AVIType,LPSTR WinTitle,long hWnd);
extern ¡°C" __declspec(dllexport)
int pascal GetStatus(int ai_CloseWin);
extern ¡°C" __declspec(dllexport)
int pascal CloseStatusWindow();
¡¡ ¡¡ / £ª ¶¨ Òå Ïß ³ÌTformThread: £ª/
¡¡ ¡¡class TFormThread : public TThread{
¡¡ ¡¡public: // User declarations
¡¡ ¡¡__fastcall TFormThread(bool CreateSuspended);
¡¡ ¡¡void __fastcall Execute(void);
¡¡ ¡¡};
¡¡ ¡¡__fastcall TFormThread::
TFormThread(bool CreateSuspended):
TThread(CreateSuspended){
¡¡ ¡¡}
/ £ª ¶¯ » Ïß ³Ì Ö´ ÐÐ ´ú Â룬
¶¯ » ´° Ìå µÄ ¶¨ ʱ Æ÷ ¿Ø ¼þ »á ¹Ø ±Õ Ëü£¬
Çå ³ý ´° Ìå ´æ ÔÚ ±ê Ö¾ ºó ½á Êø Ïß ³Ì µÄ ÔË ÐÐ
£ª/
¡¡ ¡¡void __fastcall TFormThread::Execute(void){
¡¡ ¡¡gi_WindowActive=1;
¡¡ ¡¡ StatusForm=new TStatusForm(NULL);
¡¡ ¡¡ StatusForm £>Caption=lpsWinTitle;
¡¡ ¡¡ StatusForm £>ShowModal();
¡¡ ¡¡ gi_WindowActive=0;
¡¡ ¡¡ delete StatusForm;
¡¡ ¡¡ gi_RequestClose=0;
¡¡ ¡¡}
¡¡ ¡¡/ £ª ¶¨ Òå Ò» ¸ö Ïß ³Ì ʵ Àý Ö¸ Õë £ª/
¡¡ ¡¡TFormThread £ªFormThread;
¡¡ ¡¡ / £ª Êä ³ö º¯ Êý ´ú Âë ʵ ÏÖ ²¿ ·Ö
¡¡ ¡¡ £ª DllEntryPoint 32 λDLL Èë ¿Ú
¡¡ ¡¡ £ª ShowStatusWindow ÏÔ Ê¾ ¶¯ » ´° ¿Ú£¬
Ëü ͨ ¹ý ´´ ½¨ Ò» ¸ö Ïß ³Ì À´ ´´ ½¨ ´° ¿Ú£¬
±Ü Ãâ ÓÉ ÓÚ ´° ¿Ú µÄMODAL Êô ÐÔ ¶ø ʹ
¿Ø ÖÆ È¨ ²» ÄÜ ¼° ʱ µÄ ·µ »¹ ¸ø µ÷ Óà Õß
¡¡ ¡¡ £ª GetStatus È¡ µÃ¡° È¡ Ïû¡± ×´ ̬£¬
¼´ Óà »§ ÓРû ÓÐ Ñ¡ Ôñ¡° È¡ Ïû¡± °´ Å¥
¡¡ ¡¡ £ª CloseStatusWindow ¹Ø ±Õ ¶¯ » ´° ¿Ú£¬
¡¡ ¡¡ £ª/
¡¡ ¡¡__declspec(dllexport) int WINAPI DllEntryPoint
(HINSTANCE hinst, unsigned long reason, void £ª)
¡¡ ¡¡{
¡¡ ¡¡return 1;
¡¡ ¡¡}
¡¡__declspec(dllexport) int pascal ShowStatusWindow
(int AVIType,LPSTR WinTitle,long hWnd){
¡¡hWndParent=(HWND)hWnd;
memset(lpsWinTitle,0,sizeof(lpsWinTitle));
¡¡strncpy(lpsWinTitle,WinTitle,sizeof(lpsWin Title) £1);
if (AVIType>0 £¦ £¦ AVIType<=8) gi_AVIType="AVIType;" ¡¡ ¡¡
FormThread="new" TFormThread(true); ¡¡ ¡¡ ¡¡
FormThread £>Priority = tpNormal;
¡¡ ¡¡ FormThread £>Resume();
¡¡ ¡¡}
¡¡__declspec(dllexport) int pascal GetStatus
(int ai_CloseWin){
¡¡ ¡¡if (gi_Canceled)
¡¡ ¡¡if (gi_WindowActive){
¡¡ ¡¡gi_RequestClose=1;
¡¡ ¡¡ while(gi_RequestClose);
¡¡ ¡¡ }
¡¡ ¡¡ return gi_Canceled;
¡¡ ¡¡}
¡¡ ¡¡__declspec(dllexport) int pascal CloseStatusWindow(){
¡¡ ¡¡ if (gi_WindowActive){
¡¡ ¡¡gi_RequestClose=1;
¡¡ ¡¡ while(gi_RequestClose);
¡¡ ¡¡}
¡¡ ¡¡ return gi_Canceled;
¡¡ ¡¡}
(2)´°ÌåStatusForm µÄ´úÂ룺
¡¡ ¡¡TStatusForm £ªStatusForm;
¡¡ ¡¡extern int gi_Canceled;
¡¡ ¡¡extern int gi_AVIType;
¡¡ ¡¡extern TCommonAVI g_CommonAVI[];
¡¡ ¡¡__fastcall TStatusForm::TStatusForm
(HWND ParentWindow)
¡¡ ¡¡ : TForm(ParentWindow)
¡¡ ¡¡{
¡¡ ¡¡ gi_Canceled=0;
¡¡ ¡¡}
¡¡ ¡¡// È¡ Ïû °´ Å¥ ²¢ ²» Ö± ½Ó ¹Ø ±Õ ´° Ì壬
¶ø Ö¸ ʾ Éè Öà ȡ Ïû ±ê Ö¾£¬ ¹© µ÷ Óà Õß ²é ¿´
¡¡ ¡¡void __fastcall TStatusForm::Button_CancelClick
(TObject £ªSender)
¡¡ ¡¡{
¡¡ ¡¡gi_Canceled=1;
¡¡ ¡¡// ModalResult=mrCancel;
¡¡ ¡¡}
¡¡ ¡¡ ¡¡// ¼¤ »î ¶¯ »£¬ ÔÚFORMCREATE Ê ¼þ ÖÐ
¡¡ ¡¡void __fastcall TStatusForm::FormCreate
(TObject £ªSender)
¡¡ ¡¡{
¡¡ ¡¡ Animate1 £>CommonAVI=g_CommonAVI[gi_AVI
Type];
¡¡ ¡¡ Animate1 £>Active = true;
¡¡ ¡¡}
¡¡
¡¡extern int gi_RequestClose;
¡¡// ¶¨ ʱ Æ÷ Ê ¼þ ¼ì ²â µ½ ½á Êø ±ê Ö¾ ¹Ø ±Õ ´° Ìå
¡¡void __fastcall TStatusForm::Timer1Timer
(TObject £ªSender)
¡¡ ¡¡{
¡¡ ¡¡ if (gi_RequestClose){
¡¡ ¡¡ ModalResult=mrOk;
¡¡ ¡¡ }
¡¡ ¡¡}
ÉèÖñàÒëÑ¡Ï´ò¿ªProject Options ¶Ô»°¿ò£¬Çå³ýLinkerÊôÐÔÒ³ÖеÄUse Dynamic RTL±êÖ¾£¬Çå³ýPackagesÊôÐÔÒ³ÖеÄBuild with runtime packages¡£ ÕâÑùÖ»Òªµ¥¸öDLL¾Í¿ÉÒÔÔËÐÐÁË£¬¶ø²»±Ø°²×° һЩ¶¯Ì¬Á¬½ÓÔËÐÐʱ¼ä¿â¡£
¶þ¡¢Ê¹Óö¯»DLL
1.¶¨Ò壺
¡¡ ¡¡//Declare £> Global External Functions
¡¡ ¡¡FUNCTION Long ShowStatusWindow
(Long AVIType,String WinTitle,long hWnd)
£¦LIBRARY ¡°STATWIN.DLL" ALIAS FOR
¡°Show StatusWindow"
¡¡ ¡¡FUNCTION Long GetCancelStatus
(Long CloseWindow) £¦LIBRARY
¡°STATWIN.DLL" ALIAS FOR ¡°GetStatus"
¡¡ ¡¡FUNCTION Long CloseStatusWindow() £¦
¡¡LIBRARY ¡°STATWIN.DLL" ALIAS FOR
¡°CloseStatusWindow"
2.µ÷Óãº
¡¡ ¡¡long ll_EndTime
¡¡ ¡¡// ÏÔ Ê¾ ²é ÕÒ ÎÄ ¼þ ¼Ð ¶¯ »
¡¡ ¡¡ShowStatusWindow(2)
¡¡ ¡¡setpointer(HourGlass!)
¡¡ ¡¡ll_EndTime = Cpu() £« 10 £ª 1000
¡¡ ¡¡DO
¡¡ ¡¡ if GetCancelStatus(0)=1 then
¡¡ ¡¡ exit
¡¡ ¡¡end if
¡¡ ¡¡ // ×ö Ïë ×ö µÄ Ê Çé
¡¡ ¡¡LOOP UNTIL cpu() > ll_EndTime
¡¡ ¡¡CloseStatusWindow()