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

請問關於Tcolor .......

答題得分者是:brook
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-19 01:08:56 IP:61.59.xxx.xxx 未訂閱
請問 Tcolor是個型態還是個類別呢? 當使用Canvas->Pixels[x][y] 把裡面的值拿出來 都會用Tcolor形態的變數來放 那Tcolor是跟int float之類一樣的型態囉? 有時候我立了個變數int x 把他直接放到Canvas->Pixels[x][y]裡時 編譯器會跟我說發生int放入Tcolor形態的狀況 可是還是會讓我編譯完成 但當我寫Canvas->Pixels[x][y]=(Tcolor)x時 他卻說我這是錯誤的寫法 這是什麼意思阿? 怎麼不加(Tcolor)反而可以代入呢? 在灰階程式中還有個寫法 (Tcolor)RGB(gray,gray,gray) 這也是說把RGB這函式的回傳質變成(Tcolor)型態囉? 再請問另外一個問題 有時候我要把兩個Bmp圖複製,(假設已經存在Image1,跟Image2物件了) 我會寫 Image2->Picture->Bitmap=Image1->Picture->Bitmap 這樣就會把Image2的圖變成跟Image1物件中的一樣 那我寫成 Image2->Picture->Bitmap->Assign(Image1->Picture->Bitmap) 結果好像也是一樣 這兩種寫法有沒有差別在呢? 以上幾個零零碎碎的問題, 請了解的大大一題題耐心回覆一下 勞煩大家了,小弟初學BCB,不懂的東西很多 請大家指教,多謝~
brook
資深會員


發表:57
回覆:323
積分:371
註冊:2002-07-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-19 13:44:33 IP:218.160.xxx.xxx 未訂閱
1.但當我寫Canvas->Pixels[x][y]=(Tcolor)x時 他卻說我這是錯誤的寫法 A:Tcolor中c要大寫. 2.Image2->Picture->Bitmap->Assign(Image1->Picture->Bitmap) 把圖片真正複製到Image2. 3.Image2->Picture->Bitmap=Image1->Picture->Bitmap Image2 只是把指標指過去而己.就像兩個人看同一幅畫,只要任何一個人在畫中劃兩筆,兩個人的畫都同時會變.
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-19 18:37:07 IP:211.76.xxx.xxx 未訂閱
brook你好:    : 3.Image2->Picture->Bitmap=Image1->Picture->Bitmap : Image2 只是把指標指過去而己.就像兩個人看同一幅畫,只要任何一個人在 : 中劃兩筆,兩個人的畫都同時會變.    以上的回答可能有誤。Bitmap不是單純的member data,而是一個property。在做"寫入"(Assign)的動作時,事實上是呼叫了SetBitmap。BCB的Help有如下的property介紹    __property TBitmap* Bitmap = {read=GetBitmap, write=SetBitmap};    而TPicture的SetBitmap則是呼叫了SetGraphic,參考以下的原始碼:  
procedure TPicture.SetBitmap(Value: TBitmap);
begin
  SetGraphic(Value);
end;
 
至於SetGraphic的程式碼如下:
 
procedure TPicture.SetGraphic(Value: TGraphic);
var
  NewGraphic: TGraphic;
begin
  NewGraphic := nil;
  if Value <> nil then
  begin
    NewGraphic := TGraphicClass(Value.ClassType).Create;
    NewGraphic.Assign(Value);
    NewGraphic.OnChange := Changed;
    NewGraphic.OnProgress := Progress;
  end;
  try
    FGraphic.Free;
    FGraphic := NewGraphic;
    Changed(Self);
  except
    NewGraphic.Free;
    raise;
  end;
end;
可以看到SetGraphic在處理上在也是用了Assign的函式,差別在Changed事件的呼叫。
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-19 18:52:19 IP:61.59.xxx.xxx 未訂閱
多謝 brook大大的解說 以及pwipwi大大的補充 再次感謝~
系統時間:2024-05-03 23:59:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!