2015-04-07 3 views
3

У меня есть следующий код (присвоенный DrawGrid1.OnDrawCell событию):Почему TDrawGrid.OnDrawCell рисует черный фон, когда Brush.Style является bsFDiagonal?

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, не повезло. Что я здесь пропустил?

enter image description here

пс: Я проверил этот код: Diagonal brush style gives me black area. Я не понял, в чем разница между вопросом и ответом (кроме прокомментированной строки), и этот код не работает для меня, как я уже упоминал, я уже пытался изменить свойства пера без каких-либо результатов. Все, что я хочу, это красный фон с голубыми диагональными линиями.

+0

У меня нет XE * и я не могу взглянуть на источники самостоятельно, но в более ранних версиях Delphi в 'TCanvas.CreateBrush()' была строка, которая устанавливает (неправильный) цвет фона для работы ошибка в Windows 95 - может быть, она все еще там? Он испортил цвет, но вы видите черный, потому что он также испортил альфа-значение. – mghie

ответ

1

решаемая, надо добавить SetBkColor() перед FillRect:

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

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

+0

Я думаю, 'SetBkMode (TRANSPARENT)' также работает, и вообще не касался фона. –

+0

Пробовал SetBkMode (TRANSPARENT), не работает для меня, фон все еще черный. – tcxbalage

 Смежные вопросы

  • Нет связанных вопросов^_^