我TSpeedButton
在表单上有两个按钮。当一个按钮被启用时,另一个被禁用,反之亦然。我想用自定义颜色绘制按钮以反映它们是启用还是禁用。
我编写了一个名为SetButtonsColors
. 此过程设置(一次一个按钮)、变量ButtonFillColor
和ButtonStrokeColor
自定义颜色,相应地设置按钮状态,并立即命令重新绘制按钮。
在ButtonPaint
处理程序上,我分别设置Canvas.Fill.Color
andCanvas.Stroke.Color
和ButtonFillColor
并ButtonStrokeColor
填充和绘制aRect
.
令我失望的是,按钮总是涂有为最后一个按钮设置的颜色。我想,这是因为Windows
异步绘制按钮,因此使用了Canvas.Fill.Color
and的最后一个设置Canvas.Stroke.Color
。
如果这是真的,我如何Windows
在命令重新绘制按钮后立即强制绘制按钮?
遵循SetButtonsColors
and的代码ButtonPaint
:
procedure tForm1.SetButtonsColors;
begin
if Button1.Enabled then begin
ButtonFillColor := tAlphaColorRec.White;
ButtonStrokeColor := tAlphaColorRec.Black;
Button1.Repaint;
ButtonFillColor := tAlphaColorRec.Black;
ButtonStrokeColor := tAlphaColorRec.White;
Button1.Repaint;
end;
else begin
ButtonFillColor := tAlphaColorRec.Black;
ButtonStrokeColor := tAlphaColorRec.White;
Button1.Repaint;
ButtonFillColor := tAlphaColorRec.White;
ButtonStrokeColor := tAlphaColorRec.Black;
Button2.Repaint;
end;
end;
procedure tForm1.ButtonPaint (Sender: tObject; Canvas: tCanvas; const aRect: tRectF);
begin
Canvas.BeginScene;
Canvas.Fill .Color := lvButtonFillColor;
Canvas.Stroke.Color := lvButtonStrokeColor;
Canvas.FillRect (aRect, 0, 0, [] , 1, CornerTypeBevel);
Canvas.DrawRect (aRect, 0, 0, AllCorners, 1, CornerTypeBevel);
Canvas.EndScene;
end;
谢谢。