Вывод выделенного текста
procedure DrawTextOutline( const Canvas: TCanvas; const X, Y: Integer; const Text: string); var OldBkMode: Integer; // хранит предыдущий режим фона begin OldBkMode := SetBkMode(Canvas.Handle, TRANSPARENT); BeginPath(Canvas.Handle); Canvas.TextOut(X, Y, Text); EndPath(Canvas.Handle); StrokeAndFillPath(Canvas.Handle); SetBkMode(Canvas.Handle, OldBkMode); end;
Прежде всего мы устанавливаем фон в прозрачный режим так, чтобы прямоугольник ограничения текста не был заполнен текущей кистью холста.
Затем мы передаем текст как путь Windows (между вызовами API BeginPath и EndPath).
Следующий вызов StrokeAndFillPath выделяет путь, который мы только что создали текущим пером и заполняет его текущей кистью.
И наконец, восстанавливаем фоновый режим. Есть версия DrawTextOutline в Code Snippets Database
.
Пример
В этом примере мы отобразим текст Hello World!
шрифтом True Type и нарисуем его с темной синей пунктирной линией и заштрихованным фэйсом.
Запустите новое приложение VCL и создайте событие OnPaint для формы:
procedure TForm1.FormPaint(Sender: TObject); const cText = 'Hello World!'; begin Canvas.Font.Name := 'Comic Sans MS'; Canvas.Font.Style := [fsBold]; Canvas.Font.Size := 48; Canvas.Brush.Color := clSkyBlue; // $F0CAA6 Canvas.Brush.Style := bsDiagCross; Canvas.Pen.Color := clNavy; Canvas.Pen.Style := psDot; DrawTextOutline(Canvas, 0, 0, cText); end;
Это выглядит несколько уныло из-за цвета окна. Мы можем изменить это, нарисовав текст дважды.
Измените FormPaint как ниже:
procedure TForm1.FormPaint(Sender: TObject); const cText = 'Hello World!'; begin Canvas.Font.Name := 'Comic Sans MS'; Canvas.Font.Style := [fsBold]; Canvas.Font.Size := 48; // начало добавленного кода Canvas.Brush.Color := clWhite; Canvas.Pen.Style := psClear; DrawTextOutline(Canvas, 0, 0, cText); // конец добавленного кода Canvas.Brush.Color := clSkyBlue; // $F0CAA6 Canvas.Brush.Style := bsDiagCross; Canvas.Pen.Color := clNavy; Canvas.Pen.Style := psDot; DrawTextOutline(Canvas, 0, 0, cText); end;
Теперь, мы сначала рисуем текст без границы и белого фона перед рисованием текста пунктирным пером и синей штриховкой.
Автор: Peter Johnson
Комментарии