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

Как получить эффект тени для Hint

Delphi , Синтаксис , Hint подсказки



Автор: http://www.swissdelphicenter.ch

type
  TXPHintWindow = class(THintWindow)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure WMNCPaint(var msg: TMessage); message WM_NCPAINT;
  end;

function IsWinXP: Boolean;
begin
  Result := (Win32Platform = VER_PLATFORM_WIN32_NT) and
    (Win32MajorVersion >= 5) and (Win32MinorVersion >= 1);
end;

procedure TXPHintWindow.CreateParams(var Params: TCreateParams);
const
  CS_DROPSHADOW = $00020000;
begin
  inherited;
  if IsWinXP then
    Params.WindowClass.Style := Params.WindowClass.Style or CS_DROPSHADOW;
end;

procedure TXPHintWindow.WMNCPaint(var msg: TMessage);
var
  R: TRect;
  DC: HDC;
begin
  DC := GetWindowDC(Handle);
  try
    R := Rect(0, 0, Width, Height);
    DrawEdge(DC, R, EDGE_ETCHED, BF_RECT or BF_MONO);
  finally
    ReleaseDC(Handle, DC);
  end;
end;

initialization
  HintWindowClass := TXPHintWindow;
  Application.ShowHint := False;
  Application.ShowHint := True;
end.

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

Код, который вы опубликовали, - это класс Delphi, созданный для создания окна подсказки с эффектом тени. Главная цель этого кода - добавить визуальный эффект "тень" для подсказок на Windows XP и более поздних версиях.

Вот что он делает в деталях:

  1. Он определяет custom класс TXPHintWindow, который наследуется от стандартного класса THintWindow. Это позволяет вам.customize внешний вид окна подсказки.
  2. Процедура CreateParams переопределяется для добавления стиля тени (CS_DROPSHADOW) к классу окна, если операционная система - Windows XP или более поздняя.
  3. Процедура WMNCPaint обрабатывает отрисовку окна подсказки и рисует тень с помощью функции DrawEdge из GDI (Graphics Device Interface).
  4. В секции инициализации он настраивает свойство HintWindowClass для использования custom класса TXPHintWindow, а затем включает и отключает подсказки, чтобы продемонстрировать эффект.

Эффект тени достигается путем рисования прямоугольника с стилем отчечения в том же цвете, что и фон окна. Процедура WMNCPaint рисует этот прямоугольник вокруг окна подсказки, давая ему 3D-аппекей с мягким градиентом.

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

  • Вы можете добавить комментарии для объяснения цели каждого раздела или метода.
  • Используйте meaningful имена переменных вместо одиночных буквенных переменных, таких как 'R' и 'DC'.
  • Вместо вызова Application.ShowHint := False; followed by Application.ShowHint := True;, вы можете просто установить его один раз в секции инициализации.
  • Вы также можете добавить обработку ошибок для случаев, когда функции GDI могут неудачно выполниться.
  • Если вы хотите поддерживать более старые версии Windows, вам нужно проверять, является ли операционная система хотя бы Windows 2000 (который ввел DWM), и использовать другой метод рисования тени.

Вот пример модификации процедуры WMNCPaint:

procedure TXPHintWindow.WMNCPaint(var msg: TMessage);
var
  ShadowRect: TRect;
begin
  DC := GetWindowDC(Handle);
  try
    R := Rect(0, 0, Width, Height);
    DrawEdge(DC, R, EDGE_ETCHED, BF_RECT or BF_MONO);

    // Рассчитать прямоугольник тени
    ShadowRect.Left := R.Left - 2;
    ShadowRect.Top := R.Top - 2;
    ShadowRect.Right := R.Right + 2;
    ShadowRect.Bottom := R.Bottom + 2;

    // Нарисовать прямоугольник тени с более темным цветом
    FillRect(DC, ShadowRect, clBlack);
    DrawEdge(DC, ShadowRect, EDGE_ETCHED, BF_RECT or BF_MONO);
  finally
    ReleaseDC(Handle, DC);
  end;
end;

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

В статье описывается способ создания эффекта тени для компонента Hint в Delphi, используя класс TXPHintWindow и функцию IsWinXP.


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

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




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


:: Главная :: Hint подсказки ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:42:53/0.0055129528045654/1