delphi實現窗體閃爍功能

2022-02-02 14:34:30 字數 1386 閱讀 7896

以前做視窗閃動時都沒有考慮到讓工作列上的按鈕閃動的問題,

現在乙個客戶需要工作列按鈕閃動,發現以前使用的flashwindow不能達到要求了,

查詢了一下,找到flashwindowex這個api

如果您建立的應用程式是執行在windows 98或更高版本作業系統上,您可以通過呼叫api函式flashwindowex並賦給它乙個flashwinfo結構體來實現. 而如果是執行在windows 95上則比較麻煩, 但您也可以通過使用乙個timer元件來實現想要的效果。

flashwindowex

當您呼叫api函式flashwindowex時,乙個tflashwinfo被用來控制windows實現該閃爍功能的資訊. 幸運的是,delphi已經為您封裝了該結構體。delphi中它被申明如下:

type     tflashwinfo = record       cbsize : longint;       hwnd : longint;       dwflags : longint;       ucount : longint;       dwtimeout : longint;    end;
您所需做的全部事情僅僅是填充和組裝該記錄型別,並呼叫api函式。本例中,我把兩者放在了乙個按鈕的onclick事件中,當然您也可以放置它們到任何合適的地方:

dwflags指示了閃爍的方式,下面是dwflags屬性的取值定義:

flashw_stop = 0      // 停止閃爍  flashw_caption = 1   // 閃爍視窗標題  flashw_tray = 2      // 閃爍工作列按鈕  flashw_all = 3       // 閃爍視窗標題與工作列按鈕

flashw_timer = 4 // 不停地閃爍,直到flashw_stop標誌設定 flashw_timernofg = 5 // 不停地閃爍直到視窗被前置

以上只有在windows 98或更高版本作業系統上才有效,如果您要在windows 95上實現,您就需要採取另一不同的途徑:

flashwindow

windows 95下 (並且delphi 3及更底版本幷包含適用的api封裝) 需要不同的途徑. 該作業系統下沒有flashwindowex這個api函式,您需要使用flashwindow來代替. (flashwindow還能在更低版本的作業系統中被呼叫。)

但問題是flashwindow只能閃爍一次,所以要達到閃爍按鈕的目的就需要用到乙個timer元件。 當然,這樣一來也就加大了寶貴的系統資源開銷 - 但它能完成我們想要的效果。

procedure tform1.button1click(sender: tobject);  begin     timer1.enabled := not timer1.enabled;  end;
到此為止,兩種不同方法實現了相同的功能。

閃爍動畫窗體

利用兩個timer控制項,實現窗體中的閃爍的效果 實現步驟 一 窗體中新增兩個timer控制項,分別設定事件頻率 二 在窗體中新增picturebox控制項,新增 骷髏頭效果更好哦,哈哈 二 在timer1下編寫 code 將隱藏 this.picturebox1.visible false 關閉當...

delphi窗體設計

可以通過設定窗體的屬性以及程式設計的方法,限制和控制窗體的變化。如讓窗體不能最小化 最大化.1.通過屬性設定方法 使用form的bordericon屬性,我們可設定窗體是否具有系統選單 bisystemmenu 最小化按鈕 biminimize 最大化按鈕 bimaximize 和幫助按鈕 bihe...

delphi窗體設計

可以通過設定窗體的屬性以及程式設計的方法,限制和控制窗體的變化。如讓窗體不能最小化 最大化.1.通過屬性設定方法 使用form的bordericon屬性,我們可設定窗體是否具有系統選單 bisystemmenu 最小化按鈕 biminimize 最大化按鈕 bimaximize 和幫助按鈕 bihe...