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

ComboBox的變化問題

尚未結案
qqmax
一般會員


發表:17
回覆:26
積分:8
註冊:2004-11-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-29 22:23:54 IP:211.76.xxx.xxx 未訂閱
請問要如何才能讓ComboBox的下拉選單能夠是以圖形顯示 假如我想要拉下之後選擇我想要的PenStyle:虛線,直線,之類的而那些是以圖示 表現不是文字 我該怎麼達到這個效果呢還是COMBOBOX達不到需要用到別的元件???
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-29 23:26:13 IP:61.62.xxx.xxx 未訂閱
參考一下這一篇: http://www.delphi-central.com/combo.aspx
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-29 23:55:53 IP:61.62.xxx.xxx 未訂閱
大致上就是要自己畫,我弄了一個範例程式給您參考:    Example:    請拉一個 TComboBox、TImage 在畫面上,名稱為 ComboBox1 及 Image1,將 ComboBox1 的 Style 屬性設為 csOwnerDrawFixed, 並且在執行檔目錄下放 1.bmp、2.bmp、3.bmp、4.bmp、5.bmp (請自行挑選圖片)
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
  /* 放五個空白選項 */
  ComboBox1->Items->Add("");
  ComboBox1->Items->Add("");
  ComboBox1->Items->Add("");
  ComboBox1->Items->Add("");
  ComboBox1->Items->Add("");
}    void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index,
      TRect &Rect, TOwnerDrawState State)
{
  Image1->Picture->LoadFromFile(IntToStr(Index + 1) + ".bmp");
  /* 自己畫選項 */
  ComboBox1->Canvas->StretchDraw(Rect, Image1->Picture->Bitmap);
  ComboBox1->Canvas->FrameRect(Rect);
}
P.S 程式中的 + 是全型的,請置換成半型,因為我打半型的加號顯示不出來.. 發表人 -
qqmax
一般會員


發表:17
回覆:26
積分:8
註冊:2004-11-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-30 18:09:08 IP:211.76.xxx.xxx 未訂閱
謝謝您的指點 我已可以用了但是我想要在程式出使的時候給予圖形作為初值 該怎麼寫呢 我這樣一開始會是空白的耶>"< 請再給予我一些指點吧
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-30 18:11:33 IP:203.70.xxx.xxx 未訂閱
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
  /* 放五個空白選項 */
  ComboBox1->Items->Add("");
  ComboBox1->Items->Add("");
  ComboBox1->Items->Add("");
  ComboBox1->Items->Add("");
  ComboBox1->Items->Add("");
  ComboBox1->ItemIndex = 0;
}
發表人 - allenchan 於 2004/11/30 18:14:49
qqmax
一般會員


發表:17
回覆:26
積分:8
註冊:2004-11-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-01 01:46:48 IP:211.76.xxx.xxx 未訂閱
引言:
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
  /* 放五個空白選項 */
  ComboBox1->Items->Add("");
  ComboBox1->Items->Add("");
  ComboBox1->Items->Add("");
  ComboBox1->Items->Add("");
  ComboBox1->Items->Add("");
  ComboBox1->ItemIndex = 0;
}
對了我把我的執行檔給別人用時卻產生Load不到圖片的問題難道我連圖也要一病給別人嗎?? 有別的方法解決嗎??? 發表人 - allenchan 於 2004/11/30 18:14:49
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-01 04:58:48 IP:203.204.xxx.xxx 未訂閱
引言: ... 對了我把我的執行檔給別人用時卻產生Load不到圖片的問題難道我連圖也要一病給別人嗎?? 有別的方法解決嗎??? 發表人 - allenchan 於 2004/11/30 18:14:49
Project->Options->Linker->Use dynamic RTL 取消掉 Project->Options->Package->Build with runtime package 取消掉 試看看~~ 發表人 - rogan321 於 2004/12/01 05:26:10
qqmax
一般會員


