令我驚訝的是,我發現在TCanvas上重複渲染文本是某種「附加」的。我意識到設置Canvas.Brush.Style:=bsClear
是問題的原因,但我確實需要透明地重複呈現文本(即在OnPaint
事件中)。這樣做後,文字看起來不太好。TCanvas上的「添加劑」文字渲染?
我怎樣才能避免這種情況?
下面是一些示例代碼;如果您對稱爲btn1
的TButton進行幾次點擊,您會看到效果。
procedure TForm1.btn1Click(Sender: TObject);
begin
Form1.Canvas.Brush.Style:=bsClear; //if you omit this, everything is OK.
Form1.Canvas.Font.Color:=clRed;
Form1.Canvas.Font.Name:='Times new Roman';
Form1.Canvas.Font.Style:=[fsBold];
Form1.Canvas.Font.Size:=12;
Form1.Canvas.TextOut(50,50,'www.stackoverflow.com');
end;
我想你在這裏做的是從Windows概念POV非常錯誤。畫布是不穩定的東西,需要重新繪製。它不是持久的。將窗體移動到屏幕外部或將其懸停在另一個窗口中應該會刪除該圖片。遵循Windows方式使用TPaintBox並根據需要繪製所需內容,強制反Windows持久方式使用TImage來保留繪圖。 –
@Arioch>當然......但是這是非常簡單的例子...只是在點擊按鈕的處理程序示範 – lyborko
停止繪畫和響應'WM_PAINT'開始繪畫。在VCL中,你通常會使用'TPaintBox'來屏蔽Win32 API。我再說一遍,只有響應'WM_PAINT'才能繪製。 –