Как сделать круглую кнопку в делфи

Добавил пользователь Alex
Обновлено: 18.09.2024

fShift = 2 ; // Изменяем изображение и заголовок , когда кнопка нажата.

fHiColor = $DDDDDD ; // Цвет нажатой кнопки (светло серый)

// Windows создаёт этот цвет путём смешивания пикселей clSilver и clWhite (50%).

// такой цвет хорошо выделяет нажатую и отпущенную кнопки.

TNewButton = Class (TCustomControl)

// То же, что и всех компонент

// То же, что и в SpeedButton

// Верх и лево Glyph на изображении кнопки

// Верх и лево текста на изображении кнопки

// То же, что и в SpeedButton

// Текст на кнопке

// Цвет изображения (да-да, вы можете задавать цвет изображения кнопки

Procedure fLoadGlyph(G : TPicture);

Procedure fSetGlyphLeft(I : Integer);

Procedure fSetGlyphTop(I : Integer);

Procedure fSetCaption(S : String );

Procedure fSetTextTop(I : Integer);

Procedure fSetTextLeft(I : Integer);

Procedure fSetFaceColor(C : TColor);

Procedure fSetNumGlyphs(I : Integer);

Procedure fSetEnabled(B : Boolean);

Procedure Paint; override ;

Procedure MouseDown(Button: TMouseButton; Shift: TShiftState;

X, Y: Integer); override ;

Procedure MouseUp(Button: TMouseButton; Shift: TShiftState;

X, Y: Integer); override ;

Procedure WndProc( var Message : TMessage); override ;

// Таким способом компонент определяет - находится ли курсор мышки на нём или нет

Constructor Create(AOwner : TComponent); override ;

Destructor Destroy; override ;

// Property AllowUp не поддерживается

Property Caption : String

read fCaption write fSetCaption;

// Property Down не поддерживается

Property Enabled : Boolean

read fEnabled write fSetEnabled;

// Property Flat не поддерживается

Property FaceColor : TColor

read fFaceColor write fSetFaceColor;

property Glyph : TPicture // Такой способ позволяет получить серую кнопку, которая сможет

Здравствуйте serjhp, Вы писали:

S>Подскажите кто нибудь как сделать круглую кнопку?

Здравствуйте serjhp, Вы писали:

S>Подскажите кто нибудь как сделать круглую кнопку?

Это можно легко сделать с помощью Яндекса или Гугла.
См. также в сторону сайтов "Мастера Дельфи" и "Королевство Дельфи".

Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.

Здравствуйте serjhp, Вы писали:

S>Подскажите кто нибудь как сделать круглую кнопку?


Выделите кнопку и перейдите в объект­ный инспектор. В нем (рис. 7.2) показаны свойства кнопки. Как видите, большинство свойств нам уже знакомо по свойствам формы, поэтому не будем их рассматри­вать. Есть только одно интересное свойст­во— ModalResult, но с ним мы познако- мимся позже.

Давайте изменим заголовок кнопки. За заголовок формы отвечает свойство caption. Здесь то же самое. Найдите свойство caption и измените содержащийся в нем текст на "Нажми меня".

Сразу ИЗМеНИМ И СВОЙСТВО Name у кноп­ки. Ранее говорилось, что любым компо­нентам и формам лучше давать понятные имена. Поэтому давайте с самого начала будем привыкать к нормальному стилю программирования. Найдите свойство

Кнопка (TButton) в Delphi

Name и измените его на MyFirstButton. Пускай имя кнопки пока не отражает никакого смысла, ведь она еще ничего не делает.

Теперь изменим имя формы. Для этого снимите выделение с кнопки (щелкните мышью в любом месте формы). Вверху окна объектного инспектора должна заго­ реться надпись Forml TFormi , как это показано на рис. 7.3. Нужный для редактиро­вания компонент можно выбрать и в этом списке.

Теперь найдите здесь свойство Name (оно должно быть равно Forml) и измените его значение на MainForm (это переводится как главная форма).

