Как изменить цвет кнопки в delphi

Как изменить цвет кнопки в delphi

Как изменить цвет TButton?

Содержание материала

Вы не можете изменить цвет стандартного TButton, так как кнопки управления окнами всегда рисует себя с

цвет кнопки определяется в панели управления. Но можно создать создать новый компонент TButton и ручка

и рисунок поведения есть.

You cannot change the color of a standard TButton,

since the windows button control always paints itself with the

button color defined in the control panel.

But you can derive derive a new component from TButton and handle

the and drawing behaviour there.

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons, ExtCtrls;

TDrawButtonEvent = procedure (Control: TWinControl;

Rect: TRect; State: TOwnerDrawState) of object ;

TColorButton = class (TButton)

procedure CreateParams( var Params: TCreateParams); override ;

procedure SetButtonStyle(ADefault: Boolean); override ;

procedure CMEnabledChanged( var Message : TMessage); message CM_ENABLEDCHANGED;

procedure CMFontChanged( var Message : TMessage); message CM_FONTCHANGED;

procedure CNMeasureItem( var Message : TWMMeasureItem); message CN_MEASUREITEM;

procedure CNDrawItem( var Message : TWMDrawItem); message CN_DRAWITEM;

procedure WMLButtonDblClk( var Message : TWMLButtonDblClk); message WM_LBUTTONDBLCLK;

procedure DrawButton(Rect: TRect; State: UINT);

constructor Create(AOwner: TComponent); override ;

destructor Destroy; override ;

property Canvas: TCanvas read FCanvas;

property OnDrawButton: TDrawButtonEvent read FOnDrawButton write FOnDrawButton;

RegisterComponents( ‘Samples’ , [TColorButton]);

constructor TColorButton.Create(AOwner: TComponent);

procedure TColorButton.CreateParams( var Params: TCreateParams);

with Params do Style := Style or BS_OWNERDRAW;

procedure TColorButton.SetButtonStyle(ADefault: Boolean);

if ADefault <> IsFocused then

procedure TColorButton.CNMeasureItem( var Message : TWMMeasureItem);

with Message .MeasureItemStruct^ do

procedure TColorButton.CNDrawItem( var Message : TWMDrawItem);

with Message .DrawItemStruct^ do

Message .Result := 1 ;

procedure TColorButton.CMEnabledChanged( var Message : TMessage);

procedure TColorButton.CMFontChanged( var Message : TMessage);

procedure TColorButton.WMLButtonDblClk( var Message : TWMLButtonDblClk);

Perform(WM_LBUTTONDOWN, Message .Keys, Longint( Message .Pos));

procedure TColorButton.DrawButton(Rect: TRect; State: UINT);

Flags, OldMode: Longint;

Читайте также:  Какие процессоры поддерживают avx

IsDown, IsDefault, IsDisabled: Boolean;

Flags := DFCS_BUTTONPUSH or DFCS_ADJUSTRECT;

IsDown := State and ODS_SELECTED <> 0 ;

IsDefault := State and ODS_FOCUS <> 0 ;

IsDisabled := State and ODS_DISABLED <> 0 ;

if IsDown then Flags := Flags or DFCS_PUSHED;

if IsDisabled then Flags := Flags or DFCS_INACTIVE;

if IsFocused or IsDefault then

FCanvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);

InflateRect(Rect, — 1 , — 1 );

FCanvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);

InflateRect(Rect, — 1 , — 1 );

DrawFrameControl(FCanvas.Handle, Rect, DFC_BUTTON, Flags);

if IsDown then OffsetRect(Rect, 1 , 1 );

OldMode := SetBkMode(FCanvas.Handle, TRANSPARENT);

if IsDisabled then

DrawState(FCanvas.Handle, FCanvas.Brush.Handle, nil , Integer(Caption), 0 ,

((Rect.Right — Rect.Left) — FCanvas.TextWidth(Caption)) div 2 ,

((Rect.Bottom — Rect.Top) — FCanvas.TextHeight(Caption)) div 2 ,

0 , 0 , DST_TEXT or DSS_DISABLED)

DrawText(FCanvas.Handle, PChar(Caption), — 1 , Rect,

DT_SINGLELINE or DT_CENTER or DT_VCENTER);

