Недавно я столкнулся с ошибкой в VCL, когда если бы я рисовал элемент ListItem с изображением, тогда холст списка больше не учитывал бы цвет шрифта, размер шрифта или изменения шрифта Sender.Canvas.Font
:
Sender.Canvas.Font.Color := clHighlightText;
Sender.Canvas.Font.Size := 14;
Sender.Canvas.Font.Name := 'Consolas';
... никто не будет работать. Это перестало бы работать, только если я впервые нарисовал на холсте, используя:
imageList.Draw(Sender.Canvas, ....);
Если я удалил imageList.Draw
, все было в порядке.
Я был вынужден установить шрифт и цвета, используя GDI напрямую:
savedDC := SaveDC(Sender.Canvas.Handle);
try
SetTextColor(Sender.Canvas.Handle, clHighlightText); //don't use clWhite, use the correct color
newfont := TFont.Create;
try
newFont.Assign(Sender.Canvas.Font);
newFont.Name := 'Consolas';
newfont.Size := 14;
SelectObject(Sender.Canvas.Handle, newFont.Handle);
szText = 'Hello, world!';
TextOut(Sender.Canvas.Handle, 0, 0, PChar(szText), Length(szText));
finally
newFont.Free;
end;
finally
RestoreDC(Sender.Canvas.Handle, savedDC);
end;
Примечание : любой код публикуется в открытом доступе. Указание авторства не требуется.