Попробуйте запустить программу (нажмите клавишу ). Оболочка Delphi скомпилирует программу и запустит на выполнение. Теперь можно спокойно на­жимать на кнопку, только ничего в этом случае происходить не будет.

Давайте усложним пример и введем реакцию на событие, когда нажимается кнопка. Для этого перейдите на вкладку Events (События) в окне объектного ин­спектора. Когда мы рассматривали события формы, говорилось, что за щелчок клавиши мыши отвечает событие onclick. Для кнопки есть такое же событие. Найдите его (для этого надо перейти на вкладку объектного инспектора Events (События)) и щелкните по нему дважды. Delphi должен создать в редакторе кода процедуру— обработчик события onclick. По умолчанию ей присваивается имя в виде имени компонента (нашей кнопки) плюс имя события без пристав­ки on. В нашем случае получается, что имя процедуры обработчика будет

Procedure TFormi.MyFirstButtonclick(Sender: TObject);

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

Давайте вернемся в редактор кода и посмотрим, что там создал для нас Delphi? Это процедура MyFirstButtonclick. Ей передается ОДИН параметр Sender объектного типа TObject. В начале выполнения процедуры в переменной sender будет находиться указатель на объект, который вызвал этот обработчик. Это очень важно, потому что вы без проблем можете сделать так, что одна процеду­ра-обработчик сможет обрабатывать нажатия сразу нескольких кнопок или во­обще компоненты разного типа. По содержимому этой переменной можно уз­нать, какой именно компонент сгенерировал событие. Чуть позже вы увидите этот трюк на практике.

Давайте напишем внутри процедуры (между операторными скобками begin и end) команду close. Это метод формы, который закрывает процедуру. Теперь наша процедура должна выглядеть как:

Procedure TFormi.MyFirstButtonclick(Sender: TObject);

Попробуйте запустить программу и нажать на кнопку. Программа закроется.

Так как close — это метод формы, мы могли написать и так:

Procedure TFormi.MyFirstButtonclick(Sender: TObj ect);

Разницы между первым и вторым вариантом нет абсолютно никакой. Так поче­му же в первом случае написано просто close, не указывая имя объекта, метод ко­торого используется? Мы же знаем, что методы нужно вызывать в форме имя_объекта.имя_метода. Все очень просто. Процедура обработчика события отно­сится к объекту Forml (об этом говорит объявление процедуры TForm1.MyFirstButtonclick), и внутри нее можно использовать его свойства и ме­тоды без указания владельца. По умолчанию будет браться Forml. Но если мы за­хотим из этой процедуры закрыть другую форму, например, Form2, то придется указать, что необходим объект именно Form2.

procedure TFormi.MyFirstButtonclick(Sender: TObj ect);

Если мы просто напишем close, то закроется Forml, а не Form2. Когда вы пише­те имя какой-то процедуры, то сначала поиск этого имени осуществляется среди членов класса, внутри которого написан код.

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

Давайте вернемся в редактор кода и посмотрим, что там создал для нас Delphi? Это процедура MyFirstButtonclick. Ей передается ОДИН параметр Sender объектного типа TObject. В начале выполнения процедуры в переменной sender будет находиться указатель на объект, который вызвал этот обработчик. Это очень важно, потому что вы без проблем можете сделать так, что одна процеду­ра-обработчик сможет обрабатывать нажатия сразу нескольких кнопок или во­обще компоненты разного типа. По содержимому этой переменной можно уз­нать, какой именно компонент сгенерировал событие. Чуть позже вы увидите этот трюк на практике.

Давайте напишем внутри процедуры (между операторными скобками begin и end) команду close. Это метод формы, который закрывает процедуру. Теперь наша процедура должна выглядеть как:

Кнопки являются элементами управления и служат для выдачи команд на выполнение определенных функциональных действий. Существует несколько видов кнопок в Delphi:

Основным для кнопки событием является событие OnClick, возникающее при ее нажатии.

