全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2544
推到 Plurk!
推到 Facebook!

請問如何添加Button「按鈕按下」和「按鈕彈起」事件

答題得分者是:m8815010
Terry6666
一般會員


發表:32
回覆:19
積分:10
註冊:2002-12-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-16 08:40:55 IP:61.218.xxx.xxx 未訂閱
求助] 請問如何添加Button「按鈕按下」和「按鈕彈起」事件! 我想添加「按鈕按下」和「按鈕彈起」事件,就是當按鈕按下是執行一段命令,但按鈕彈起時再執行另一段命令,請問要如何添加這兩個事件,或者說是函數?按下後就不會自動彈起來..,要等在按一次才會彈起來....謝謝...
soya
一般會員


發表:2
回覆:3
積分:1
註冊:2002-10-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-16 14:46:55 IP:211.72.xxx.xxx 未訂閱
Terry6666您好~ Button好像不行,用SpeedButton吧... 把AllowAllUp設為true 把GroupIndex群組設為大於0 就可以控制SpeedButton的Down...達到您說的效果 至於程式寫在OnClick...去判斷SpeedButton是否Down 當然Mouse事件也行啦...
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-16 15:14:46 IP:61.63.xxx.xxx 未訂閱
引言: 求助] 請問如何添加Button「按鈕按下」和「按鈕彈起」事件! 我想添加「按鈕按下」和「按鈕彈起」事件,就是當按鈕按下是執行一段命令,但按鈕彈起時再執行另一段命令,請問要如何添加這兩個事件,或者說是函數?按下後就不會自動彈起來..,要等在按一次才會彈起來....謝謝...
Terry6666你好: 記得 >。 不過有這樣一個功能的 >! 反正如果要自已處理的話就是如你所說的要把兩個事件拆開就對了< >! class="code"> In Unit1.h ~~ class TForm1 : public TForm { __published: // IDE-managed Components TButton *Button1; TMemo *Memo1; private: // User declarations TWndMethod OldButtonWndProc; //add this line void __fastcall ButtonWndProc(TMessage&); //add this line public: // User declarations __fastcall TForm1(TComponent* Owner); }; ~~

In Unit1.cpp
~~
TForm1 *Form1;    bool If_Pressed=false;    //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 OldButtonWndProc=Button1->WindowProc;
 Button1->WindowProc=ButtonWndProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonWndProc(TMessage& Message)
{
 if (Message.Msg==BM_SETSTATE) {
     if (!If_Pressed) {
         if (SendMessage(Button1->Handle,BM_GETSTATE,0,0)==104) {
             OldButtonWndProc(Message);
             If_Pressed=true;
             Button1->Caption="按下";                 //這裡可以寫按下要做的事,例:
             Memo1->Lines->Add("我被按下了");                 return;
         }             if (SendMessage(Button1->Handle,BM_GETSTATE,0,0)==108) {
             Message.WParam=0;
             OldButtonWndProc(Message);
             //If_Pressed=true;
             Button1->Caption="彈起";                 //這裡可以寫彈起要做的事,例:
             Memo1->Lines->Add("我被彈起了");                 return;
         }
     }
     else {
         If_Pressed=false;
         return;
     }         return;
 }     OldButtonWndProc(Message);
}    ~~
反正就是WM_LBUTTONUP、WM_LBUTTONDOWN、BM_SETSTATE等等等這幾個click的事件把它分開就是! < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=17661351&CC=394989"> Conclusion: 我的sample並不完善enough: 1.按下button後,如果不放掉再繼續移動的話,事件會持續觸發。所以這裏需要擋掉! 2.目前我沒有擋掉,因為我沒辦法一下寫好,需一些時間,所以放棄^^!Terry6666兄視需要自行改良之! 3.整個sample可能並不effective and wise enough,但是我目前想到可行的! 應該是有現成的元件可利用啦,但目前如果還找不到的話,就參著參著上述拙招了!
Terry6666
一般會員


發表:32
回覆:19
積分:10
註冊:2002-12-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-16 17:19:12 IP:61.218.xxx.xxx 未訂閱
m8815010你好: 又再次麻煩你啦...,謝謝
系統時間:2024-11-22 16:43:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!