大家好
我创建了一个从 TWinControl
派生的新组件。
我将其放在 TPanel
上,并尝试调用面板的 PaintTo
过程。结果是面板及其标题,而我的组件根本没有绘制在 Canvas 上。我该怎么办?
部分来源(正如亲爱的大卫所问):
Procedure TApListBox.Paint;
var
C: TCanvas;
B: TBitmap;
ItemClient: TPoint;
Begin
Try
If (FUpdating > 0) Then
Exit;
Try
BeginUpdate;
B := TBitmap.Create;
B.Width := Width;
B.Height := Height;
With B.Canvas Do Begin
Lock;
// Begin :
ItemClient := Point(IVisPanel + 3, 2);
// Draw Items
PaintItems(B.Canvas, ItemClient);
Unlock;
End;
C := TCanvas.Create;
C.Handle := GetWindowDC(Self.Handle);
C.Lock;
inherited;
C.Draw(1, 1, B);
If (RenameEdit.Visible) Then
RenameEdit.Repaint;
Finally
C.Unlock;
ReleaseDC(0, C.Handle);
C.Free;
B.Free;
Dec(FUpdating);
End;
Except
End;
End;
最佳答案
您确实不需要调用或重写 PaintTo。
相反,您应该使用重写的 Paint 方法完成 100% 的绘制。绘画可以随时发生,并且组件需要能够根据需要自行绘画。发生的方式是 Windows 发送一条 WM_PAINT 消息,VCL 将其转换为对组件 Paint 方法的调用。
因此,请确保您的组件可以随时绘制所需的内容,并在重写的 Paint 方法中完成所有绘制。
关于delphi - PaintTo 不适用于我的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4696796/