2010-06-27 3 views
4

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

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

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

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

ответ

8

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

Цвет фона устанавливается отдельно при использовании вылупились кисти и, насколько я знаю, не подвергается как имущество 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 непосредственно перед его использованием.

+0

Просто протестирован на D2010 под Windows 7, и он не работает. Я все еще получаю черный фон. –

+0

Ну, это интересно. Если вы это сделаете, как только это не сработает, но во второй раз. –

+0

На Delphi 2010 вам кажется, вам нужно установить цвет фона непосредственно перед использованием кисти. Похоже, что изменение кисти влияет на цвет фона в 2010 году (ранее опубликовано решение/отзыв было сделано в Delphi 2006). Я отредактирую код соответствующим образом. – Deltics