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

使用BCB的TCanvas物件並使TImage的範圍變大

尚未結案
StarKang
一般會員


發表:6
回覆:2
積分:1
註冊:2004-11-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-22 09:38:06 IP:203.64.xxx.xxx 未訂閱
請問各位高手, 自己在程式碼內用TImage上的TCanvas自動繪圖, 但是因為自己的自動繪圖 會超過TImage的邊界, 所以會設定TImage的Height或是Width, 但是好像沒 有作用, 請問要如何解決? 之前找了一下討論區, 看到有程式碼可以讀取BitMap的來變動TImage的大 小, 但是自己使用(ex. Image1->Picture->BitMap->Height卻沒有用?) 自己變動TImage的邊界程式碼大致如下 if (y_cur >= Image1->ClientHeight) { oldHeight = Image1->Height; Image1->Height = Image1->Height 40; Image1->Refresh(); Image1->Canvas->MoveTo(x_ENTPOS[i], oldHeight); Image1->Canvas->LineTo(x_ENTPOS[i], Image1->Height); } Image1的屬性 Align = alNone; AutoSize = true; Stretch = false; ps:自己嚐試列印出Image1->Height的數值好像如此更動Image1->Height 的數值依然不變? 新手上路, 謝謝高手解惑
Zard
尊榮會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-22 12:15:14 IP:210.243.xxx.xxx 未訂閱
引言: 請問各位高手, 自己在程式碼內用TImage上的TCanvas自動繪圖, 但是因為自己的自動繪圖 會超過TImage的邊界, 所以會設定TImage的Height或是Width, 但是好像沒 有作用, 請問要如何解決? 之前找了一下討論區, 看到有程式碼可以讀取BitMap的來變動TImage的大 小, 但是自己使用(ex. Image1->Picture->BitMap->Height卻沒有用?) 自己變動TImage的邊界程式碼大致如下 if (y_cur >= Image1->ClientHeight) { oldHeight = Image1->Height; Image1->Height = Image1->Height 40; Image1->Refresh(); Image1->Canvas->MoveTo(x_ENTPOS[i], oldHeight); Image1->Canvas->LineTo(x_ENTPOS[i], Image1->Height); } Image1的屬性 Align = alNone; AutoSize = true; Stretch = false; ps:自己嚐試列印出Image1->Height的數值好像如此更動Image1->Height 的數值依然不變? 新手上路, 謝謝高手解惑
因為你把AutoSize 設為TRUE, 所以才法動態更改Image1的大小, 把AutoSize設為 FALSE應該就可以了
StarKang
一般會員


發表:6
回覆:2
積分:1
註冊:2004-11-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-22 12:41:29 IP:203.64.xxx.xxx 未訂閱
引言:
引言: 請問各位高手, 自己在程式碼內用TImage上的TCanvas自動繪圖, 但是因為自己的自動繪圖 會超過TImage的邊界, 所以會設定TImage的Height或是Width, 但是好像沒 有作用, 請問要如何解決? 之前找了一下討論區, 看到有程式碼可以讀取BitMap的來變動TImage的大 小, 但是自己使用(ex. Image1->Picture->BitMap->Height卻沒有用?) 自己變動TImage的邊界程式碼大致如下 if (y_cur >= Image1->ClientHeight) { oldHeight = Image1->Height; Image1->Height = Image1->Height 40; Image1->Refresh(); Image1->Canvas->MoveTo(x_ENTPOS[i], oldHeight); Image1->Canvas->LineTo(x_ENTPOS[i], Image1->Height); } Image1的屬性 Align = alNone; AutoSize = true; Stretch = false; ps:自己嚐試列印出Image1->Height的數值好像如此更動Image1->Height 的數值依然不變? 新手上路, 謝謝高手解惑
因為你把AutoSize 設為TRUE, 所以才法動態更改Image1的大小, 把AutoSize設為 FALSE應該就可以了
感謝回覆, AutoSize = false可看到TImage所處的TScrollBox的Scrollbar有變化,但是 可視範圍(使用Canvas元件時底色所呈現的範圍)還是原本初始化的範圍!? 不知道這個現象如何克服? TImage還是ScrollBox需要Refresh? 謝謝 新手上路, 謝謝高手解惑
Zard
尊榮會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-22 16:05:51 IP:210.243.xxx.xxx 未訂閱
放大TImage時除了要設定TImage->Height和TImage->Width外, 還要設定 Image1->Picture->Graphic->Height Image1->Picture->Graphic->Width 例如:下面這個例子, 當按下Button1時, 會在Image1上畫上底色, 而當按下Button2時會放大Image1, 若在Button2事件中拿掉Image1->Picture->Graphic->Height = 200;和Image1->Picture->Graphic->Width = 200; 就會出現雖然Image1已經放大了, 但是Canvas的底色範圍還是不變, 你可以試試
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TRect CanvasRect(0, 0, Image1->Width, Image1->Height);
  // 填上底色
  Image1->Canvas->FillRect(CanvasRect);
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button2Click(TObject *Sender)
{
  // 放大Image1
  Image1->Width = 200;
  Image1->Height = 200;
  
  // 放大Image1->Picture
  Image1->Picture->Graphic->Height = 200;
  Image1->Picture->Graphic->Width = 200;
  
}    
系統時間:2024-05-08 19:47:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!