Меню

Как изменить цвет кнопки дельфи



Как изменить цвет кнопки дельфи

Казалось бы — что может быть проще, чем изменить цвет кнопки типа TButton в Delphi?
Ан нет. Не так все просто. Бьюсь уже второй час.
Подскажите пожалуйста как можно изменить цвет кнопки, не использую сторонних компонент?

Всем заранее спасибо!


ЮЮ © ( 2005-01-13 12:41 ) [1]

Изменить оформление Windows. TButton в Delphi — это родная кнопка Windos — а они во всей системе одного цвета.


Neznaika © ( 2005-01-13 12:42 ) [2]

TButton не изменишь!
Используй BitBtn или другие компоненты.


Vetal © ( 2005-01-13 12:54 ) [3]

ЮЮ> Изменить оформление Windows не катит. Нужно изменить цвет только одной кнопки в приложении..

Neznaika>> Хорошо, а как можно изменить цвет кнопки, если она TBitBtn?


TButton © ( 2005-01-13 12:55 ) [4]

Можно и у TButton:
MakeObjectInstance + FreeObjectInstance (или SetWindowLong), а также сообщения WM_ERASEBKGND/WM_PAINT

PS. ИМХО не стоит геморроя, проще использовать TBitBtn


TUser © ( 2005-01-13 13:15 ) [6]


> TButton в Delphi — это родная кнопка Windos — а они во всей
> системе одного цвета

И тем не менее есть компоненты, которые изменяют стиль оформления программы, в т.ч. и цвет TButton»ов.


Vetal © ( 2005-01-13 13:23 ) [7]

Так а как все-таки изменить цвет TBitBtn?


Neznaika © ( 2005-01-13 13:24 ) [8]

>>Vetal © (13.01.05 12:54) [3]

Наложить картинку однотонную 😉


Vetal © ( 2005-01-13 13:31 ) [9]

Через свойство Glyph что ли?
Так по краям будет серенькое все.

Vetal по-моему там все это регулируется, сейчас уже не помню как но у меня это получалось.


WhiteGuy © ( 2005-01-13 13:42 ) [11]

Vetal,зайди на torry.net — там есть такие компоненты!! типa RbControls[RbButton]


Vetal © ( 2005-01-13 13:53 ) [12]

Короче, сделал TPanel, заполнял его цвет. А по клину менял стиль с Uppered на Lowered и наоборот.

Источник

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

Как изменить цвет 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;

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.

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

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

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

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

Источник

Изменить цвет кнопки

При нажатии на radiobutton3 цвет у label становится зеленым, если выбраны другие кнопки, цвет красный
При нажатии на radiobutton3 цвет у label становится зеленым, еси выбраны другие кнопки, цвет.

Создайте кнопки для выбора двух цветов и кнопку Старт. После нажатия кнопки Старт надпись должна мигать выбранными цвет
Создайте кнопки для выбора двух цветов и кнопку Старт. После нажатия кнопки Старт надпись должна.

Изменить цвет кнопки на цвет панели, на которую кликаешь
Дано: две панели разного цвета и одна кнопка. Нужно, чтобы цвет кнопки менялся при нажатии на одну.

таким образом можно изменить текст на кнопке, а цвет самой кнопки не меняется.

Читайте также:  Что нужно есть чтобы сменить цвет глаз

Добавлено через 1 минуту
эту задачу я решила с использованием панели.

Где-то уже помойму было тут, компонент-кнопка меняющая цвет

Уважаемые, кнопка должна быть кнопкой.
Это не та задача, для решения которой нужно использовать панель.
Решением данной задачи может быть:
1.Использовать сторонние компоненты с кнопками, где можно изменять цвет кнопки (коих много).
2.Написать свою кнопку на базе стандартной.
3.Использовать вариант с канвой стандартной кнопки (предложенный мной вариант).
4.Использование панели или еще чего, что изначально не является кнопкой, как кнопки (несерьезный вариант).

Считаю самым оптимальмым по трудозатратам — вариант 3.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Изменить цвет кнопки (button) по нажатию кнопки
Здравствуйте, подскажите, пожалуйста, как сделать что когда нажимаешь на копку меняется цвет.

Изменить цвет кнопки
Подскажите пожалуйста, как программно можно изменять цвет кнопки?

Изменить цвет кнопки
Добрый день, при запуске перед открытием формы проверяется на наличие отметки в поле если их нет.

Изменить цвет кнопки
Доброго времени суток. Решил для тренировки сверстать макет. Но покаместь наткнулся на проблему.

Источник

DelphiComponent.ru — бесплатно видеоуроки по Delphi, статьи, исходники

Работа с цветом в Delphi

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

Как вы уже знаете, один байт может принимать значения от 0 до 255 (в десятич­ной форме) или от 0 до FF (в шестнадцатеричной). Так что в шестнадцатеричной форме цвет будет выглядеть как SOOFFFFFF. Только тут сразу надо отметить, что первые два нуля — это лишний байт, потом идут FF для голубого цвета, затем FF для зеленого и последние FF для красного. Получается, что в памяти цвет хранится как BGR (в обратном порядке). Абсолютно красный цвет будет равен $000000FF , абсолютно зеленый — $0000FF00 , а голубой — S00FF0000 .

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

Итак, на форме три компонента TEdit. Для красного цвета компонент назовите RedEdit, ДЛЯ зеленого — GreenEdit, ну И ДЛЯ СИНвГО — BlueEdit. Так же на форме есть кнопка для смены цвета (ее имя не имеет значения) и компонент CoiorDialog, для смены цвета.

Если вы сами создаете пример, по­старайтесь все разместить так, как показано на рисунке выше (ближе к правому краю), потому что слева будем рисовать квадрат.

Для события кнопки onclick пишем код, показанный в листинге:

procedure TFormi.ButtonlClick(Sender: TObj ect);

В разделе var объявлена одна переменная целого типа Longint. Это целое число размером в 4 байта, оно будет использоваться для хранения значения цвета.

В первой строке показывается ОКНО смены цвета ColorDialogl.Execute. Если пользователь не выбрал цвет (об этом говорит конструкция if not), то выполнение процедуры прерывается с помощью exit.

Дальше выбранный цвет ColorDialog1 .color из типа TCoior преобразовывается в простое число с помощью функции coiorToRGB. Этой функции надо передать цвет в виде TCoior (мы передаем ColorDialogl.color), и она вернет целое 4- байтное число, которое мы записываем в переменную с. Функция CoiorToRGB вы­полняет одно очень важное, действие— очищает первый байт, который как раз не несет смысловой нагрузки в 24-битной RGB системе.

Читайте также:  Потолочные светильники черно белого цвета

В следующей строке идет присвоение строке ввода RedEdit значения красной составляющей цвета. Для этого сначала используется функция GetRValue. Ей пере­дается значение цвета в виде целого числа (переменная с). Результат—однобайт­ное число, которое показывает значение красной составляющей. Поскольку резуль­тат— число, то прежде чем его присваивать в строку ввода, оно должно быть пре­образовано в строку. Для этого переводим его в текст с помощью знакомой нам ФУНКЦИИ IntToStr.

То же самое проделываем и с зеленым цветом в следующей строке кода. Только для получения зеленой составляющей используется функция GetGValue.

Для получения синей составляющей используется функция GetBValue. Таким образом, после выполнения всех этих действий, мы разбили 4 байта цвета из пере­менной с на отдельные байты по цветам и разнесли их в соответствующие строки ввода.

После этого нужно заставить окно прорисоваться с помощью вызова метода Repaint.

Для события OnPaint напишем следующий код:

procedure TForml.FormPaint(Sender: TObj ect); begin

StrToIntDef(GreenEdit.Text, 0), StrToInt­Def (BlueEdit.Text,0));

Canvas.Rectangle(10,10, 250, 150);

Здесь надо проделать обратные действия — превратить три составляющих цвета из строк ввода в одно целое значение цвета. Для этого используется функция rgb (r, g, в). У этой функции три параметра, и все они целые числа.

  • r — значение красного цвета.
  • g — значение зеленого цвета.
  • в — значение синего цвета.

В качестве параметров передаются значения, указанные в соответствующих строках ввода, с предварительным преобразованием их из строк в числа.

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

И последнее — создадим обработчик события onchange для всех строк ввода.

  1. Выделите строку ввода для красного цвета.
  2. Удерживая shift, щелкните мышью по остальным строкам.

У вас должны быть выделены все строки ввода серыми рамками. Теперь перей­дите в объектный инспектор на вкладку Events и дважды щелкните мышью по со­бытию onchange, чтобы создать обработчик сразу для всех выделенных компонен­тов. В нем напишите следующий код:

procedure TForm1.RedEditChange(Sender: TObject);

Попробуйте запустить этот пример. Теперь выбе­рите какой-нибудь цвет, и вы увидите составляющие этого цвета. Можете даже напрямую изменять зна­чения в строках ввода, и результат моментально бу­дет отражаться на цвете прямоугольника.

Ну а теперь познакомимся с константами, кото­рые уже заготовлены для основных цветов. Вы можете их реально использовать в своих програм­мах и присваивать, как ранее это делалось в при­мере. Здесь не будут перечисляться все константы, потому что вы можете их сами в любой момент найти, если щелкнете в объектном инспекторе по свойству color любого компонента. Все, что вы увиди­те в этом списке, — это и есть константы, которые можно использовать. Этот при­ем довольно удобный, потому что сразу видно константу и цвет.

Источник

Adblock
detector