線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1897
推到 Plurk!
推到 Facebook!

如何在按下Button時,改變滑鼠所OnClick的Label之顏色?

尚未結案
kj68215
初階會員


發表:47
回覆:91
積分:27
註冊:2003-08-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-17 22:35:55 IP:218.168.xxx.xxx 未訂閱
(1)用for迴圈+陣列的方式產生了,3~10不等的Label. (2)產生的TLabel,用參數傳遞的方式呼叫OnClock事件. ex:
TLabel *LB[61];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
for(i=1;i<61;i  )
  {
  LB[i] = new TLabel(this);
  LB[i]->Parent = Form1;
  LB[i]->Color = clYellow;  //預設顏色為Yellow
  LB[i]->OnClick = &MyClick; // 參數傳遞MyClick     /*以下Width、Height等屬性忽略*/
   :
   :
   :
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MyClick(TObject *Sender)
{
    TLabel *LB=new TLabel(this);
    LB=((TLabel*)Sender);        if(LB->Color==clRed)
      {
       LB->Color=clYellow;
      }
    else
      {
       LB->Color=clRed;
      }
  }
}
//---------------------------------------------------------------------------
這是LB用滑鼠OnClick時會改變顏色狀態. 但是小弟想改成用按下Button來改變滑鼠所指定(OnClick) 請問這該怎麼寫呢? 還是說忘記設定什麼屬性嗎? 小弟最近腦筋一直常打結,試了很久事不出來! 希望大大們能幫小弟一個忙, > ----------------------- 請多多指教啦!!^^
------
-----------------------
請多多指教啦!!^^
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-18 00:34:06 IP:163.29.xxx.xxx 未訂閱
kj68215您好: (1)依你之意MyClick只是要指到選中的是何種類別,然後再判斷/設定其顏色值,可是你卻創建一個新的TLabel(new TLabel(this)),這沒必要吧!建議你把程式修改如下,較合乎原意
   TLabel *scr = dynamic_cast(Sender);
   if (scr == NULL) { return ; }
   scr->Color = (scr->Color == clRed) ? clYellow : clRed;
(2)用按下Button來改變滑鼠所指定(OnClick)我不明白這句話的原意為何?能否再描清楚一點 天長地久有時盡,追求知識無絕期!
kj68215
初階會員


發表:47
回覆:91
積分:27
註冊:2003-08-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-18 03:18:42 IP:61.219.xxx.xxx 未訂閱
g6101您好: 小弟貼錯程式碼,真是抱歉,我之後也是寫成跟你一樣的.
TLabel *scr = dynamic_cast(Sender);
這樣才是比較正確的沒錯. 另外,你這樣的寫法真特別,第一次看到還有問號的出現,真是"大開眼界",學到了!thx. 至於您說的不明白,可能是小弟表達的不清楚,"拍 > 用圖片看好了(這樣應該會比較清楚)↓ < src="http://delphi.ktop.com.tw/download/upload\44073_Coffee_SetMap.jpg"> 這是之前小弟發表的網咖介面金剛組合版for BCB http://delphi.ktop.com.tw/topic.php?topic_id=44074 裡面的Label都是用滑鼠左鍵去點擊各個Label,進而改變Label的顏色. 但是小弟想改成用按下Button來改變來達到相同的功能,而不是用滑鼠去點擊. 請問g6101兄,是否有什麼方法呢? 另外,小弟還想到,如圖中的PC4、PC28、PC42由黃色變為紅色後,則無法在做任何顏色之變更(其餘都可以,只有紅色的不行),直到按下Load按鈕,才能回復到原先的黃色狀態! 如此做法會比較困難點嗎? > 發表人 -
------
-----------------------
請多多指教啦!!^^
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-18 07:56:42 IP:61.226.xxx.xxx 未訂閱
kj68215您好: (1)按你之意,想把TLabel元件換成TButton元件,是否只是想要有那種立體感覺(猜想),如果是話只要把TLabel元件換成TPanel元件就行了,要有按下去的感覺只要在BevelOuter欄位上動手腳就行了. (2)如果非得要用TButton元件的話,因它無Color屬性(欄位),必需加工處理,請搜尋本站,應不難找到方法. (3)由黃色變為紅色後,則無法在做任何顏色之變更,請在變更顏色之後再加上這行指令(scr->Refresh();)試試看. 天長地久有時盡,追求知識無絕期! 發表人 - g6101 於 2004/04/18 07:58:31 發表人 - g6101 於 2004/04/18 08:00:13
kj68215
初階會員


