2017-09-02 616 views
-3

如何清除timage畫布以避免更改輸入大小時出現重複圖像?爲什麼nil命令不起作用? 這是我的代碼在delphi 7中清除timage.canvas

begin 
image1.Canvas := nil; 
image1.Canvas.Pen.Color := clRed; 
image1.Canvas.Brush.Color := clBlue; 
image1.canvas.rectangle(10,10,vwpj,vwlb);   
end; 
+0

圖像總是包含的東西。如果你想填充背景顏色。這樣做。不要將您的整個代碼轉儲給我們。正是我們需要看到的。 –

+0

當大小改變時,會在畫布上的舊矩形後面製作新的矩形。請問,我必須寫出正確的代碼? – rendra

+0

@nas他並沒有改變任何東西的大小。他正在特定座標處繪製一個矩形。 –

回答

2

不能分配NilCanvas任何值,Canvas是隻讀屬性,所以你需要刪除的第一行,然後繪製在畫布TImage

Image1.Canvas.Pen.Color := clRed; 
Image1.Canvas.Brush.Color := clBlue; 
Image1.canvas.rectangle(0,0,Image1.Height,Image1.Width); 

編輯: 你必須設置圖像默認每次它的畫布上繪製的時間:

步驟:

Procedure TForm1.Default(Image: TImage); 
begin 
    Image.Canvas.Pen.Color := clBtnFace; 
    Image.Canvas.Brush.Color := clBtnFace; 
    Image.Canvas.FillRect(Rect(0,0,Image.Height,Image.Width)); 
end; 

然後稱其爲:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Default(Image1); 
    Image1.Canvas.Pen.Color := clRed; 
    Image1.Canvas.Brush.Color := clBlue; 
    Image1.canvas.rectangle(0,0,Image1.Height,Image1.Width); 
end; 

enter image description here

+0

當使用tedit改變矩形的寬度或高度時,爲什麼在舊的矩形後面創建新的矩形,而不僅僅是先改變一個矩形的寬度和高度? – rendra

+0

@rendra您必須先將其設置爲默認值(clBtnFace) – Sami

+0

如何清除timage的過程? – rendra

-1

從你所寫的內容,並試圖在許多先前所做的變更來解釋。 這是解決您的問題的可能方案。

要求:

  1. 將四個TEdit組件到您的表單。
  2. 加一個TButton
  3. 和一個TImage

代碼:

var 
Xorigin,Yorigin,vwpj,vwlb:integer; 
.... 
begin 
    vwpj := strtoint(vwpjEdit.text); 
    vwlb := strtoint(vwlbEdit.text); 
    Xorigin := strtoint(XoriginEdit.Text); 
    Yorigin := strtoint(YoriginEdit.Text); 
    // You have to wipe the canvas with a base color, 
    image1.Canvas.Brush.Color := clwhite; 
    image1.Canvas.FillRect(rect(0,0,image1.Width,image1.height)); 
    image1.Canvas.Pen.Color := clRed; 
    image1.Canvas.Brush.Color := clBlue; 
    image1.Canvas.rectangle(Xorigin,Yorigin,vwlb,vwpj); 
end; 

說明:我明白,你想畫上TImageCanvas財產的矩形。隨着每次調整矩形的大小,你想清除Canvas(你暗示這是通過將nil分配給畫布,因爲Canvas是一個只讀屬性是錯誤的)。

現在上面的代碼通過使用Fillrect()方法填充畫布的基色(我選擇了clwhite)來完成此操作。

由此您需要明白,不存在清除圖像,或者刪除它(使用free命令如您所說)並且它將消失,如果您想再次繪製它,您將需要創建它。 第二個選擇是你用背景色填充它(我選擇的基地clwhite)或作爲第三個選項,調整圖像的大小。

所有主要的事情是,只要該圖像仍然存在,畫布上的內容仍然存在。代碼

上述結果

enter image description here

enter image description here

+0

@kobik我的一位老師在我小時候說過 - 有時候你會認爲你是對的,但是隻有當有人比你更有經驗的時候,你才知道。我認爲更有經驗的人是你在這種情況下。我將刪除該部分 –