Delphi TextRect в Windows GDI - PullRequest
       37

Delphi TextRect в Windows GDI

3 голосов
/ 28 августа 2011

Есть ли аналог Delphi TextRect в GDI?Я посмотрел на DrawText, DrawTextEx, но не нашел то, что мне было нужно.Мне нужно нарисовать текст в процентах от индикатора выполнения, который разделен на две цветные части, например, левая часть текста черная, а правая белая.Как обычно во всех индикаторах выполнения.

enter image description here

Спасибо за ваши ответы!

1 Ответ

9 голосов
/ 28 августа 2011

Вы ищете функцию 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;

Но я думаю, что вы действительно хотите сделать, это нарисовать «НЕ цветной текст» :

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;

Снимок экрана http://privat.rejbrand.se/nottext.png

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...