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

如何在 runtime 改變 SpeedButton 的 Glyph?(用 ImageList的話)

答題得分者是:Zard
jimmygump
一般會員


發表:8
回覆:12
積分:4
註冊:2003-09-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-11 06:09:58 IP:61.71.xxx.xxx 未訂閱
如果圖是放在 ImageList 中要怎麼做呢?因為一些理由不採用 LoadFromFile哦... < class="code"> //ImageList 中的圖 const ... NDX_HIDE = 0; NDX_SHOW = 1; ... design time 沒有指定 Glyph,在 runtime : ImageList1.GetBitmap(NDX_HIDE, SpeedButton1.Glyph); 或 ImageList1.Draw(SpeedButton1.Glyph.Canvas, 0, 0, NDX_HIDE); 都可以畫上第一次,但之後我要畫 NDX_SHOW 的圖就不行了,還是維持第一次畫上的圖,WHY?...大俠們解救一下吧 Jimmy Gump
------
Jimmy Gump
jimmygump
一般會員


發表:8
回覆:12
積分:4
註冊:2003-09-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-11 06:29:47 IP:61.71.xxx.xxx 未訂閱
sorry...看到 TBitmap 裡的範例了,用 Assign 可以做    
var
  Bmp: TBitmap;
begin
  XXX.Visible := not XXX.Visible;
  Bmp := TBitmap.Create;
  try
    if XXX.Visible then
      ImageList1.GetBitmap(NDX_HIDE, Bmp)
    else
      ImageList1.GetBitmap(NDX_SHOW, Bmp);        SpeedButton1.Glyph.Assign(Bmp);
  finally
    Bmp.Free;
  end;
end;
還有沒有別的簡單方法? Jimmy Gump
------
Jimmy Gump
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-11 12:04:30 IP:211.23.xxx.xxx 未訂閱
引言: sorry...看到 TBitmap 裡的範例了,用 Assign 可以做
var
  Bmp: TBitmap;
begin
  XXX.Visible := not XXX.Visible;
  Bmp := TBitmap.Create;
  try
    if XXX.Visible then
      ImageList1.GetBitmap(NDX_HIDE, Bmp)
    else
      ImageList1.GetBitmap(NDX_SHOW, Bmp);        SpeedButton1.Glyph.Assign(Bmp);
  finally
    Bmp.Free;
  end;
end;
還有沒有別的簡單方法? Jimmy Gump
其實不用在Create一個Bitmap物件, 可以直接用, 例    ImageList1.GetBitmap(NDX_HIDE, SpeedButton1.Glyph);     
jimmygump
一般會員


發表:8
回覆:12
積分:4
註冊:2003-09-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-11 12:34:31 IP:61.71.xxx.xxx 未訂閱
引言: 其實不用在Create一個Bitmap物件, 可以直接用, 例
ImageList1.GetBitmap(NDX_HIDE, SpeedButton1.Glyph); 
就是很奇怪,這樣做真的圖都沒變,才會提問的嘛... 很短的測試,可以試試。看看問題何在?
begin
  XXX.Visible := not XXX.Visible;      // 都有依 XXX.Visible 執行進去,但畫面上的圖就是不會改
  if XXX.Visible then
    ImageList1.GetBitmap(NDX_HIDE, SpeedButton1.Glyph)
  else
    ImageList1.GetBitmap(NDX_SHOW, SpeedButton1.Glyph);
end;
Jimmy Gump
------
Jimmy Gump
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-11 13:12:45 IP:210.243.xxx.xxx 未訂閱
引言:
引言: 其實不用在Create一個Bitmap物件, 可以直接用, 例
ImageList1.GetBitmap(NDX_HIDE, SpeedButton1.Glyph); 
就是很奇怪,這樣做真的圖都沒變,才會提問的嘛... 很短的測試,可以試試。看看問題何在?
begin
  XXX.Visible := not XXX.Visible;      // 都有依 XXX.Visible 執行進去,但畫面上的圖就是不會改
  if XXX.Visible then
    ImageList1.GetBitmap(NDX_HIDE, SpeedButton1.Glyph)
  else
    ImageList1.GetBitmap(NDX_SHOW, SpeedButton1.Glyph);
end;
Jimmy Gump
呵呵, 抱歉沒仔細看你的第一篇, 只有看第二篇, 如果你要直接用ImageList1.GetBitmap(NDX_SHOW, SpeedButton1.Glyph); 你可以這樣改
  // 先用一個 TRect把SpeedButton1的大小記下來
  Rect.Left := 0;
  Rect.Top := 0;
  Rect.Bottom := SpeedButton1.Height;
  Rect.Right := SpeedButton1.Width;    換圖時用
  // 把上一張圖清掉
  SpeedButton1.Glyph.Canvas.FillRect(Rect);
  // 換上新圖
  ImageList1.GetBitmap(NDX_HIDE, SpeedButton1.Glyph);
  SpeedButton1.Glyph.Modified := TRUE;
系統時間:2024-05-17 10:20:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!