2013-02-18 3 views
2

엄지 손가락 크기를 더 높은 크기로 조정할 수 없습니다. 이미지를 참조하십시오 TrackBar 엄지 손가락 크기를 조정하는 방법은 무엇입니까?

Trackbar thumb is small (on the left)

내가 왼쪽에 작은 엄지 손가락을 가지고, 내가 할 수없는 것이 더 큰 (그러나 트랙 바 자체).
원하는 엄지 손가락 크기가 빨간색 영역의 이미지에 표시됩니다.
어쩌면 WINAPI를 어떻게 든 사용할 수 있습니까? C++ 응용 프로그램은 더 큰 엄지 손가락을 자주 사용합니다.

이 실제로 호핑하고있는 무슨이다 :

NotePad++ TrackBar style

+0

@kobik을 :

이 예제는 모습입니다 즉, 침몰 한 사각형 훨씬 얇은 것, 그러나 (기본 크기를 얻을 것이다 엄지 손가락에 아무런 영향을주지 않습니다 ~ 24). –

+1

@Ingo : 스크린 샷에 표시된 스타일을 달성하는 데 아무런 문제가 없습니다. 최신 버전의 Delphi에서는'ShowSelRange'를'false'로 설정하기 만하면됩니다. 자신의 버전에서'TTrackBar.ShowSelRange'를 사용할 수 없다면 단순히 창 스타일'TBS_ENABLESELRANGE'을 제거하십시오. –

+0

첫 번째 스크린 샷의 '원하는 크기'가 두 번째 스크린 샷의 엄지 손가락보다 큽니다. ... –

답변

9

그것은 다음과 같이 보인다는 표준 트랙 바 컨트롤을 사용하여 수행 할 수 없습니다. 실제로, 나는 이것과 관련된 trackbar style 또는 trackbar message을 볼 수 없습니다. TBM_SETTHUMBLENGTH 만 있으며 VCL의 TTrackBar.ThumbLength에서도 액세스 할 수 있지만이 또한 백그라운드로 움푹 들어간 사각형의 높이에 영향을줍니다.

"C++ 응용 프로그램이 더 큰 엄지 손가락을 자주 사용하는"관찰은 의심 스럽습니다.

물론 언제든지 your own trackbar-like control을 만들 수 있습니다.

또는 오목 사각형 만 축소 하시겠습니까? 그런 다음 Object Inspector에서 ShowSelRangeFalse으로 설정하면됩니다. 하지만 테마가 켜져 있다면 여전히 엄지 손가락을 약 24보다 크게 만들 수 없습니다.

TrackBar.ShowSelRange이없는 이전 버전을 사용하는 경우 창 스타일 TBS_ENABLESELRANGE을 수동으로 제거해야합니다. SetWindowLong을 사용하여 언제든지이 작업을 수행 할 수 있으며 서브 클래 싱 된 트랙 바 컨트롤의 CreateParams에서 수행 할 수 있습니다. 가장 간단한 방법은 '인터 포저 클래스'를 사용하는 수 있습니다

type 
    TTrackBar = class(ComCtrls.TTrackBar) 
    protected 
    procedure CreateParams(var Params: TCreateParams); override; 
    end; 

... 
implementation 

{ TTrackBar } 

procedure TTrackBar.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    Params.Style := Params.Style and not TBS_ENABLESELRANGE; 
end; 

는 메모장 ++ 스크린 샷 모양을 얻으려면, 당신은 또한 tsNonetmBothTickStyleTickMarks을 설정해야합니다.

이 질문에 대한 답변은 없지만 엄지 손가락을으로 만드는 것에 관한 내용입니다. 이렇게하면 작은 사각형이 더 좁아집니다. ... 그러나 스크린 샷에서 원하는대로 맞춰 볼 수 있습니다.

+0

@Andreas, 내가 원하는 것은 Trackbar, Notepad ++ 스타일입니다. [NP ++의 이미지] (http://shot.qip.ru/008s9h-4QODkgOpy/) – Prog1020

+1

+1 ps : D7에 'ShowSelRange'가 없습니다 (OP는 어떤 경우에도'TBS_ENABLESELRANGE'을 (를) 사용할 수 있습니다), 나는 ~ 24가 가능한 최대 크기라고 생각합니다. XP 테마를 사용할 때만 얻을 수 있습니다. – kobik

+1

... TickMarks를 tmBoth로 설정하면 실제로 크기 제한이 없습니다. 나는 당신이 그것을 찍은 것 같아요 :) – kobik