Свойство Default , если его установить в true, определяет, что нажатие пользователем клавиши ввода Enter будет эквивалентно нажатию на данную кнопку, даже если данная кнопка в этот момент не находится в фокусе. Правда, если в момент нажатия Enter в фокусе находится другая кнопка, то все-таки сработает именно кнопка в фокусе.

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

Свойство Glyph определяет растровый рисунок кнопки (формат bmp). По умолчанию кнопка не содержит рисунок. Delphi поставляется большое количество изображений для кнопок. Они расположены в каталоге ImagesButtons, а сам каталог Images расположен в каталоге program filescommon filesborland shared.

Расположение изображения и надписи на кнопке определяется свойствами Margin , Layout и Spacing . Если свойство Margin равно -1 (значение по умолчанию), то изображение и надпись размещаются в центре кнопки. При этом положение изображения но отношению к надписи определяется свойством Layout , которое может принимать значения: blGlyphLeft (слева, это значение принято по умолчанию), blGlyphRight (справа), blGlyphТор (вверху), blGlyphBottom (внизу). Если же Margin > 0 , то в зависимости от значения Layout изображение и надпись смещаются к той или иной кромке кнопки, отступая от нее на число пикселей, заданное значением Margin .

Свойство Spacing задает число пикселей, разделяющих изображение и надпись на поверхности кнопки. По умолчанию Spacing = 4 . Если задать Spacing = 0 , изображение и надпись будут размещены вплотную друг к другу. Если задать Spacing = -1 , то текст появится посередине между изображением и краем кнопки.

Еще одно свойство BitBtn – свойство Kind определяет тип кнопки. По умолчанию значение этого свойства равно bkCustom – заказная. Но можно установить и множество других предопределенных типов: bkOK , bkCancel , bkHelp , bkYes , bkNo , bkClose , bkAbort , bkRetry , bkIgnore , bkAll . В этих типах уже сделаны соответствующие надписи, введены пиктограммы, заданы еще некоторые свойства.

Кнопки SpeedButton имеют возможность отображения пиктограмм и могут использоваться как обычные управляющие кнопки. Обычно они используются в качестве быстрых кнопок, дублирующих различные команды меню, и в инструментальных панелях, в которых требуется фиксация нажатого состояния.

У кнопок SpeedButton , как и у других кнопок, имеется свойство Caption – надпись, но в этих кнопках оно обычно оставляется пустым, так как вместо надписи используется пиктограмма.

Изображение на кнопке задается свойством Glyph . И точно так же свойство NumGlyphs определяет число используемых пиктограмм, свойства Layout и Margin определяют расположение изображения, а свойство Spacing – расстояние между изображением и надписью.

Кнопка может использоваться как переключатель. Поэтому, кроме обычного и нажатого состояний, она имеет третье состояние – утопленное, или выбранное (включенное). Включена кнопка или нет, определяет свойство Down (значение true – кнопка выбрана).

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

Если кнопка не входит в группу, то она не может работать как переключатель и находится в выбранном состоянии. Если есть несколько кнопок, имеющих одинаковое ненулевое значение GroupIndex , то они образуют группу взаимосвязанных кнопок из которых нажатой может быть только одна. Если одна кнопка находится в нажатом состоянии и пользователь щелкает на другой, то первая кнопка освобождается, а вторая фиксируется в нажатом состоянии. Поведение нажатой кнопки при щелчке на ней зависит от значения свойства AllowAllUp . Если оно равно true , то кнопка освободится, поскольку в этом случае возможно состояние, когда все кнопки группы отжаты. Если же AllowAllUp равно false , то щелчок на нажатой кнопке не приведет к изменению вида кнопки.

Если Grouplndex > 0 и AllowAllUp (разрешение отжатого состояния всех кнопок группы ) = true , то кнопка при щелчке пользователя на ней погружается и остается в нажатом состоянии. При повторном щелчке пользователя на кнопке она освобождается и переходит в нормальное состояние.

Читайте также: