Delphi:ButtonedEdit + Frame = Bug

标签 delphi frame tbuttonededit

德尔福 XE。

有一个Buttoned Edit(带有左键),一个带有按钮图片的图像列表。一切都在框架 (如果在表格上就可以了)。

在设计时没有按钮的缩进,但在运行时。

它是一个错误吗?

enter image description here
enter image description here

谢谢!

最佳答案

是的,这是一个错误。出于某种原因 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/

相关文章:

Delphi Frame继承的属性不存在

delphi - IdHttp 只需获取响应代码

delphi - 有没有更简单的方法在 Delphi 中重构它?

delphi - 如何在Delphi中创建一个五边形形状?

android - ZXing 完全包括在内,但相机旋转

plot - CorePlot 图中的外边距

ios - 多次调用 setFrame?

delphi - "pressing"使用键盘的TButtonedEdit按钮