Delphi:ButtonedEdit + Frame = Bug

max*_*fax 1 delphi frame tbuttonededit

德尔福XE.

有一个带按钮的编辑(带有左按钮),一个带有按钮图片的图像列表.一切都在一个框架上(如果在表格上则没问题).

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

这是一个错误吗?

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

谢谢!

Dav*_*nan 7

是的,这是一个错误.出于某种原因,当编辑驻留在框架中时,.dfm文件中的Ctl3D属性TButtonEdit未正确流式传输.流媒体是导致Ctl3DFalse代替True.

然后,在TEditButton.UpdateBounds以下代码中执行:

if (not FEditControl.Ctl3D) and (FEditControl.BorderStyle <> bsNone) then
begin
  FGlyph.Top := 2;
  Inc(NewLeft, 2);
end;
Run Code Online (Sandbox Code Playgroud)

这就是将按钮的位置向右和向下移动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;
Run Code Online (Sandbox Code Playgroud)

您可以在框架中包含它,但要确保插入的声明在声明TButtonedEdit框架之前.或者,如果错误折磨着许多帧,声明它在一个共同的单位和使用单位的帧使用ExtCtrls.

现在,关于为什么流媒体设置不Ctl3D正确的明显问题,我没有答案.也许比我更了解形式流的人可以启发我们!

  • 接得好.现在请QC这个(我老实说它). (3认同)