if Assigned(FOnDrawButton) then

FOnDrawButton(Self, Rect, TOwnerDrawState(LongRec(State).Lo));

if IsFocused and IsDefault then

InflateRect(Rect, — 4 , — 4 );

В книгах Калверта, Свана и других авторов можно найти похожий текст. Смысл текста – "Изменить цвет кнопок Button, BitBtn нельзя, т.к. их рисует WINDOWS". Если нельзя, но ОЧЕНЬ НУЖНО, то можно.

Небольшой компонент ColorBtn, дает возможность использовать в кнопках цвет. Кроме того, представлено новое свойство — Frame3D, позволяющее получить более реалистичный вид нажатой кнопки. В отличие от API, при изменении значения свойства Frame3D, не требуется переоткрытие компонента.

Примечание. Кнопку по-прежнему рисует WINDOWS, а раскрашивает ее ColorBtn. Код компонента на 90% повторяет код BitBtn, ничего необычного здесь нет. Чаще заглядывайте в VCL — можно найти много интересного. На рисунке представлены ColorButton и ColorBitBtn.

  • Назад
  • Вперёд >>

Добавить комментарий

Не использовать не нормативную лексику.

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

Читайте также:  X360ce не найден указанный модуль

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!

Автор Президент Мадагаскара задал вопрос в разделе Другие языки и технологии

Delphi 7!? Как изменить цвет кнопки Button? В ее свойствах не параметра Color!? и получил лучший ответ

Ответ от Анас Юсупов[гуру]
Перепиши класс, добавь свойство цвет и используй его в onPaint

Чудеса какие-то. Скорее всего, что-то у вас поломано.
подробнее.

Ну, TColorDialog говорит сам за себя. С помощью этого компонента
подробнее.

Я просто хочу, чтобы изменить цвет кнопки после того, как я нажимаю его.

Должен ли я использовать «стили», чтобы сделать это или .

Вы можете изменить свойство button.StyleLookup изменить стиль (цвет).

Вам нужно добавить новый стиль к Stylebook.

  1. Выберите «Изменить свой стиль . » в меню правой кнопки мыши с кнопки.
  2. Измените свойство Fill.Color из элементов TRectangle под фоном: TRectangle
  3. Применить и закрыть Stylebook
  4. Ясно button.stylelookup
  5. Изменение button.stylelookup в вашем ButtonClick к новому создавать стиль, когда вы не изменяли имя его Button1Style1

Использование стилей

Альтернатива созданию другого стиля и переключение на этот новый стиль будет создавать собственный стиль для кнопки и изменений цвета в этом стиле во время выполнения.

  1. Щелкните правой кнопкой мыши на кнопку и выберите «Изменить свой стиль . » в главном меню.
  2. Нажмите кнопку Применить и Закрыть в редакторе стилей.

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

Теперь введите в вашем случае OnClick для изменения цвета во время выполнения:

Примечание: Добавить FMX.Objects в вашей статье изез, если вы уже не имеете его. Вот где TRectangle есть.

Читайте также:  Выбранный процесс не найден artmoney

Но ждать.

Вы заметите, что цвет кнопки изменяется обратно по умолчанию, когда мышь оставить или входит кнопку. Это связано с анимацией. Если установить свойство StyleName для обоего элементов TColorAnimation стиля в редакторе стилей для пользовательского стиля, вы также можете установить цвет на них. В моем примере я назвал TColorAnimations coloranimation1 и coloranimation2.

Ссылка на основную публикацию
Как запаролить контакты на айфоне
Читайте можно ли поставить пароль на приложение в Айфоне. Какая версия iOs это позволяет, а какие нет. Все способы защитить...
Как зайти в дневник ру без госуслуг
1. Как получить доступ к электронному дневнику? Шаг 1. Зарегистрируйтесь на портале mos.ru Чтобы пользоваться услугой «Электронный дневник школьника», вы...
Как запаролить контакты на айфоне
Читайте можно ли поставить пароль на приложение в Айфоне. Какая версия iOs это позволяет, а какие нет. Все способы защитить...
Как изменить цвет кнопки в delphi
Как изменить цвет TButton? Содержание материала Вы не можете изменить цвет стандартного TButton, так как кнопки управления окнами всегда рисует...
Adblock detector