Как нарисовать штриховки на TCanvas и указать цвет фона - PullRequest
5 голосов
/ 28 июня 2010

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

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

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

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

1 Ответ

9 голосов
/ 28 июня 2010

Цвет заштрихованной кисти - передний план , цвет - цвет самой штриховки.

Цвет фона задается отдельно при использовании заштрихованных кистей и, насколько я знаю, нет.не раскрывается как свойство 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);

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

...