Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > возможность увеличения иконки кнопки при наведение


Автор: s2004 31.10.2011, 21:55
Здравствуйте!
Хочу в программе сделать возможность увеличения иконки кнопки при наведение на её указателя мыши есть где пример кода или может компонент исходник...?

Автор: Akella 31.10.2011, 23:05
используй события мышки у компонент

Автор: northener 31.10.2011, 23:37
Цитата(s2004 @  31.10.2011,  21:55 Найти цитируемый пост)
Хочу в программе сделать возможность увеличения иконки кнопки при наведение на её указателя мыши

Может вы хотите пример использования "лупы" в Windows?
А зачем? 

Автор: 14SatanA88 1.11.2011, 08:08
я так понял, топикстартер хочет сделать что-то вроде спецэффекта.

могу порекомендовать бесплатный компонент http://www.delphiexpert.ru/view_download.php?id=110. 

Автор: s2004 1.11.2011, 19:06
14SatanA88 этот TEffectButton на дельфи 2006 никак немогу поставить там же установка в виде пакетов пытаюсь добавить как компонент но неполучилось а так компонентик неплохой

да вот у меня 
кнопки BitBtn

простейшее решение при наведение курсора мыши это 
Код

procedure TForm1.BitBtn1MouseLeave(Sender: TObject);
begin
    BitBtn1.Height:=100;
BitBtn1.Width:=100;
end;


как бы хорошо кнопка увеличивается в размере, но а как что бы она обратно принимала свой первоначальный размер
и ещё в сети 
есть компонент
http://delphiexpert.ru/view_download.php?id=103 

напоминает мак ос панель как мне прикрутить его к кнопке

Автор: 14SatanA88 1.11.2011, 19:34
Цитата(s2004 @  1.11.2011,  19:06 Найти цитируемый пост)
есть компонент


не пользовался
как вариант качать и изучать его исходный код

Автор: s2004 1.11.2011, 20:53
http://delphiexpert.ru/view_download.php?id=103
 не этот компонент мне в прогу неподойдёт там панель используется а кнопки у меня на кулбаре

Автор: de_Nis 2.11.2011, 14:52
Цитата(s2004 @  1.11.2011,  19:06 Найти цитируемый пост)

как бы хорошо кнопка увеличивается в размере, но а как что бы она обратно принимала свой первоначальный размер


Архангельский А.Я."Программирование в Delphi 7", стр.1106:

"Событие OnMouseEnter наступает, когда курсор мыши входит в область метки. Обработчик события OnMouseEnter пишется, если надо произвести какие-то операции при перемещении курсора мыши над меткой. Например, можно изменить цвет фона или текста метки, а затем вернуть его к обычному цвету, когда курсор покинет область метки и наступит событие QnMouseLeave. Для этого в обработчик события OnMouseEnter всех меток приложения можно вставить оператор

(Sender as TLabel).Font.Color ;= clBlue;

а в обработчик события OnMouseLeave — оператор

(Sender as TLabel) .Font .Color := clBlack;

При перемещении курсора мыши над какой-либо меткой ее текст будет окрашиваться в голубой цвет."

Заменить изменение цвета Label-а изменением размера кнопки - и будет вам счастье.  smile 

Автор: s2004 2.11.2011, 19:16
de_Nis большое мерси а то на некоторых форумах предлагали решение как ....одним словом молодец как и следоало код простой и должен быть практически в самой иде . в FAQ я его не нашёл а многим может понадбится Архвнельского я читал но как видно невнимательно а код простой ниже с стандартной кнопкой
Код

procedure TForm1.Button1MouseEnter(Sender: TObject);
begin
 Button1.Height:=100;
Button1.Width:=100;
end;

procedure TForm1.Button1MouseLeave(Sender: TObject);
begin
    Button1.Height:=25;
Button1.Width:=75;
end;




Автор: dvamaster 2.11.2011, 19:28
По обработке событий менять глиф у TBitBtn.
Т.е. заготовить пару глифов с большим и уменьшеным изображениями.
В стацинарном состоянии уменьшеное, при наведении меняем на большее (OnMouseEnter), при покидании обратно уменьшеное (OnMouseLeave).

