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

Создание плоской кнопки без рамки в Delphi 7 с использованием базовых компонентов и DevExpress

Delphi , Компоненты и Классы , Кнопки

Создание плоской кнопки без рамки в Delphi 7

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

Подходы, которые были испробованы:

  • TButton и TSpeedButton имеют табуляцию и фокус, но не поддерживают отсутствие рамки.
  • TLabel и TPanel имеют возможность отсутствия рамки, но не поддерживают табуляцию и фокус.
  • TcxButton и TcxLabel из DevExpress также имеют ограничения по функционалу.

Альтернативные методы:

  • Использование перехвата (interposing) класса TButton для изменения его стиля на BS_OWNERDRAW, что позволяет полностью контролировать внешний вид кнопки.

Решение проблемы:

Для создания плоской кнопки без рамки можно использовать переопределение стандартного компонента TButton с помощьюowner draw. Ниже приведен пример кода, который изменяет стандартный вид кнопки, делая её плоской и без рамки.

type
  TButton = class(stdctrls.TButton)
  protected
    procedure SetButtonStyle(ADefault: Boolean); override;
    procedure CNCtlcolorbtn(var Message: TMessage); message CN_CTLCOLORBTN;
    procedure CNDrawitem(var Message: TWMDrawItem); message CN_DRAWITEM;
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
  end;

procedure TButton.SetButtonStyle(ADefault: Boolean);
begin
  if HandleAllocated then
    Perform(BM_SETSTYLE, BS_OWNERDRAW, 1);
end;

procedure TButton.CNCtlcolorbtn(var Message: TMessage);
begin
  DWORD(Message.Result) := CreateSolidBrush($79FF); // Цвет фона кнопки
end;

procedure TButton.CNDrawitem(var Message: TWMDrawItem);
var
  DC: HDC;
  SaveObj: HGDIOBJ;
  R: TRect;
begin
  R := ClientRect;
  DC := Message.DrawItemStruct.hDC;
  SaveObj := SelectObject(DC, Font.Handle);
  SetBkMode(DC, TRANSPARENT);
  DrawText(DC, PChar(Caption), -1, R, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
  SelectObject(DC, SaveObj);
  Message.Result := 1;
end;

procedure TButton.WMPaint(var Message: TWMPaint);
var
  DC: HDC;
  R: TRect;
begin
  inherited;
  if GetFocus = Handle then begin
    DC := GetDC(Handle);
    SelectObject(DC, GetStockObject(DC_BRUSH));
    SetDCBrushColor(DC, $FF); // Цвет границы кнопки при фокусе
    R := ClientRect;
    InflateRect(R, -2, -2);
    FrameRect(DC, R, DC_BRUSH);
    ReleaseDC(Handle, DC);
  end;
end;

Этот код должен быть размещен в единице, которая включается в проект после stdctrls, чтобы переопределение класса TButton сработало корректно.

Важные замечания:

  • Пользователь отметил, что у него есть небольшая команда разработчиков, и распространение обновленных компонентов может быть заметным усилием.
  • В комментариях обсуждается возможность использования стиля bsCommandLink для создания кнопки, похожей на CommandLink Button, который был введен в Windows Vista.
  • Также обсуждается возможность создания собственного компонента, который можно будет использовать многократно, вместо создания нового компонента каждый раз при необходимости.

Заключение:

Создание плоской кнопки без рамки в Delphi 7 возможно с использованием переопределения стандартного компонента TButton и owner draw. Это позволит настроить внешний вид кнопки в дизайневре, без необходимости изменения внешнего вида через LookAndFeel или создания кастомной темы, что соответствует требованиям пользователя.

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

Создание плоской кнопки без рамки в Delphi 7 путем переопределения стандартного компонента TButton с использованием owner draw.


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

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




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


:: Главная :: Кнопки ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 23:35:36/0.011705160140991/0