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

Поиск:

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


Unregistered











У меня есть кнопка Button1 или BitBtn1, можно ли помянить её цвет например на синий во время выполнения программы? дело в том что присвоить кнопке BitBtn рисунок можно только перед запуском, и baaa.gif не удобно менять цвет из файла!
  Вверх
Song
Дата 17.5.2003, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



>>что присвоить кнопке BitBtn рисунок можно только перед запуском
Сам придумал?


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Sarge
Дата 17.5.2003, 15:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вернее я могу!
  Вверх
<Spawn>
Дата 17.5.2003, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Класс TButton не имеет возможности смены цвета. Ето можно сделать только самому. Тобишь тебе нада создать производный класс от TButton и реализовать смену цвета ))


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Sarge
Дата 17.5.2003, 19:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А как?
  Вверх
&-ray
Дата 17.5.2003, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 406
Регистрация: 15.4.2003
Где: Казахстан, г Аста на

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



Можно сделать другое:
вместо button использовать image и при клике менять картинку, чтобы был эффект нажатия. Там уж можно нарисовать что угодно


--------------------
"Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б.

--------------------
И снова мышь беру я в руки
Куда иду? - Конечно в сруки!
PM MAIL WWW   Вверх
Sarge
  Дата 17.5.2003, 20:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Srawn, напиши пожалуйста, а КАК создать производный класс от TButton и реализовать смену цвета.
  Вверх
<Spawn>
Дата 17.5.2003, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Я компонентов практически еще не делал, но могу показать на небольшом примерчике. Например, можно обрабатывать самому WM_PAINT (Хотя возможно существуют внутренние события компонента о которых я не знаю). Я не стал возиться, но у меня ни как не получилось заставить работать, если создать Канвас на стадии Create или CreateWnd - вылетала Access Vialetion, так что я только ради примера привожу в таком виде:

Код
type
 TMyButton=class(TButton)
  private
   FCanvas:TCanvas;
   FColor:TColor;
   procedure DrawButton(Offset:integer);
   procedure OnPaint(var Msg:TMessage);message WM_PAINT;
   procedure OnLDown(var Msg:TMessage);message WM_LBUTTONDOWN;
   procedure OnLUp(var Msg:TMessage);message WM_LBUTTONUP;
   procedure Double(var Msg:TMessage);message WM_LBUTTONDBLCLK;
  published
   property Color:TColor read FColor write FColor default clBlue;
  end;

procedure TMyButton.DrawButton(Offset:integer);
var
Rect:TRect;
begin
with Rect do begin
Left:=0;
Top:=0;
Bottom:=Self.Height;
Right:=Self.Width;
end;
InflateRect(Rect,Offset,Offset);
FColor:=clBlue;
//Поидее этот подход не правильный, поскольку рациональнее было бы создавать Канвас на стадии создания компонента, чего как я уже сказал у меня не получилось

with TCanvas.Create do begin
try
Brush.Color:=FColor;
Handle:=GetDc(Self.Handle);
FillRect(Rect);
TextOut((Self.Width div 2)-(TextWidth(Self.Caption)div 2 )+Offset,
        (Self.Height div 2)-(TextHeight(Self.Caption) div 2)+Offset,Self.Caption);
finally
ReleaseDC(Self.Handle,Handle);
Free;
end;
end;
end;

procedure TMyButton.OnPaint(var Msg:TMessage);
begin
inherited;
DrawButton(-2);
end;

procedure TMyButton.OnLDown(var Msg:TMessage);
begin
inherited;
DrawButton(-1);
end;

procedure TMyButton.OnLUp(var Msg:TMessage);
begin
inherited;
DrawButton(-2);
end;

procedure TMyButton.Double(var Msg:TMessage);
begin
inherited;
DrawButton(-1);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
btn:TMyButton;
begin
with TMyButton.Create(Form1) do begin
Parent:=Form1;
Left:=10;
Top:=10;
Caption:='MyButton';
end;
end;


Надеюсь это тебе как то поможет smile.gif

Это сообщение отредактировал(а) <Spawn> - 17.5.2003, 23:08


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 18.5.2003, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Если хочется, чтоб кнопка отображала фокус то можно добавить это:
Код
if Self.Focused then
begin
 InflateRect(Rect,-1,-1);
 DrawFocusRect(Rect);//Метод TCanvas для отрисовки фокуса
end;


Это сообщение отредактировал(а) <Spawn> - 18.5.2003, 09:26


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Song
Дата 18.5.2003, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



Sarge, чтобы это сделать, тут весьма объёмный исходник будет. Стоит ли оно того?


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
78125
Дата 19.5.2003, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата
Можно сделать другое:
вместо button использовать image и при клике менять картинку, чтобы был эффект нажатия. Там уж можно нарисовать что угодно

Вот я тоже так думаю - хоть цветочки нарисуй! biggrin.gif
--------------------
купим подпись
PM MAIL   Вверх
Unregistered
Дата 19.5.2003, 10:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А почему экземпляр TCanvas создать не получилось? я специяльно попробовал, вроде нормально...
  Вверх
<Spawn>
Дата 19.5.2003, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Цитата(Unregistered @ 19.5.2003, 02:55)
А почему экземпляр TCanvas создать не получилось? я специяльно попробовал, вроде нормально...

не знаю, но у меня вылетала ошибка (пробовал на Create и на CreateWnd)


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Unregistered
Дата 19.5.2003, 14:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Можешь даже свою BitBTn панелькой заменить у неё цвет меняеться
  Вверх
Guest_df_3
Дата 19.5.2003, 14:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Можешь даже свою BitBTn панелькой заменить у неё цвет меняеться
  Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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