發表:47
回覆:91
積分:27
註冊:2003-08-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-18 22:37:24 IP:61.219.xxx.xxx 未訂閱
g6101您好: 其實小弟的意思不是把TLabel元件換成TButton元件. 而是"滑鼠點擊Label的動作,變成用Button去完成". 重點是在兩個功能是完全相同,只是做法不同! 比如說... (a)先在PC1的Label用滑鼠點擊一下(此時顏色是維持原來的黃色). (b)在按下Button,則改變了PC1的Label的顏色(由黃色變為紅色). 這跟滑鼠直接去點擊進而改變Label的顏色,功能是完全相同的!< > 所以小弟才不知道該怎麼去做?!挺煩惱< > 若還是有些不清楚小弟的意思的話,這有一個完整的軟體↓ 《SMART網咖管理系統》 http://toget.pchome.com.tw/intro/business_suite/12578.html 在Server主控台裡,有一個故障設定,小弟就是想要做出那種相似的功能! 另外,scr->Refresh();小弟之前沒用過,學到了! thx. 發表人 -
------
-----------------------
請多多指教啦!!^^
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-19 00:08:31 IP:163.29.xxx.xxx 未訂閱
引言: g6101您好: 其實小弟的意思不是把TLabel元件換成TButton元件. 而是"滑鼠點擊Label的動作,變成用Button去完成". 重點是在兩個功能是完全相同,只是做法不同! 比如說... (a)先在PC1的Label用滑鼠點擊一下(此時顏色是維持原來的黃色). (b)在按下Button,則改變了PC1的Label的顏色(由黃色變為紅色). 這跟滑鼠直接去點擊進而改變Label的顏色,功能是完全相同的!< > 所以小弟才不知道該怎麼去做?!挺煩惱< > 若還是有些不清楚小弟的意思的話,這有一個完整的軟體↓ 《SMART網咖管理系統》 http://toget.pchome.com.tw/intro/business_suite/12578.html 在Server主控台裡,有一個故障設定,小弟就是想要做出那種相似的功能! 另外,scr->Refresh();小弟之前沒用過,學到了! thx. 發表人 - >< face="Verdana, Arial, Helvetica"> 再參考以下的程式碼
TLabel *scr = NULL;  //<-提升為全域指標    //===========MyClick 內容=======================
   scr = dynamic_cast(Sender);
   if (scr == NULL) { return ; }
   scr->Color = (scr->Color == clRed) ? clYellow : clRed;
   scr->Refresh();    //===========Button1Click 內容==================
  if (scr == NULL) { return ; }
   scr->Color = (scr->Color == clRed) ? clYellow : clRed;
   scr->Refresh();    
天長地久有時盡,追求知識無絕期!
kj68215
初階會員


發表:47
回覆:91
積分:27
註冊:2003-08-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-19 16:59:22 IP:61.219.xxx.xxx 未訂閱
太感謝了,g6101兄! 沒有你的code,小弟實在沒靈感... 小弟依你的 class="code"> const TColor ColorOff = clYellow; const TColor ColorOn = clSkyBlue; const TColor ColorConkout = clRed; TLabel *scr = NULL; //--------------------------------------------------------------------------- void __fastcall TForm1::MyClick(TObject *Sender) { scr = dynamic_cast(Sender); if (scr == NULL) { return ; } if (scr->Color == ColorConkout) { scr->Refresh(); Edit1->Text = scr->Caption; Edit2->Text = "故障中"; } else { Edit1->Text = scr->Caption; Edit2->Text = ""; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if(scr->Color == ColorOn) { scr->Refresh(); } scr->Color = (scr->Color == clRed) ? clYellow : clRed; scr->Refresh(); Edit1->Text = scr->Caption; Edit2->Text = "故障中"; if(scr->Color == ColorOff) {Edit2->Text = ""; } scr->OnClick = &MyClick; } //--------------------------------------------------------------------------- 這裡有完整的Demo,有請g6101兄下載看看,這Demo就是小弟最想要的結果! ↓ http://delphi.ktop.com.tw/topic.php?TOPIC_ID=48561 另外,這個demo是用靜態連結去compile的,所以檔案大了一點. 沒有安裝BCB的朋友也可以直接使用(開啟執行檔)唷! ----------------------- 請多多指教啦!!^^ 發表人 -
------
-----------------------
請多多指教啦!!^^
系統時間:2024-05-15 3:51:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!