發表:17
回覆:26
積分:8
註冊:2004-11-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-01 05:58:02 IP:211.76.xxx.xxx 未訂閱
引言:
引言: ... 對了我把我的執行檔給別人用時卻產生Load不到圖片的問題難道我連圖也要一病給別人嗎?? 有別的方法解決嗎??? 發表人 - allenchan 於 2004/11/30 18:14:49
Project->Options->Linker->Use dynamic RTL 取消掉 Project->Options->Package->Build with runtime package 取消掉 試看看~~ 發表人 - rogan321 於 2004/12/01 05:26:10
不知道是什麼原因還是有問題耶還是讀不到檔案的錯誤 抱歉可否再給予指點
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-01 08:45:37 IP:61.62.xxx.xxx 未訂閱
您好,我給您的範例是要讀取外部的圖片沒有錯呀,您的那五張圖片必須放在執行檔的目錄下一併發佈,這只是範例喔,主要目的在於示範如何 ComboBox 的選項。
void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index,
      TRect &Rect, TOwnerDrawState State)
{
  /* 讀取 bimap 檔案 */
  Image1->Picture->LoadFromFile(IntToStr(Index   1)   ".bmp");
  /* 自己畫選項 */
  ComboBox1->Canvas->StretchDraw(Rect, Image1->Picture->Bitmap);
  ComboBox1->Canvas->FrameRect(Rect);
}
如果你不想 bitmap 檔案獨立在外部,比較正統的方法是將圖片放到 Resource ,然後程式要用的時候再去 LoadResource,簡單的方法就是畫面上拉五個 TImage 名稱為 Image1 ~ Image5,在 design time 時先點選 TImage 的 Picture 屬性,將圖檔 load 進來,然後程式改一下。
void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index,
      TRect &Rect, TOwnerDrawState State)
{

  TImage *img = dynamic_cast(FindComponent("Image"   IntToStr(Index   1)));      if (img)
  {
    /* 自己畫選項 */
    ComboBox1->Canvas->StretchDraw(Rect, img->Picture->Bitmap);
    ComboBox1->Canvas->FrameRect(Rect);
  }
}
發表人 - allenchan 於 2004/12/01 09:17:37
qqmax
一般會員


發表:17
回覆:26
積分:8
註冊:2004-11-22

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-12-01 17:44:40 IP:211.76.xxx.xxx 未訂閱
嗯沒錯但是如果我只給EXE檔就讀不到了 可是我今天有向我們的老師詢問 他說要把圖檔寫在RESOURCE裡面 然後COMPILE時會自動附在EXE檔裡 可是那又是另一種境界的事情了 可否能給予一些指點呢 感恩^^
qqmax
一般會員


發表:17
回覆:26
積分:8
註冊:2004-11-22

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-12-01 17:48:12 IP:211.76.xxx.xxx 未訂閱
引言: 您好,我給您的範例是要讀取外部的圖片沒有錯呀,您的那五張圖片必須放在執行檔的目錄下一併發佈,這只是範例喔,主要目的在於示範如何 ComboBox 的選項。
void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index,
      TRect &Rect, TOwnerDrawState State)
{
  /* 讀取 bimap 檔案 */
  Image1->Picture->LoadFromFile(IntToStr(Index   1)   ".bmp");
  /* 自己畫選項 */
  ComboBox1->Canvas->StretchDraw(Rect, Image1->Picture->Bitmap);
  ComboBox1->Canvas->FrameRect(Rect);
}
如果你不想 bitmap 檔案獨立在外部,比較正統的方法是將圖片放到 Resource ,然後程式要用的時候再去 LoadResource,簡單的方法就是畫面上拉五個 TImage 名稱為 Image1 ~ Image5,在 design time 時先點選 TImage 的 Picture 屬性,將圖檔 load 進來,然後程式改一下。
void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index,
      TRect &Rect, TOwnerDrawState State)
{

  TImage *img = dynamic_cast(FindComponent("Image"   IntToStr(Index   1)));      if (img)
  {
    /* 自己畫選項 */
    ComboBox1->Canvas->StretchDraw(Rect, img->Picture->Bitmap);
    ComboBox1->Canvas->FrameRect(Rect);
  }
}
發表人 - allenchan 於 2004/12/01 09:17:37
感謝你精闢的講解我來融會貫通一下如果有一或海請您多多指教^^
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-12-01 18:23:40 IP:203.70.xxx.xxx 未訂閱
您好,如果針對此一主題您已有滿意的答覆,請先做個結束(就是給分啦..),關於 > 發表人 -
系統時間:2024-04-29 4:16:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!