德尔福 XE。
有一个Buttoned Edit(带有左键),一个带有按钮图片的图像列表。一切都在框架 (如果在表格上就可以了)。
在设计时没有按钮的缩进,但在运行时。
它是一个错误吗?
谢谢!
最佳答案
是的,这是一个错误。出于某种原因 Ctl3D
TButtonEdit
的属性(property)当编辑位于帧中时,未从 .dfm 文件正确流式传输。流式传输导致 Ctl3D
正在 False
而不是 True
.
然后,在 TEditButton.UpdateBounds
以下代码执行:
if (not FEditControl.Ctl3D) and (FEditControl.BorderStyle <> bsNone) then
begin
FGlyph.Top := 2;
Inc(NewLeft, 2);
end;
这就是将按钮的位置向右和向下移动 2 个像素的原因。
您可以通过在代码中手动设置 Ctl3D 并强制
UpdateBounds
来解决该错误。再次被调用。我用插入器做到了这一点:type
TButtonedEdit = class(ExtCtrls.TButtonedEdit)
protected
procedure Loaded; override;
end;
procedure TButtonedEdit.Loaded;
begin
inherited;
Ctl3D := True;
LeftButton.Visible := not LeftButton.Visible;
LeftButton.Visible := not LeftButton.Visible;
RightButton.Visible := not RightButton.Visible;
RightButton.Visible := not RightButton.Visible;
end;
您可以将它包含在您的框架中,但请确保插入的
TButtonedEdit
的声明在你的框架被宣布之前。或者,如果该错误影响了许多帧,请在一个公共(public)单元中声明它并在您的帧中使用该单元 之后 您使用 ExtCtrls
.现在,关于为什么流不设置
Ctl3D
的明显问题正确,我对此没有答案。也许比我更了解表单流的人可以启发我们!
关于Delphi:ButtonedEdit + Frame = Bug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7019459/