国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用CB制作具有HTML風格的動態按鈕

2019-11-17 05:24:30
字體:
來源:轉載
供稿:網友

  在瀏覽網頁時,各種各樣制作精美的動態按鈕經常令人驚羨不已。這種按鈕平常默默無聞,當鼠標經過時,立即一躍而出,在鼠標變為手形的同時,圖形也變得更加亮麗,有的還發出特有聲音,將你的注重力瞬間抓了過去;而當鼠標移開之后,一切又恢復原樣,以免分散你對新焦點的注重。假如我們能用C++ Builder實現這種效果,那么一定會給所開發的應用程序增色不少。
   在C++Builder中,適合制作動態按鈕的構件是SpeedButton。雖然SpeedButton可以通過1個16×64像素的位圖來顯示按鈕處在抬起、禁止、按下與保持按下的不同狀態,但要實現Html風格的按鈕,還得要通過編程來實現。
   選擇1副所鐘意的位圖取名為start.bmp。用圖形制作軟件(如photoshop)將其轉換為黑白圖形存為start1.bmp。這2個位圖分別是按鈕在鼠標經過時及平時顯示的圖形。同時還選取1個聲音文件(不要太長),假設其名為crush.wav。
   打開純文本編輯軟件(如notepad),輸入以下內容:
   crush WAV crush.wav
   start BITMAP start.bmp
   start1 BITMAP start1.bmp
   保存為資源文件mysrc.rc。
   啟動Builder,打開新工程,將資源文件mysrc.rc添加進項目中。你也可以通過BIN目錄下的brcc32.exe將RC文件編繹為RES文件,然后用 #PRogram resource "*.res" 語句將其聯編進項目中。本文采用更簡單的前一種方法。
   在當前窗體上加入新的SpeedButton,取名為StartSpeedButton。屬性按下表設置:
   Caption 空
   Cursor crHandPoint
   Flat true
   Hint 單擊以…..
   Glyph None
   Showhint true
   注重:在設計階段,按鈕的Glyph屬性最好不要先行指定為start1.bmp。
   打開所對應的頭文件,在其中的private項中增加
   Graphics::TBitmap *start,*start1;//定義位圖
   Char *chWavHandle;//定義聲音句柄
   在主表單的CPP文件的表單創鍵事件(onCreate)所對應的函數中先初始化位圖,
   start=new Graphics::TBitmap();
   start1=new Graphics::TBitmap();
   初始化后再載入位圖
   start->Handle=LoadBitmap(Hinstance, "start");//從內存中載入位圖
   start1->Handle=LoadBitmap(Hinstance, "start1");
   載入聲音文件
   HRSRC temp=FindResource(Hinstance,"crush", "WAV");//從內存中載入聲音
   HGLOBAL h=LoadResource(Hinstance,temp);
   ChWavHandle=(char *)LockResource(h);
   先在浮動按鈕上顯示普通的黑白圖形
   StartSpeedButton->Glyph->Assign(start1);
   在初始工作完成后,好的習慣應及時釋放所占用的資源。在主表單的OnDestroy事件所對應的函數中加入
   delete chWavHandle;
   delete start1,start;
   至此,第一步已經結束,試著運行一下,鼠標外形變化、按鈕突起及動態提示已經有了,最后再讓我們來完成圖形變化及聲音提示。
   在做這部分工作之前,可回想一下瀏覽網頁的情況。我們的動態按鈕的響應步驟應該是:鼠標移入按鈕時,圖形由黑白變為彩色,同時發出聲響(以后稱之為點亮按鈕);移出時圖形再變回黑白,但此時不發出聲響。因此應讓程序知道什么時候鼠標正好移入、什么時候正好移出。
   在頭文件的private項中增加狀態變量
   bool blStart;
   在主表單文件的OnCreate中為其設置初始值
   blStart=true;//在TRUE狀態下,一旦發生OnMouseMove事件就可以點亮按鈕
   選中SpeedButton按鈕,在其OnMouseMove事件所對應的函數StartSpeedButtonMouseMove()中增加
   if(blStart)//可以點亮按鈕
   {
   StartSpeedButton->Glyph->Assign(start);//變為彩圖
   // 通過chWavHandle句柄調用內存中聲音文件
   SndPlaySound(chWavHandle,SND_MEMORYSND_SYNC);
   blStart=false;// 再發生OnMouseMove事件不可以點亮按鈕
   }
   當然,還必須在鼠標離開按鈕時再將圖形恢復為黑白。如何才能知道鼠標離開呢?比較原始的辦法自然是用鼠標的坐標位置來判定,但這樣很費力。一個巧妙的招數是用包含(在位置上)此按鈕的其它部件的OnMouseMove事件來判定(注重:選用的外圍部件相對于此按鈕來說需有足夠的縱深,否則,一旦鼠標移動太快,有可能會漏過OnMouseMove事件而發生紊亂。確決的辦法是,再加上更外圍的部件的OnMouseMove事件來雙保險)。
   以按鈕的外圍部件是主表單MainForm為例,在其OnMouseMove事件所對應的函數MainFormMouseMove()中加入
   if(!blStart)//鼠標正好由按鈕內移出
   StartSpeedButton->Glyph->Assign(start1);// 圖形恢復黑白
   blStart=true;//為鼠標重新進入按鈕作預備
   最后在主表單CPP文件前部加入為SndPlaySound提供聲明的頭文件
   #include
   編繹運行,哈哈,一切正如所想的,我的按鈕也具備了HTML風格,你還不趕緊行動。
   注:以上程序在 Builder 4.0/win98環境下運行通過。這里所說的主表單也可以是包含動態按鈕的表單。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高密市| 遵化市| 金门县| 刚察县| 城口县| 任丘市| 广德县| 来凤县| 涪陵区| 工布江达县| 莲花县| 满城县| 荃湾区| 彝良县| 原阳县| 历史| 东至县| 合江县| 拉孜县| 洛浦县| 绍兴县| 札达县| 廉江市| 八宿县| 工布江达县| 平山县| 乐清市| 铜鼓县| 武功县| 永胜县| 慈溪市| 蓝田县| 舞钢市| 嫩江县| 灵石县| 当涂县| 蓬莱市| 忻城县| 大埔县| 乡宁县| 南充市|