![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Sarge |
|
|||
|
Unregistered |
Спасибо!
|
|||
|
||||
| Sarge |
|
|||
|
Unregistered |
Извини, Spawn за вопрос, а как сделать обработчик события ONCLICK?
|
|||
|
||||
| <Spawn> |
|
||||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Напиши прототип обработчика OnClick и присвой его обработчику етой кнопки. А можно новые компоненты устанавливать - Component>InstallComponent. Тогда он будет добавлен к компонентам и ты сможешь использовать его обработчики стандартным образом. Для прототипа обработчика делаешь, например так:
но если ты будешь пользоваться моим примером, то там надо еще добавить обработку перерисовки компонента на паре событий, а именно CM_MOUSEENTER(или как то по другому) и CM_MOUSELEAVE. Это сообщение отредактировал(а) <Spawn> - 25.5.2003, 08:32 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
||||
|
|||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Вот, взято из Кулибы:
Цветная кнопка В книгах Калверта, Свана и других авторов можно найти похожий текст. Смысл текста – "Изменить цвет кнопок Button, BitBtn нельзя, т.к. их рисует WINDOWS". Если нельзя, но ОЧЕНЬ НУЖНО, то можно. Небольшой компонент ColorBtn, дает возможность использовать в кнопках цвет. Кроме того, представлено новое свойство - Frame3D, позволяющее получить более реалистичный вид нажатой кнопки. В отличие от API, при изменении значения свойства Frame3D, не требуется переоткрытие компонента.
Небольшое дополнение. Кнопку по прежнему рисует WINDOWS, а раскрашивает ее ColorBtn. Код компонента на 90% повторяет код BitBtn, ничего необычного здесь нет. Хочется повторить слова Калверта – "Пользуйтесь исходным кодом". Чаще заглядывайте в VCL - можно найти много интересного. -------------------- |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
Здесь есть о цветной кнопке, а также ещё много интересго
http://www.symbol.ru/library/delphi_secrets/ |
|||
|
||||
| Dapo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
Чтобы перекрасить кнопку достаточно знать ее хендл. Код приведенный Pegas-ом, конечно полезен. Но чтобы был понятен смысл всего вышеизложенного можно вкратце написать, следующее:
Чтобы закрасить контрол другим цветом нужно через его хендл получить контекст устройства - HDC (f.e. ButtonDC:=GetWindowDC(Button.Handle)). Затем создать экземпляр класса TCanvas (f.e. ButtonCanvas:=TCanvas.Create) и назначить ему полученный контекст устройства (ButtonCanvas.Handle:=ButtonDC). Теперь используем этот "настроеный" канвас для отрисовки изображения на контроле. Можно использовать и сам HDC для отрисовки API-функциями. У меня была похожая задача, только рисовать надо было на TListBox. |
|||
|
||||
| Sarge |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 24.5.2003 Где: Москва, флотская улица, дом 13 Репутация: нет Всего: нет |
А я решил всё подругому, в лоб!
По ходу программы создаю TBitmap и присваиваю кнопке. Причем кнопка получается как у SPAWN без его километрового кода, и не глючит... Я очень долго мучался с краями, поэтому получился такой странный код. Смотрите код, пропишите функцию:
И её вызов, например:
параметр brd означает отступление от краёв кнопки, если поставить 0 то она просто закрасится сплошняком, я использую 2. И заметьте, что ведь у меня (пока) самый простой и эффективный способ!!! |
||||
|
|||||
| Unregistered |
|
|||
|
Unregistered |
Sarge, я не понял как у тебя будут обрабатываться клики на кнопке (в предидущик примерах это есть).
|
|||
|
||||
| Sarge |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 24.5.2003 Где: Москва, флотская улица, дом 13 Репутация: нет Всего: нет |
Это был код общего применения.
А этот заточен под кнопку TBitBtn:
И используется так:
Это сообщение отредактировал(а) Sarge - 2.6.2003, 15:15 |
||||
|
|||||
| Sarge |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 24.5.2003 Где: Москва, флотская улица, дом 13 Репутация: нет Всего: нет |
Unregistered, клики обрабатываются стандартным образом, потому что кнопка создаётся сатически.
Просто кидаешь на форму BitBtn Создаёшь обработчик события OnClick... Понял? |
|||
|
||||
| Sarge |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 24.5.2003 Где: Москва, флотская улица, дом 13 Репутация: нет Всего: нет |
А хотя нет...
Моя кнопка работает только без Caption... Может быть кто-нибудь знает как сделать Caption? Просто я рачитывал, что текст можно поместить поверх рисунка, а насамом деле только слева, справа, сверху, или снизу... Обломчик, хотя... может быть кому то нужна пустая кнопка... |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
А что за проблема текст вывести?
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
TextOut()? -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Dapo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
Sarge извини конечно, но твой код по моему не имеет смысла...т.е. он может и работает (не смотрел), но для чего так делать? Ставить на форму TBitButton только для для того чтобы получить его рект и наложить на него битмап? Тебе же сказали, если тебе нужен такой подход - целесообразней использовать TImage. И в зависимости от состояния подгружай в него картинки (например из TImageList), а еще лучше наследника от него (TImage) сделать и добавить св-ва на разные состояния. Хотя тут вариантов много.
PS Я хочу сказать, что твой код - не ответ на поставленный тобой вопрос. |
|||
|
||||
| Dapo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
Да, а как на счет TButton?
Чтобы не быть голословным - вот что-то приблизительное, то о чем я писал уже: procedure ChgClr(Sender:TButtonControl;clr,capclr:TColor;Caption:string); var DC:HDC;//контекст устройства Cnvs:TCanvas; begin Cnvs:=TCanvas.Create; DC:=GetWindowDC(Sender.Handle); Cnvs.Handle:=DC; Cnvs.Brush.Color:=clr; Cnvs.Font.Color:=capclr; Cnvs.FillRect(Sender.ClientRect); Cnvs.TextRect(Sender.ClientRect,0,0,Caption); ReleaseDC(Sender.Handle,dc); Cnvs.Free; end; |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |