![]() |
Связь двух TSpeedButton в Delphi
Может, конечно, я не очень понятно выразился в сабже, но нужно следующее:
есть два TSpeedButton'a и я хочу сделать так, чтобы при наведении мышки на первый, второй тоже перерисовывался так, как буд-то над ним мышь... Кнопки плоские, т.е. свойство Flat=true |
А по событию Onmouseover над первой, кто тебе мешает менять свойства второй кнопки?
|
Merlin Cori
а подскажи свойство, которое делает то, что мне нужно, я не нашел... |
это не свойство это действие :)
когда мыш проходит над TSpeedButton вызывается ее OnMouseMove в нем и перерисовуй вторую кнопку: Repaint() |
dyr_farot
мда... все, что ты сказал, я знаю и так.... вызывать Repaint бестолку... надо с кнопкой что-то сделать, а потом Repaint. |
У кнопки может быть всего два состояния: enable:=True и enable:=False; Соответственно кнопка юзает на эти два состояния разные иконки, или автоматом переводит в серую цветную при дефолтных параметрах. Если хочешь рулить изображениями на кнопках, то вешай два ImageList в стакане свойств на эти два случая и рули индексами иконок в обработчике события OnMouseOver...
|
Вложений: 1
ууу, меня не понимают =(
См. прицепленные рисунки...... там над кнопкой "Mouse Over" есть мышь, а над кнопкой "And Not" - нету... вот я хочу, чтобы было как с кнопкой "Mouse Over" только без навода мыши... |
[QUOTE=f00rd]ууу, меня не понимают =(
[QUOTE] ХЕ... ах вот ты какой, цветочек аленькой... :):):) тут придеться поступить следующим образом: на событие над кнопкой нужно прогенерить событие (SendMessage по-моему или что-то вроде этого), тут уже смотри хелп по API. |
тю... так бы и сказал :)
за показанное отвечает свойство Flat соответственно при вхождении мыши в клиентскую область одной кнопки ( TrackMouseEvent() ) изменяй это свойство во второй кнопке |
f00rd
Напиши в событии MouseMove 1-й кнопки SpeedButton1 следующее: SpeedButton2->Perform(CM_MOUSEENTER,0,0); и вторая кнопка подымится :) Правда возникнет другая проблемка: поскольку в TSpeedButton есть только событие MouseMove, но нету MouseEnter и MouseLeave, то сложно будет отследить момент выхода мышки из контрола, чтобы погасить поднятую кнопку с помощью сообщения CM_MOUSELEAVE. Правда и это можно обойти, но достаточно геморно и уже другая история... |
Ничего сложного тут нету - надо создать новый компонент, предка от TSpeedButton для отлова CM_MOUSEENTER и CM_MOUSELEAVE.
Первая кнопка должна быть TwiceSpeedButton, а вторая обычный SpeedButton. Если хочешь, это можно легко исправить. Свойство SecondButton - твоя вторая кнопка. Думаю разберешься, че с этим делать - будут вопросы, пиши. Код:
unit TwiceSpeedButton; |
AriX
Я, собственно, и имел ввиду примерно то, что ты написал. Просто это создание дополнительного отнаследованного компонента, которое может быть не всегда желательным :beer: |
Ураааа! работает :biggrin:
ЁЖ, спасибо =) Цитата:
Всем спасибо.... |
ЁЖ
да я знаю, что ты имел ввиду :) по-моему так проще всего.. если есть способ лучше - самому хотелось бы узнать.. f00rd ничего плохого в создании своего компонента нету.. почти в каждой хотя бы немного серьезной программе приходится это делать - так как по другому нельзя. |
| Часовой пояс GMT +4, время: 14:28. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.