![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Sarge big father |
|
|||
Unregistered |
У меня есть кнопка Button1 или BitBtn1, можно ли помянить её цвет например на синий во время выполнения программы? дело в том что присвоить кнопке BitBtn рисунок можно только перед запуском, и
![]() |
|||
|
||||
Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
>>что присвоить кнопке BitBtn рисунок можно только перед запуском
Сам придумал? -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
Sarge |
|
|||
Unregistered |
Вернее я могу!
|
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Класс TButton не имеет возможности смены цвета. Ето можно сделать только самому. Тобишь тебе нада создать производный класс от TButton и реализовать смену цвета ))
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
Sarge |
|
|||
Unregistered |
А как?
|
|||
|
||||
&-ray |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 406 Регистрация: 15.4.2003 Где: Казахстан, г Аста на Репутация: нет Всего: нет |
Можно сделать другое:
вместо button использовать image и при клике менять картинку, чтобы был эффект нажатия. Там уж можно нарисовать что угодно -------------------- "Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б. -------------------- И снова мышь беру я в руки Куда иду? - Конечно в сруки! |
|||
|
||||
Sarge |
|
|||
Unregistered |
Srawn, напиши пожалуйста, а КАК создать производный класс от TButton и реализовать смену цвета.
|
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Я компонентов практически еще не делал, но могу показать на небольшом примерчике. Например, можно обрабатывать самому WM_PAINT (Хотя возможно существуют внутренние события компонента о которых я не знаю). Я не стал возиться, но у меня ни как не получилось заставить работать, если создать Канвас на стадии Create или CreateWnd - вылетала Access Vialetion, так что я только ради примера привожу в таком виде:
Надеюсь это тебе как то поможет ![]() Это сообщение отредактировал(а) <Spawn> - 17.5.2003, 23:08 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Если хочется, чтоб кнопка отображала фокус то можно добавить это:
Это сообщение отредактировал(а) <Spawn> - 18.5.2003, 09:26 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Sarge, чтобы это сделать, тут весьма объёмный исходник будет. Стоит ли оно того?
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
78125 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 20.1.2003 Где: Санкт-Петербург Репутация: нет Всего: нет |
Вот я тоже так думаю - хоть цветочки нарисуй! ![]() --------------------
купим подпись |
|||
|
||||
Unregistered |
|
|||
Unregistered |
А почему экземпляр TCanvas создать не получилось? я специяльно попробовал, вроде нормально...
|
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
не знаю, но у меня вылетала ошибка (пробовал на Create и на CreateWnd) -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
Unregistered |
|
|||
Unregistered |
Можешь даже свою BitBTn панелькой заменить у неё цвет меняеться
|
|||
|
||||
Guest_df_3 |
|
|||
Unregistered |
Можешь даже свою BitBTn панелькой заменить у неё цвет меняеться
|
|||
|
||||
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; |
|||
|
||||
Unregistered |
|
|||
Unregistered |
Dapo Совершенно справедливо! Но на практике наверное не очень удобно каждый раз на WM_PAINT создавать и убивать Cnvs... лучше сделать его пропертью.
Но не ужели нет варианта каким-нибудь образом попытаться заставить windows отрисовывать кнопку др. цветом? Возможно ли на время отрисовки TButton изменить значение BtnFaсe например?... Мне кажется что вопрос был задан именно в этом направление. |
|||
|
||||
Sarge |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 24.5.2003 Где: Москва, флотская улица, дом 13 Репутация: нет Всего: нет |
![]() Я не сдамся!!! Отвечаю, кнопка как живая, потому что я отступаю от краёв, если не отступать, то получится просто не живой цветной прямоугольник, а тут именно кнопка, зацените. Вот готовый код. Caption работает!!! Всё готово!!!
Всё теперь всё работает, кнопка просто кидается на форму, после Implementation прописываем этот код (сверху), И теперь когда надо перекрасить просто вызываем эту процедеру:
и кнопка перекрашиваеися в указаный цвет. Если надо создать уже "накрашенную" пихаем запуск процедуры в OnCreate; Просто сделайте как я говорю, и все будет чики-пуки! ![]() Это сообщение отредактировал(а) Sarge - 3.6.2003, 13:57 |
||||
|
|||||
Dapo |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
>>frag.Glyph:=bmp;//используешь св-во Glyph
Так что на счет TButton? ![]() |
|||
|
||||
Dapo |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
Конечно лучше! :-) Возвращаемся к коду Pegas-a (создание собственного компонента). Расширяем? ![]() |
|||
|
||||
Pasha |
|
|||
Unregistered |
Button- никак не перекрасишь она использует цвета Windows, а другую BitBtn.Color если не ошибаюсь.
|
|||
|
||||
Unregistered |
|
|||
Unregistered |
Dapo так я же говорю, что если во время WM_PAINT изменить системную константу BtnFace, кажеться так она называется, интересно что получиться... ща просто занят немного, освобожусь попробую...
|
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Прежде чем ввязываться в дисскуссию, читайте пожалуйста темы с самого начала, -------------------- |
|||
|
||||
Sarge |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 24.5.2003 Где: Москва, флотская улица, дом 13 Репутация: нет Всего: нет |
Странно, кажется идеи закончились, и каждый остался при своём мнении...
|
|||
|
||||
Чoо |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: нет Всего: 4 |
Закрасил так же кнопочку. Единственное, хотел бы обратить внимание на
Лучше bmp объявить сразу после implementation
Само создание сделать так:
так как необязательно его создавать каждый раз заново ну и не забывать его освобождать, например по событию формы дестрой:
а то утечки будут. Если я заблуждаюсь, подправьте меня, пожалуйста. Добавлено @ 18:07 пы сы: темка старая, но до сих пор актуальная ![]() Это сообщение отредактировал(а) Чoо - 7.8.2010, 14:50 -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
||||||||||||
|
|||||||||||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Чoо, нет, за 7 лет ему ужн точно не надо. Не делай так больше.
-------------------- Обижено школьников: 8 |
|||
|
||||
Чoо |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: нет Всего: 4 |
bems, я тему апнул не просто что бы апнуть или посоветовать что-то автору. Просто решил, что, поскольку я так же закрашиваю кнопки, кто-то и еще может воспользоваться примером, написанным выше. Поэтому написал пару замечаний на счет утечек. И у самого же возник вопрос: так ли опасны эти утечки, что стоит им уделять внимание, и освобождаются ли ресурсы, если уничтожается дочерняя форма, которая заняла эти ресурсы (создала bmp.create)?
вобщем тему поднял только из добрых побуждений. Это сообщение отредактировал(а) Чoо - 7.8.2010, 11:51 -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |