在 TCornerButton 的画布上绘图时位置错误
我创建了一个继承自 TCornerButton 的新组件来添加下拉菜单选项。
第一个问题...
为什么我需要重写“AfterPaint”方法而不是文档中描述的“Paint”方法。覆盖“Paint”也不会导致任何绘图。
第二个问题...
当我使用“AfterPaint”方法绘制一个向下的小箭头时,其向右偏移约 5 个像素,直到按钮获得焦点。仅将鼠标悬停在按钮上似乎并不能解决问题(正如您期望发生的重新绘制一样)。我已经将其与代码中的“ScalePoint”和没有“ScalePoint”联系起来,但每次都是错误的。 它还在设计时显示在错误的位置。一旦按钮在运行时获得焦点,箭头就会移动到预期位置。当它失去焦点时,它会移回到错误的位置。 供参考。 “宽度”没有改变 - 我已经对此进行了测试。
procedure TLFButton.AfterPaint;
var
down_arrow: TPolygon;
x, y: Extended;
begin
inherited;
if FDropDownButton then
begin
Canvas.Fill := TText(FindStyleResource('text')).Fill;
x := Width - 12;
y := (Height / 2) - 3;
SetLength(down_arrow, 3);
down_arrow[0] := ScalePoint(PointF(x, y), Scale.X, Scale.Y);
down_arrow[1] := ScalePoint(PointF(x+8,y), Scale.X, Scale.Y);
down_arrow[2] := ScalePoint(PointF(x+4,y+6), Scale.X, Scale.Y);
Canvas.FillPolygon(down_arrow, 255);
end;
end;
I have created a new component that inherits from TCornerButton to add a drop down menu option.
First question...
Why do I need to override the "AfterPaint" method rather then the "Paint" method as described in the documentation. Overriding the "Paint" did nor result in any drawing.
Second question...
When I do use the "AfterPaint" method to draw a little down pointing arrow its offset right by about 5 pixels until the button gets focus. Just hovering over the button does not appear to fix the problem (as you would expect a repaint to occur). I have tied this with and without the "ScalePoint" in the code and every time its wrong.
It also shows in the wrong position at design time. As soon as the button is gets focus at runtime the arrow moves to the expected position. When it looses focus it moves back to the wrong position.
FYI. The "Width" is not changing - I have tested for that.
procedure TLFButton.AfterPaint;
var
down_arrow: TPolygon;
x, y: Extended;
begin
inherited;
if FDropDownButton then
begin
Canvas.Fill := TText(FindStyleResource('text')).Fill;
x := Width - 12;
y := (Height / 2) - 3;
SetLength(down_arrow, 3);
down_arrow[0] := ScalePoint(PointF(x, y), Scale.X, Scale.Y);
down_arrow[1] := ScalePoint(PointF(x+8,y), Scale.X, Scale.Y);
down_arrow[2] := ScalePoint(PointF(x+4,y+6), Scale.X, Scale.Y);
Canvas.FillPolygon(down_arrow, 255);
end;
end;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
另一种方法是使用 StyleLookup。
通过使用 StyleLookup,设计人员可以在不更改代码的情况下更改向下箭头。
将下面的代码保存在 LFButton.Style 文本文件中并将其加载到样本中。
TPath = 向下的小箭头。
A different approach is to use a StyleLookup.
By using a StyleLookup, a designer is able to change the down pointing arrow without changing the code.
Save code below in a LFButton.Style text file and load it in a StyleBook.
TPath = the little down pointing arrow.