Почему TDrawGrid.OnDrawCell рисует черный фон, если Brush.Style имеет значение bsFDiagonal?

У меня есть следующий код (присвоенный событию DrawGrid1.OnDrawCell):

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  DrawGrid1.Canvas.Brush.Style:= bsFDiagonal;
  DrawGrid1.Canvas.Brush.Color:= clSkyBlue;
  DrawGrid1.Canvas.FillRect(Rect);
end;

Он всегда рисует черный фон, даже если для свойства DrawGrid1.Color задано значение clRed. Я также пытался изменить свойства Pen и Font, но безуспешно. Что я здесь пропустил?

введите описание изображения здесь

ps: я проверил этот код: Стиль диагональной кисти дает мне черную область. Мне не удалось увидеть, в чем разница между вопросом и ответом (кроме закомментированной строки), и этот код не работает для меня, как я уже упоминал, я уже пытался изменить свойства Pen без какого-либо результата. Все, что мне нужно, это красный фон с голубыми диагональными линиями.


person tcxbalage    schedule 07.04.2015    source источник
comment
У меня нет XE *, и я не могу посмотреть исходники, но в более ранних версиях Delphi была строка в TCanvas.CreateBrush(), которая устанавливает (неправильный) цвет фона для обхода ошибки в Windows 95 - возможно, это все еще там? Это портит цвет, но вы видите черный, потому что он также искажает альфа-значение.   -  person mghie    schedule 12.04.2015


Ответы (1)


Решено, нужно добавить SetBKColor () перед FillRect:

DrawGrid1.Canvas.Brush.Style:= bsFDiagonal;
DrawGrid1.Canvas.Brush.Color:= clSkyBlue;
SetBkColor(DrawGrid1.Canvas.Handle, ColorToRGB(clRed));
DrawGrid1.Canvas.FillRect(Rect);    

Я до сих пор не знаю почему, но это работает.

person tcxbalage    schedule 07.04.2015
comment
Думаю, SetBkMode(TRANSPARENT) тоже работает, а фон вообще не трогает. - person Uli Gerhardt; 07.04.2015
comment
Пробовал SetBkMode (ПРОЗРАЧНЫЙ), у меня не работает, фон все еще черный. - person tcxbalage; 07.04.2015