Внешний вид сайта:

Вывод неактивного текста

Вы можете рисовать неактивный текст, подобно тому, какой Вы видите на Label, когда устанавливаете свойство Enabled в False. Следующая функция рисует неактивный текст на холсте, используя текущий шрифт холста:
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

Комментарии

Нет комментариев. Ваш будет первым!