2011-08-28 5 views
3

GDI에 Delphi TextRect의 아날로그가 있습니까? 나는 DrawText, DrawTextEx을 보았지만 내가 필요한 것을 찾지 못했습니다. 진행률 막대의 텍스트를 두 가지 색상 부분으로 나누어 표시해야합니다 (예 : 텍스트의 왼쪽 부분이 검은 색이고 오른쪽이 흰색입니다. 그래서 일반적으로 모든 진행률 표시 줄에. 귀하의 답변Windows GDI의 Delphi TextRect

enter image description here

감사합니다!

+0

GDI에서 사용할 수있는'TextOut' 및 'DrawText' ('DrawTextEx')입니다. 여기에는 Delphi 함수보다 * 더 많은 * 기능이 포함되어 있습니다. 어떤 기능을 정확히 찾고 있습니까? 'TCanvas' 코드는 어떻게 생겼습니까? 왜 당신은'TCanvas'를 포기할 필요가 있다고 느끼십니까? –

+0

하지만 TextRect (텍스트의 일부를 자르고 그릴 수없는 부분)의 주요 아이디어가 필요합니다. 나는 DrawText/Ex에서 그것을 보지 못했다. 게시 된 그림을 보시고 TGauge (또는 다른 진행 막대)와 같은 텍스트를 그려야합니다. – maxfax

답변

9

ExtTextOut 기능을 찾고 있습니다.

샘플 :

procedure TForm4.FormPaint(Sender: TObject); 
const 
    S = 'This is a sample text'; 
begin 
    ExtTextOut(Canvas.Handle, 10, 10, ETO_CLIPPED, 
    Rect(40, 10, 100, 100), PChar(S), length(S), nil)  
end; 

하지만 당신이 정말로 무엇을 원하는, 'NOT-coloured text'을 그릴 수 있다고 생각 :

procedure DrawTextNOT(const hDC: HDC; const Font: TFont; const Text: string; const X, Y: integer); 
begin 
    with TBitmap.Create do 
    try 
     Canvas.Font.Assign(Font); 
     with Canvas.TextExtent(Text) do 
     SetSize(cx, cy); 
     Canvas.Brush.Color := clBlack; 
     Canvas.FillRect(Rect(0, 0, Width, Height)); 
     Canvas.Font.Color := clWhite; 
     Canvas.TextOut(0, 0, Text); 
     BitBlt(hDC, X, Y, Width, Height, Canvas.Handle, 0, 0, SRCINVERT); 
    finally 
     Free; 
    end; 
end; 

procedure TForm4.FormPaint(Sender: TObject); 
const 
    S = 'This is a sample text'; 
var 
    ext: TSize; 
begin 
    Canvas.Brush.Color := clBlack; 
    Canvas.FillRect(Rect(0, 0, Width div 2, Height)); 
    Canvas.Brush.Color := clWhite; 
    Canvas.FillRect(Rect(Width div 2, 0, Width, Height)); 
    ext := Canvas.TextExtent(S); 

    DrawTextNOT(Canvas.Handle, Canvas.Font, S, (Width - ext.cx) div 2, 
    (Height - ext.cy) div 2); 
end; 

Screenshot http://privat.rejbrand.se/nottext.png

+0

@maxfax : OK, * now * (결코 늦지 않는 것이 더 좋을 때가 있습니다 - 때로는 조금 느립니다.)'TextRect'에서 누락 된 부분을 봅니다. 당신이 찾고있는 WinAPI 함수는'ExtTextOut'입니다. 그래도 어쨌든 하나의 NOT- 컬러 텍스트를 그리는 것이 더 간단하지 않다면 궁금합니다. –

+0

대단히 감사합니다 !!! 정확히 내가 필요로하는 것! – maxfax