Как потянуть штриховки на TCanvas и указать цвет фона

Я пытаюсь сделать "пустой" фон для размещения изображения сверху. Не слишком трудно создать штриховки путем размещения TImage в форму и выполнения следующего:

image1.Canvas.brush.Style := bsDiagCross;
image1.canvas.brush.color := clWhatever;
image1.canvas.FillRect(image1.clientrect);

Это работает, и я получаю шаблон штриховки в clWhatever по черному фону. Но это - проблема. Это всегда черно, и я не могу найти способ указать цвет фона в случае, если я хочу что-то другое, чем черный.

Кто-либо знает, как сделать это?

5
задан Mason Wheeler 27 June 2010 в 23:17
поделиться

1 ответ

Цвет заштрихооженной кисти — это цвет переднего плана — цвет самого люка.

Цвет фона задается отдельно при использовании заштрихованных кистей и, насколько мне известно, не предоставляется как свойство TCanvas и, таким образом, требует использования функции Windows GDI API SetBkColor().

Например, чтобы нарисовать красную штриховку на белом фоне, добавьте вызов для установки цвета фона перед рисованием с помощью кисти холста:

image1.Canvas.brush.Style := bsDiagCross;
image1.canvas.brush.color := clRed;

SetBkColor(image1.Canvas.Handle, ColorToRGB(clWhite));
image1.canvas.FillRect(image1.clientrect);

[Обновление:] ПРИМЕЧАНИЕ: Похоже, что в Delphi 2010 (и, возможно, в некоторых более ранних версиях) вы должны вызывать SetBKColor() ПОСЛЕ установки свойств кисти. Внутренне, когда холст создает щетку, он вызывает SetBKColor(), который попирает любые явные вызовы SetBKColor(), сделанные до ссылки на Canvas.Brush. Время создания внутренней кисти холста, или внутреннее использование SetBkColor(), по-видимому, изменилось между Delphi 2006 (используется при тестировании исходной публикации) и Delphi 2010. Какой бы ни была причина, гораздо надежнее вызвать SetBKColor непосредственно перед его использованием.

9
ответ дан 14 December 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: