1

德尔福 XE。

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

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

它是一个错误吗?

在此处输入图像描述 在此处输入图像描述

谢谢!

4

1 回答 1

7

是的,这是一个错误。出于某种原因,Ctl3DTButtonEdit编辑驻留在帧中时,无法从 .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正确的明显问题,我对此没有答案。也许比我更了解表单流的人可以启发我们!

于 2011-08-11T07:12:58.687 回答