2012-10-08 2 views
3

이것은 아래 TEditTComboBox이있는 TForm의 이미지입니다.TComboBox Ctl3D 속성 버그를 수정하는 방법?

enter image description here

당신이 볼 수 있듯이,은 TEdit는 Windows의 고전적인 3D 테두리 기본 테마를 제어하지 않습니다. 그 구성 요소의 Ctl3D propertyFalse으로 설정했기 때문입니다. 그런 다음 TComboBox에 일반적인 3D 테두리가 있음을 알 수 있습니다.이 경우에도 해당 구성 요소의 Ctl3D propertyFalse으로 설정하지만 3D 테두리가 계속 표시됩니다.

개발 단계에서 델파이 버그 인 것 같습니다. 코드에서 어떻게 해결할 수 있습니까?


는 테스트 RRUZ 응답, BevelKind=bkFlat 후이 와서 : 너무 다른 ... 기괴한 이유를

enter image description here

모르겠어요. :/

+0

다른 구성 요소 패키지를하지만 우리는 bkFlat'에 콤보 상자의 BevelKind 속성을 설정하십시오 – PSyLoCKe

+2

그 TEdits처럼 검은 색으로 테두리 색상을 설정할 수 없습니다 : 클라이언트 색상으로 국경을 채울 수 있습니다 '. – RRUZ

답변

7

BevelKind 속성을 설정하는 3D 테두리를 bkFlat으로 제거 할 수 있습니다. 우리는 설정해야

:

enter image description here

+0

질문에 결과를 넣었습니다. 이유는 모르겠지만 델파이와는 거리가 멀었습니다. :( – PSyLoCKe

1

나는 그것을 발견

BevelInnerbvNone에;

BevelKind 내지 bkFlat;

BevelOuter to bvSpace.

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; 
관련 문제