Вывод неактивного текста
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
Комментарии