2011-08-30 4 views
1

TPageControl 스타일을 평면 단추 (tsFlatButtons)로 설정하고 OnDrawTab 이벤트를 사용하여 탭의 단추 색을 변경합니다.TPageControl DrawTab의 문제

작동하지만 비활성 인 버튼에는 회색 (btn 페이스 색상) 테두리가 있습니다! enter image description here

어떤 문제 해결 방법이 있습니까?

for I := 0 to Pred(PageControl1.PageCount) do 
    PageControl1.Pages[I].TabVisible := False; 

이러한 특성을 가진 TTabSet 를 추가 :

당신이 enter image description here , 현재 탭을 숨길 수의 디자인 괜찮 경우 해결 방법으로
procedure TForm1.PageControlDrawTab(Control: TCustomTabControl; 
      TabIndex: Integer; const Rect: TRect; Active: Boolean); 

var 
    AText: string; 
    ARect: TRect; 

begin 
    with (Control as TPageControl).Canvas do 
    begin 
    ARect := Rect; 
    OffsetRect(ARect, 0, 4); 

    Brush.Color := COLOR1; 
    FillRect(Rect); 

    AText := TPageControl(Control).Pages[TabIndex].Caption; 

    with Control.Canvas do 
     DrawText(Control.Canvas.Handle, PChar(AText), -1,ARect, DT_CENTER or DT_SINGLELINE); 

    end; 
end; 
+0

당신이 코드를 보여줄 수 Win64bits에 문제를 그리기 해결을 . –

+0

코드를 추가했습니다. 그것은 꽤 솔직합니다. – ewlung

+0

그것은 저를 위해 잘 일했습니다. Delphi의 어떤 버전입니까? –

답변

1

,
BackgroundColor := clGradientActiveCaption; 
SelectedColor := clGradientActiveCaption; 
Style := tsModernTabs 
1

이 게시물은 매우 오래된 것으로 알고 있지만, 완전한 대답과 나는 똑같은 문제가 있었고 마침내 어떻게하는지 알았습니다. 나는 당신에게 알려야한다고 생각했습니다 ...

일부 탭이 tabvisible을 False로 설정하면 코드가 제대로 작동하지 않습니다 여기에 내가 가장 좋은 방법은 정수를 사용하여이 문제를 해결할 생각입니다 루프 탭에 내가 :

for I := 0 to TPageControl(Control).PageCount-1 do 
    if TPageControl(Control).Pages[I].TabIndex = TabIndex then 
begin 
    FillRect(Control.Canvas.Handle,aRect,Control.Canvas.Brush.Handle); 
    // Do your text drawing here 
    break; 
end; 
0
+0

질문에 답할 때 샘플 코드와 설명으로 완전한 답을 제공하십시오. 다른 사이트로의 링크만으로는 충분하지 않습니다. – veducm

+0

답안에 해결책의 일부분이나 링크가 유효하지 않게 될 경우 적어도 해결책에 대한 높은 수준의 설명. –