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

Переход с Toolbar2000 на стандартную панель инструментов в Delphi: настройка и оптимизация визуального оформления

Delphi , Графика и Игры , Цвета и Палитра

При работе с компонентами в Delphi часто возникает необходимость настройки их внешнего вида. В частности, при переходе с использования Toolbar2000 на стандартную панель инструментов в Delphi XE2 может возникнуть проблема с изменением внешнего вида кнопок панели, особенно если нужно убрать бордюр вокруг кнопок и сохранить эффект плавного появления.

Проблема

Разработчик столкнулся с необходимостью использования стандартной панели инструментов вместо Toolbar2000, так как для Delphi XE2 нет обновленной версии этого компонента, и он использует ассемблерный код, с которым разработчик не хотел бы работать. При этом ему нравится эффект плавного появления кнопок, который есть в стандартной панели инструментов. Однако, стандартные кнопки получают "голубоватое" оформление, которое разработчику не нравится. Он знает, как изменить цвет кнопок, но хочет убрать бордюр вокруг кнопок, не меняя цвет.

Решение

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

Пример кода

procedure TMyForm.Toolbar1CustomDrawButton(Sender: TToolBar; Button: TToolButton;
    State: TCustomDrawState; Stage: TCustomDrawStage;
    var Flags: TTBCustomDrawFlags; var DefaultDraw: Boolean);
begin
  Flags := [tbNoEdges, tbNoOffset];
  DefaultDraw := True;
end;

Однако, это решение работает не для всех версий Windows, включая Vista и 7, где бордюр вокруг кнопок все равно отображается. В таких случаях необходимо использовать обработчик WM_NOTIFY для родительского окна панели инструментов или же подклассирование панели.

Пример подклассирования

type
  TForm1 = class(TForm)
  private
    FSaveToolbarWndProc: TWndMethod;
    procedure ToolbarWndProc(var Msg: TMessage);
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // ...
  FSaveToolbarWndProc := ToolBar1.WindowProc;
  ToolBar1.WindowProc := ToolbarWndProc;
end;

procedure TForm1.ToolbarWndProc(var Msg: TMessage);
begin
  FSaveToolbarWndProc(Msg);
  if (Msg.Msg = CN_NOTIFY) and
      (TWMNotify(Msg).NMHdr.hwndFrom = ToolBar1.Handle) and
      (TWMNotify(Msg).NMHdr.code = NM_CUSTOMDRAW) then begin
    case PNMTBCustomDraw(TWMNotify(Msg).NMHdr)^.nmcd.dwDrawStage of
      CDDS_PREPAINT: Msg.Result := CDRF_NOTIFYITEMDRAW;
      CDDS_ITEMPREPAINT: Msg.Result := TBCDRF_NOEDGES or TBCDRF_NOBACKGROUND;
    end;
  end;
end;

(Не забудьте, что стиль рисования панели должен быть установлен в dsNormal.)

Заключение

Используя предложенные методы, можно убрать бордюр вокруг кнопок на панели инструментов в Delphi, сохранив при этом плавный эффект появления кнопок. Важно учитывать версию операционной системы, так как для Windows Vista и 7 требуется использование дополнительных методов настройки.

Создано по материалам из источника по ссылке.

Разработчик в Delphi переходит с использования `Toolbar2000` на стандартную панель инструментов и хочет изменить внешний вид кнопок, убрав бордюр, но сохранив эффект плавного появления.


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

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




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


:: Главная :: Цвета и Палитра ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-03-14 11:49:57/0.0034739971160889/0