Вывод неактивного текста
function DrawDisabledText(
const Canvas: TCanvas; const X, Y: Integer;
const Text: string): Boolean;
begin
Result := DrawState(
Canvas.Handle, // дескриптор устройства для рисования
0, // кисть (не обязательно)
nil, // функция вывода (не обязательно)
Integer(PChar(Text)), // текст для вывода
Length(Text), // длина текста
X, Y, // левая верхняя координата текста
0, 0, // размер текста (не обязательно)
DST_TEXT or DSS_DISABLED // тип текста и состояние
);
end;
Флаг DST_TEXT сообщает API отображать текст, а DSS_DISABLED, что рисовать нужно неактивный текст.
Если текст содержит символы ускорителей (т.е. использует символы &, чтобы следующий символ отображать подчеркнутым), то используйте флаг DST_PREFIXTEXT вместо DST_TEXT.
Есть версия DrawDisabledText, которая может произвольно обрабатывать символы ускорителей в Code Snippets Database.
Пример
В этом примере мы отобразим текст Hello World! заданным по умолчанию шрифтом в обоих состояниях: обычном (используя Canvas.TextOut) и неактивном (используя DrawDisabledText).
Начните новое приложение VCL и создайте событие OnPaint для формы:
procedure TForm1.FormPaint(Sender: TObject); const cText = 'Hello World!'; begin Canvas.TextOut(8, 8, cText); DrawDisabledText(Canvas, 8, 32, cText); end;
Если Вы хотите использовать различные шрифты, установите свойство шрифта холста как требуется перед вызовом DrawDisabledText.
Например, можно изменить вышеупомянутый код, чтобы использовать 14pt Arial Bold, перепишите метод FormPaint:
procedure TForm1.FormPaint(Sender: TObject); const cText = 'Hello World!'; begin Canvas.Font.Name := 'Arial'; Canvas.Font.Size := 14; Canvas.Font.Style := [fsBold]; Canvas.TextOut(8, 8, cText); DrawDisabledText(Canvas, 8, 32, cText); end;
Автор: Peter Johnson
Комментарии