德尔福 XE。
有一个Buttoned Edit(带有左键),一个带有按钮图片的图像列表。一切都在一个框架上(如果在一个表格上就可以了)。
在设计时没有按钮的缩进,但在运行时。
它是一个错误吗?
谢谢!
德尔福 XE。
有一个Buttoned Edit(带有左键),一个带有按钮图片的图像列表。一切都在一个框架上(如果在一个表格上就可以了)。
在设计时没有按钮的缩进,但在运行时。
它是一个错误吗?
谢谢!
是的,这是一个错误。出于某种原因,Ctl3D
当TButtonEdit
编辑驻留在帧中时,无法从 .dfm 文件中正确流式传输 . 流式传输导致Ctl3D
成为False
而不是True
.
然后,在TEditButton.UpdateBounds
下面的代码中执行:
if (not FEditControl.Ctl3D) and (FEditControl.BorderStyle <> bsNone) then
begin
FGlyph.Top := 2;
Inc(NewLeft, 2);
end;
这就是将按钮的位置向右和向下移动 2 个像素的原因。
UpdateBounds
您可以通过在代码中手动设置 Ctl3D 并强制再次调用来解决该错误。我用插入器做到了这一点:
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;
您可以将其包含在您的框架中,但请确保 interposed 的声明TButtonedEdit
在您的框架声明之前。或者,如果该错误影响了许多帧,请在一个公共单元中声明它,并在使用ExtCtrls
.
现在,至于为什么流媒体设置不Ctl3D
正确的明显问题,我对此没有答案。也许比我更了解表单流的人可以启发我们!