3

これは、上と下にある画像TFormです。TEditTComboBox

ここに画像の説明を入力

ご覧のとおり、TEdit には、Windows コントロールの既定のテーマの従来の 3D 境界線がありません。Ctl3D propertyこれは、そのコンポーネントの をに設定したためFalseです。次に、TComboBox に通常の 3D 境界線があることがわかりますが、この場合Ctl3D property、そのコンポーネントのも に設定しますFalseが、3D 境界線は引き続き表示されます。

開発レベルでの Delphi のバグのようです。コードでそれを修正するにはどうすればよいですか?


RRUZ の回答をテストした後BevelKind=bkFlat、次のようになりました。

ここに画像の説明を入力

なぜこんなに違うのかわかりません...そして奇妙です。:-/

4

3 に答える 3

8

BevelKindのプロパティを にTComboBox設定することで、3D ボーダーを削除できますbkFlat

ここに画像の説明を入力

于 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 に答える