Автор: s2004 2.11.2011, 22:52
Цитата(dvamaster @ 2.11.2011,  19:28)
По обработке событий менять глиф у TBitBtn.
Т.е. заготовить пару глифов с большим и уменьшеным изображениями.
В стацинарном состоянии уменьшеное, при наведении меняем на большее (OnMouseEnter), при покидании обратно уменьшеное (OnMouseLeave).


да в speedbutton в опциях localizable и visual есть два глифа что то подставил для интереса разных размеров но неполучилось если загружаю на 32 то 32 на 16 то 16...

Автор: northener 2.11.2011, 23:37
Цитата(s2004 @  2.11.2011,  22:52 Найти цитируемый пост)
да в speedbutton в опциях localizable и visual есть два глифа что то подставил

Ну хоть раз прочитайте хоть что-нибудь! Ну что же вы всё время "тычетесь в темноте непонятно на что"?
Киньте на форму ImageList, например. Добавьте в него две картинки. Одна - "кнопка нажата", другая - "кнопка не нажата". И в событиях OnMouseEnter, OnMouseLeave присваивайте свойству кнопки Glyph либо ту, либо другую картинку.
 

Автор: s2004 3.11.2011, 19:07
Код

procedure TForm1.SpeedButton4MouseEnter(Sender: TObject);
begin
SpeedButton4.Height:=100;
SpeedButton4.Width:=100;
SpeedButton4.Glyph.LoadFromFile('c:\forward_48.bmp');
end;

procedure TForm1.SpeedButton4MouseLeave(Sender: TObject);
begin
SpeedButton4.Height:=27;
SpeedButton4.Width:=27;
// SpeedButton4.NumGlyphs:=2;
SpeedButton4.Glyph.LoadFromFile('c:\forward_16.bmp');
end;

ну неудобно так всё вроде нормально но прикрутить наверно надо всё таки с imagelist

Автор: bems 3.11.2011, 19:29
s2004, вместо файла можно использовать ресурс, тогда не так отвратительно будет

Автор: s2004 3.11.2011, 20:32
вот этот код загружает битман но кнопка размер увеливает при наведение курсора но сам рисунок значка неувеличивается в отличие от выше привидённого примера
Код

procedure TForm1.SpeedButton3MouseEnter(Sender: TObject);
begin
SpeedButton3.Height:=100;
SpeedButton3.Width:=100;
ImageList2.GetBitmap(1,SpeedButton3.Glyph); (размер 48Х48)
end;

procedure TForm1.SpeedButton3MouseLeave(Sender: TObject);
begin
SpeedButton3.Height:=27;
SpeedButton3.Width:=27;
ImageList2.GetBitmap(0,SpeedButton3.Glyph);  (размер 16Х16)
end;

northener 
почему код не работает

Автор: s2004 3.11.2011, 22:00
Код

procedure TForm1.SpeedButton3MouseEnter(Sender: TObject);
begin
SpeedButton3.Height:=100;
SpeedButton3.Width:=100;
ImageList2.GetBitmap(0,SpeedButton3.Glyph); (размер 48Х48)
end;

procedure TForm1.SpeedButton3MouseLeave(Sender: TObject);
begin
SpeedButton3.Height:=27;
SpeedButton3.Width:=27;
ImageList3.GetBitmap(0,SpeedButton3.Glyph);  (размер 16Х16)
end;

заработал только так если ввести на каждую кнопку отдельные имаджелист всё перебрал с одного не работал в никакую

Автор: s2004 3.11.2011, 22:30
Код

procedure TForm1.SpeedButton3MouseEnter(Sender: TObject);
begin
SpeedButton3.Height:=100;
SpeedButton3.Width:=100;
SpeedButton3.Glyph := nil;
ImageList2.GetBitmap(1,SpeedButton3.Glyph);

end;

procedure TForm1.SpeedButton3MouseLeave(Sender: TObject);
begin
SpeedButton3.Height:=27;
SpeedButton3.Width:=27;
SpeedButton3.Glyph := nil;
ImageList2.GetBitmap(0,SpeedButton3.Glyph);

end;


вот несколько раз перебрал этот код работает у меня кнопки на тул и кул баре поэтому добавляю высоту и ширину но можно и без
и обязательно выставить в imagelist высоту 32 если значок на 32 и тд.
одним словом получилось тема теперь точно закрыта ).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)