Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Рисовать на заголовочной полосе формы

Delphi , Программа и Интерфейс , Заголовок формы

Рисовать на заголовочной полосе формы

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
 You have to handle the WM_NCPAINT message. 
 Something like this (for custom text) Should be similar for bitmaps. 
}

 type
   TForm1 = class(TForm)
   private
     procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT;
   public
   end;

 var
   Form1: TForm1;

 implementation

 {$r *.dfm}

 procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);
 var
   ACanvas: TCanvas;
 begin
   inherited;
   ACanvas := TCanvas.Create;
   try
     ACanvas.Handle := GetWindowDC(Form1.Handle);
     with ACanvas do
      begin
       Brush.Color := clActiveCaption;
       Font.Name := 'Tahoma';
       Font.Size := 8;
       Font.Color := clred;
       Font.Style := [fsItalic, fsBold];
       TextOut(GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CXBORDER),
         Round((GetSystemMetrics(SM_CYCAPTION) - Abs(Font.Height)) / 2) + 1, ' Some Text');
     end;
   finally
     ReleaseDC(Form1.Handle, ACanvas.Handle);
     ACanvas.Free;
   end;
 end;

Перевод контента на русский язык:

Код, предоставленный ниже, это приложение Delphi, которое обрабатывает сообщение WM_ NCPAINT для рисования текста в области клиента (NC) формы, включая заголовок и рамки.

Вот разбивка того, что код делает:

  1. Он определяет класс формы TForm1 с приватным методом WMNCPaint, который обрабатывает сообщение WM_ NCPAINT.
  2. Метод WMNCPaint вызывается, когда область клиента требует перерисовки, обычно из-за изменений размера или положения формы.
  3. Создается временный объект TCanvas ACanvas и присваивается DC (Device Context) формы с помощью GetWindowDC.
  4. Затем ACanvas используется для рисования текста в области клиента. Текст настроен следующими свойствами:
    • Цвет кисти: активный цвет заголовка (clActiveCaption)
    • Шрифт: шрифт Tahoma, размер 8, курсив и жирный (fsItalic, fsBold)
    • Цвет текста: красный (clRed)
    • Позиция текста: верхний левый угол области клиента, рассчитанный с помощью системных метрик (GetSystemMetrics).
  5. Текст рисуется методом TextOut.
  6. Наконец, DC освобождается, а объект ACanvas освобождается.

Некоторые предложения по улучшению:

  1. Вместо создания временного объекта TCanvas, можно использовать свойство формы Canvas для рисования прямо на области клиента. Это бы устранило необходимость в GetWindowDC и ReleaseDC.
  2. Рассмотрите использование built-in поддержки Delphi для рисования текста на формах, например, свойства Caption или метод Paint.
  3. Если вам нужно больше контроля над процессом рисования, рассмотрите подклассирование объекта Canvas формы и переопределение его методов.

Вот обновленная версия кода, которая использует свойство формы Canvas:

type
  TForm1 = class(TForm)
    private
      procedure WMNCPaint(var Msg: TWMNCPaint); message WM_ NCPAINT;
  public
  end;

var
  Form1: TForm1;

implementation

{$r *.dfm}

procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);
begin
  inherited;
  Canvas.Brush.Color := clActiveCaption;
  Canvas.Font.Name := 'Tahoma';
  Canvas.Font.Size := 8;
  Canvas.Font.Color := clRed;
  Canvas.Font.Style := [fsItalic, fsBold];
  Canvas.TextOut(GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CXBORDER),
                 Round((GetSystemMetrics(SM_CYCAPTION) - Abs(Canvas.Font.Height)) / 2) + 1, 'Some Text');
end;

Обратите внимание, что этот код предполагает, что вы хотите рисовать текст на области клиента формы. Если вам нужно рисовать на другой области, вам придется изменить координаты соответствующим образом.

Рисование на заголовочной полосе формы в Delphi происходит за счет обработки сообщения WM_NCPAINT, при этом используются класс TCanvas и метод TextOut.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Заголовок формы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 19:58:13/0.0037319660186768/0