| imho.ws |
![]() |
|
|
|
# 1 |
|
::VIP::
Регистрация: 11.06.2003
Адрес: Там...
Сообщения: 236
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Связь двух TSpeedButton в Delphi
Может, конечно, я не очень понятно выразился в сабже, но нужно следующее:
есть два TSpeedButton'a и я хочу сделать так, чтобы при наведении мышки на первый, второй тоже перерисовывался так, как буд-то над ним мышь... Кнопки плоские, т.е. свойство Flat=true Последний раз редактировалось f00rd; 27.08.2004 в 21:00. |
|
|
|
|
# 6 |
|
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
У кнопки может быть всего два состояния: enable:=True и enable:=False; Соответственно кнопка юзает на эти два состояния разные иконки, или автоматом переводит в серую цветную при дефолтных параметрах. Если хочешь рулить изображениями на кнопках, то вешай два ImageList в стакане свойств на эти два случая и рули индексами иконок в обработчике события OnMouseOver...
|
|
|
|
|
# 8 |
|
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
[QUOTE=f00rd]ууу, меня не понимают =(
[QUOTE] ХЕ... ах вот ты какой, цветочек аленькой... ![]() ![]() ![]() тут придеться поступить следующим образом: на событие над кнопкой нужно прогенерить событие (SendMessage по-моему или что-то вроде этого), тут уже смотри хелп по API. |
|
|
|
|
# 10 |
|
::VIP::
Регистрация: 19.03.2004
Сообщения: 1 329
![]() ![]() ![]() ![]() |
f00rd
Напиши в событии MouseMove 1-й кнопки SpeedButton1 следующее: SpeedButton2->Perform(CM_MOUSEENTER,0,0); и вторая кнопка подымится Правда возникнет другая проблемка: поскольку в TSpeedButton есть только событие MouseMove, но нету MouseEnter и MouseLeave, то сложно будет отследить момент выхода мышки из контрола, чтобы погасить поднятую кнопку с помощью сообщения CM_MOUSELEAVE. Правда и это можно обойти, но достаточно геморно и уже другая история... |
|
|
|
|
# 11 |
|
Member
Регистрация: 14.12.2003
Адрес: Дубна
Сообщения: 201
![]() ![]() ![]() ![]() ![]() ![]() |
Ничего сложного тут нету - надо создать новый компонент, предка от TSpeedButton для отлова CM_MOUSEENTER и CM_MOUSELEAVE.
Первая кнопка должна быть TwiceSpeedButton, а вторая обычный SpeedButton. Если хочешь, это можно легко исправить. Свойство SecondButton - твоя вторая кнопка. Думаю разберешься, че с этим делать - будут вопросы, пиши. Код:
unit TwiceSpeedButton;
interface
uses
Classes, Controls, Buttons, Messages;
type
TTwiceSpeedButton = class(TSpeedButton)
private
FSecondButton: TSpeedButton;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
published
property SecondButton: TSpeedButton read FSecondButton write FSecondButton;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('AriX', [TTwiceSpeedButton]);
end;
{ TTwiceSpeedButton }
procedure TTwiceSpeedButton.CMMouseEnter(var Message: TMessage);
begin
inherited;
if (FSecondButton <> nil) and (FSecondButton.Flat) then
FSecondButton.Perform(CM_MOUSEENTER, 0, 0);
end;
procedure TTwiceSpeedButton.CMMouseLeave(var Message: TMessage);
begin
inherited;
if (FSecondButton <> nil) and (FSecondButton.Flat) then
FSecondButton.Perform(CM_MOUSELEAVE, 0, 0);
end;
end.
|
|
|
|
|
# 14 |
|
Member
Регистрация: 14.12.2003
Адрес: Дубна
Сообщения: 201
![]() ![]() ![]() ![]() ![]() ![]() |
ЁЖ
да я знаю, что ты имел ввиду ![]() по-моему так проще всего.. если есть способ лучше - самому хотелось бы узнать.. f00rd ничего плохого в создании своего компонента нету.. почти в каждой хотя бы немного серьезной программе приходится это делать - так как по другому нельзя. |
|
|