3

这是一张来自顶部和TForm底部的图像。TEditTComboBox

在此处输入图像描述

如您所见,TEdit 没有 Windows 控件默认主题的经典 3D 边框。那是因为我Ctl3D property将该组件的 设置为False. 然后您会看到 TComboBox 具有正常的 3D 边框,但在这种情况下,我还将Ctl3D property该组件的 设置为False,但它继续显示 3D 边框。

这似乎是开发级别的 Delphi 错误。我怎么能在代码中解决这个问题?


在测试了 RRUZ 的答案后BevelKind=bkFlat,出现了:

在此处输入图像描述

我不知道为什么它如此不同......而且很奇怪。:-/

4

3 回答 3

8

您可以将 3D 边框设置为的BevelKind属性。TComboBoxbkFlat

在此处输入图像描述

于 2012-10-08T20:26:48.407 回答
1

我找到了:

我们必须设置:

BevelInnerbvNone;

BevelKindbkFlat;

BevelOuterbvSpace.

于 2013-01-22T14:10:24.917 回答
0

这是支持BidiMode和调整大小的最佳方式;并且可以用客户端颜色填充边框:

TTestComboBox=class(TComboBox)
protected
  procedure WMPaint(var Msg: TMessage); message WM_Paint;
End;

Procedure TTestComboBox.WMPaint(var Msg: TMessage);
var MCanvas: TControlCanvas;
    R: TRect;
Begin
  inherited;
  MCanvas:=TControlCanvas.Create;
  Try
    MCanvas.Control:=Self;
    With MCanvas do begin
      R:=ClientRect;
      Brush.Style:= bsClear;
      Pen.Color:= Color;
      Pen.Width:= 3;
      if BiDiMode in [bdRightToLeft, bdRightToLeftNoAlign] then begin
        if Style = csSimple then                   //remove border and space
          Rectangle(1, 1, R.Width - 1, R.Height-1) else Rectangle(-1, 1, R.Width, R.Height-1);
        if Style in [csDropDown, csOwnerDrawFixed, csOwnerDrawVariable] then begin
          Pen.Width:= 5;                           //remove space btw editor and button
          MoveTo(18, 0);
          LineTo(18, R.Height-1);
        end;
      end else begin
        if Style = csSimple then
          Rectangle(1, 1, r.Width - 1, R.Height-1) else Rectangle(1, 1, r.Width + 1, R.Height-1);
        if Style in [csDropDown, csOwnerDrawFixed, csOwnerDrawVariable] then begin
          Pen.Width:= 5;
          MoveTo(R.Width - 18, 0);
          LineTo(R.Width - 18, R.Height-1);
        end;
      end;
    end;
  finally
    MCanvas.Free;
  End;
End;
于 2016-03-02T09:19:51.993 回答