Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как кнопку Button, BitBtn перекрасить? Поменять цвет кнопки? 
:(
    Опции темы
Unregistered
Дата 3.6.2003, 08:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Dapo Совершенно справедливо! Но на практике наверное не очень удобно каждый раз на WM_PAINT создавать и убивать Cnvs... лучше сделать его пропертью.
Но не ужели нет варианта каким-нибудь образом попытаться заставить windows отрисовывать кнопку др. цветом? Возможно ли на время отрисовки TButton изменить значение BtnFaсe например?...
Мне кажется что вопрос был задан именно в этом направление.
  Вверх
Sarge
  Дата 3.6.2003, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 24.5.2003
Где: Москва, флотская улица, дом 13

Репутация: нет
Всего: нет



biggrin.gif Не...
Я не сдамся!!!
Отвечаю, кнопка как живая, потому что я отступаю от краёв, если не отступать, то получится просто не живой цветной прямоугольник, а тут именно кнопка, зацените.
Вот готовый код.
Caption работает!!! Всё готово!!!
Код
var capt:string;
procedure KickBitBtn(frag:TBitBtn; clr:TColor; board:integer);overload;
var bmp:Tbitmap;
begin
if (frag.Caption<>'') then capt:=frag.Caption;
frag.Caption:='';
if board>0 then board:=board+1 else board:=-1;
with bmp do begin
bmp:=TBitmap.Create;
Height:=frag.Height-2*board;
Width:=frag.Width-2*board;
with Canvas do begin
Brush.Color:=clr;
FillRect(Rect(0, 0,Width-1, Height-1));
TextOut((Width div 2)-(TextWidth(Capt)div 2 ),(Height div 2)-(TextHeight(Capt) div 2),Capt);
end;
frag.Glyph:=bmp;
end;
end;

Всё теперь всё работает, кнопка просто кидается на форму,
после Implementation прописываем этот код (сверху),
И теперь когда надо перекрасить просто вызываем эту процедеру:
Код
KickBitBtn(BitBtn1, clblue, 2);

и кнопка перекрашиваеися в указаный цвет.
Если надо создать уже "накрашенную" пихаем запуск процедуры в
OnCreate;
Просто сделайте как я говорю, и все будет чики-пуки!
rolleyes.gif

Это сообщение отредактировал(а) Sarge - 3.6.2003, 13:57
PM MAIL   Вверх
Dapo
Дата 4.6.2003, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 18.4.2002

Репутация: нет
Всего: 1



>>frag.Glyph:=bmp;//используешь св-во Glyph

Так что на счет TButton?wink.gif
PM MAIL   Вверх
Dapo
Дата 4.6.2003, 06:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 18.4.2002

Репутация: нет
Всего: 1



Цитата(Unregistered @ 3.6.2003, 05:35)
Dapo ... лучше сделать его пропертью...

Конечно лучше! :-) Возвращаемся к коду Pegas-a (создание собственного компонента). Расширяем? wink.gif
PM MAIL   Вверх
Pasha
Дата 4.6.2003, 06:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Button- никак не перекрасишь она использует цвета Windows, а другую BitBtn.Color если не ошибаюсь.
  Вверх
Unregistered
Дата 4.6.2003, 08:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Dapo так я же говорю, что если во время WM_PAINT изменить системную константу BtnFace, кажеться так она называется, интересно что получиться... ща просто занят немного, освобожусь попробую...
  Вверх
Medved
Дата 4.6.2003, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Цитата(Pasha @ 4.6.2003, 09:46)
Button- никак не перекрасишь она использует цвета Windows, а другую BitBtn.Color если не ошибаюсь.

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


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Sarge
  Дата 11.6.2003, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 24.5.2003
Где: Москва, флотская улица, дом 13

Репутация: нет
Всего: нет



Странно, кажется идеи закончились, и каждый остался при своём мнении...
PM MAIL   Вверх
Чoо
Дата 6.8.2010, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: нет
Всего: 4



Цитата(Sarge @ 3.6.2003,  13:53)
Вот готовый код.
Caption работает!!! Всё готово!!!
Код
var capt:string;
procedure KickBitBtn(frag:TBitBtn; clr:TColor; board:integer);overload;
var bmp:Tbitmap;
begin
if (frag.Caption<>'') then capt:=frag.Caption;
frag.Caption:='';
if board>0 then board:=board+1 else board:=-1;
with bmp do begin
bmp:=TBitmap.Create;
Height:=frag.Height-2*board;
Width:=frag.Width-2*board;
with Canvas do begin
Brush.Color:=clr;
FillRect(Rect(0, 0,Width-1, Height-1));
TextOut((Width div 2)-(TextWidth(Capt)div 2 ),(Height div 2)-(TextHeight(Capt) div 2),Capt);
end;
frag.Glyph:=bmp;
end;
end;

Закрасил так же кнопочку. Единственное, хотел бы обратить внимание на 
Код

bmp:=TBitmap.Create;

Лучше bmp объявить сразу после implementation

Код

implementation
var
  bmp:TBitMap;


Само создание сделать так:
Код

if not assigned(bmp) then bmp:=TBitmap.Create; 

так как необязательно его создавать каждый раз заново

ну и не забывать его освобождать, например по событию формы дестрой:
Код

procedure ChildFm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(bmp);  //если просто bmp.free, то указатель остается и при следующей закраске получим ошибку доступа к памяти
end;  


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

Добавлено @ 18:07
пы сы: темка старая, но до сих пор актуальная smile

Это сообщение отредактировал(а) Чoо - 7.8.2010, 14:50


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
bems
Дата 7.8.2010, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Чoо, нет, за 7 лет ему ужн точно не надо. Не делай так больше.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Чoо
Дата 7.8.2010, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: нет
Всего: 4



bems, я тему апнул не просто что бы апнуть или посоветовать что-то автору. Просто решил, что, поскольку я так же закрашиваю кнопки, кто-то и еще может воспользоваться примером, написанным выше. Поэтому написал пару замечаний на счет утечек. И у самого же возник вопрос: так ли опасны эти утечки, что стоит им уделять внимание, и освобождаются ли ресурсы, если уничтожается дочерняя форма, которая заняла эти ресурсы (создала bmp.create)?

вобщем тему поднял только из добрых побуждений.

Это сообщение отредактировал(а) Чoо - 7.8.2010, 11:51


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.