Я использую DrawThemeTextEx для рисования текста. Я пытаюсь нарисовать его определенным цветом, используя член crText
COLORREF структуры DTTOPS
:
procedure DrawThemeText(dc: HDC; text: WideString; font: TFont; pt: TPoint; foreColor: COLORREF);
var
R: TRect;
dttOpts: TDttOpts;
hOldFont: HFONT;
oldColor: COLORREF;
begin
foreColor := $FF00FF00; //bright lime green
font.
R := Rect(pt.x, pt.y, $7fffffff, $7fffffff);
ZeroMemory(@dttOpts, SizeOf(TDTTOpts));
dttOpts.dwSize := SizeOf(TDTTOpts);
dttOpts.iGlowSize := 1;
dttOpts.crText := foreColor;
dttOpts.dwFlags := DTT_GLOWSIZE or DTT_TEXTCOLOR;
hOldFont := SelectObject(dc, font.Handle);
oldColor := SetTextColor(dc, foreColor);
try
hr := DrawThemeTextEx(ThemeServices.Theme[teWindow], DC, WP_CAPTION, CS_ACTIVE,
PWideChar(Text), Length(Text),
DT_LEFT or DT_TOP or DT_SINGLELINE or DT_NOPREFIX, R, dttOpts);
finally
SetTextColor(dc, oldColor);
SelectObject(dc, hOldFont);
end;
К сожалению, цвет текста всегда получается черным, а не ярким лаймово-зеленым, который задает мой код:
Я могу изменить шрифт, который используется, выбрав новый шрифт в контексте устройства, т.е.:
SelectObject(dc, font.Handle);
но ни один из этих шрифтов не используется.
SelectObject(dc, font.Handle);
но ни SetTextColor
, ни установка опций crText
и DTT_TEXTCOLOR
структуры DTTOPS
не изменяют используемый цвет текста.
Смущает то, что структура DTTOPS позволяет мне указать цвет:
typedef struct _DTTOPTS { DWORD dwSize; // размер структуры DWORD dwFlags; // какие опции были указаны COLORREF crText; // цвет, используемый для заливки текста COLORREF crBorder; // цвет, используемый для обводки текста COLORREF crShadow; // цвет, используемый для тени текста ...
вместе с флагом DTT_TEXTCOLOR, чтобы указать, что я использую этот член:
#define DTT_TEXTCOLOR (1UL
То, чего я хочу добиться задокументировано , но это не работает правильно. Очевидно, я делаю что-то не так.
Как указать цвет текста при рисовании текста с помощью DrawThemeTextEx?