7

트랙볼은 사용자 지정 그리기를 지원하는 네이티브 컨트롤 중 하나입니다. 기본적으로 테마가 활성화되면 컨트롤 그리기의 다양한 측면을 제어 할 수 있습니다. 또는 자신이 드로잉 파트를 추월하는 것을 OS에 알릴 수 있습니다. 사용자 정의 드로도 here에 대해 자세히 알아보십시오.

일부 부품의 크기를 약간만 사용하여 재생하려면 도면을 추월 할 필요가 없습니다. 채널 (움푹 패인 추적 배경) 및 틱을 그리는 것은 VCL입니다. 진드기에는 이미 사용할 수있는 속성이 있습니다. 채널의 경우 사각형을 조금씩 수축시켜 VCL을 대신 사용합니다. 엄지 손가락은 기본 윈도우 절차에 의해 그려지지만, 상관 없습니다. OS는 수정 된 사각형에 엄지 손가락을 그립니다.

아래 예제 (가로 트랙 바용)는 이러한 수정 작업을 수행하기 위해 양식에 WM_NOTIFY 알림을 전송합니다. 이것은 트랙 바가 폼에 직접 배치 된 경우에만 작동합니다. 그렇지 않은 경우 TTrackBar에서 새 컨트롤 CN_NOTIFY을 처리하거나 컨트롤을 하위 클래스 WM_NOTIFY에 대해 하위 클래스로 파생시킬 수 있습니다. 중요한 것은 실제 그리기를 수행하기 전에 알림을 처리하는 것입니다.
enter image description here

type 
    TForm1 = class(TForm) 
    Button1: TButton; 
    TrackBar1: TTrackBar; 
    procedure FormCreate(Sender: TObject); 
    protected 
    procedure WMNotify(var Msg: TWMNotify); message WM_NOTIFY; 
    end; 

... 

uses 
    themes, commctrl, xpman; 

{$R *.dfm} 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    if ThemeServices.ThemesEnabled and 
     (TrackBar1.Orientation = trHorizontal) then begin 
    TrackBar1.TickMarks := tmBoth; 
    TrackBar1.TickStyle := tsNone; 
    TrackBar1.ThumbLength := 38; 
    end; 
end; 

procedure TForm1.WMNotify(var Msg: TWMNotify); 
begin 
    if ThemeServices.ThemesEnabled and 
     (TrackBar1.Orientation = trHorizontal) then begin 

    if (Msg.IDCtrl = Longint(TrackBar1.Handle)) and 
     (Msg.NMHdr.code = NM_CUSTOMDRAW) and 
     (PNMCustomDraw(Msg.NMHdr).dwDrawStage = CDDS_ITEMPREPAINT) then begin 

     case PNMCustomDraw(Msg.NMHdr).dwItemSpec of 
     TBCD_THUMB: InflateRect(PNMCustomDraw(Msg.NMHdr).rc, -4, 0); 
     TBCD_CHANNEL: 
      with PNMCustomDraw(Msg.NMHdr).rc do begin 
      Top := Bottom div 2 + 2; 
      Bottom := Top + 5; 
      Inc(Left, 4); 
      Dec(Right, 4); 
      end; 
     end; 
    end; 
    end; 

    inherited; 
end; 
+1

+1. 나는이 옵션을 완전히 간과했다 (* 다소 당혹 스럽다). –

+0

@ Andreas - 고마워. 나는 또한이 문제에 대한 당신의 솔루션을 선택합니다. 나는 일반적으로 사용자 지정 그리기에 다소 불안해하며 예측할 수 없다는 것을 알게되었습니다. –

+1

@SertacAkyuz : 그렇습니다. MS가 (다시) 기본 스타일에 대해 마음을 바꿀 것이기 때문에 모든 새로운 Windows 버전에 대해 업데이트해야합니다. –

관련 문제