Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SpeedButton Handle [D6, Win95/98, WinXP]


Вадим ©   (2004-12-14 00:27:00) 

Понадобилось как-то из проги нажать спидбатон. Именно нажать, а не вызвать её процедуру OnClick. Решил я послать ей PostMessage типа wm_LButtonDown а потом wm_LButtonUp, НО оказалось, что спидбатон не имеет хендла! Как это может быть и что делать?


Ihor Osov'yak   (2004-12-17 03:27:00) [1]

2 [9] Юрий Зотов ©   (17.12.04 03:05)

>  Не зря же смайлик стоял.

Ох Вы, Юрий, и жук. Всегда выкрутитесь. :-).


Юрий Зотов   (2004-12-17 03:05:00) [2]

> Ihor Osov'yak ©   (14.12.04 01:58) [6]

> при клике на BitBtn1 Caption формы не изменился...

И не должен был меняться. Не зря же смайлик стоял.
:о)


Вадим   (2004-12-17 00:51:00) [3]

Извиняюсь за молчание - Инет рубанулся...
Просто хотел поблагодарить за помощь. Очень здорово, когда получаешь квалифицированый и исчерпывающий ответ на поставленный вопрос.


murtix   (2004-12-14 07:13:00) [4]

SpeedButton1.Perform(WM_LBUTTONDOWN, 0, 0);
SpeedButton1.Perform(WM_LBUTTONUp, 0, 0);
работает стопроцентно


Ihor Osov'yak   (2004-12-14 01:58:00) [5]

2 [5] Юрий Зотов ©   (14.12.04 01:39)

Оригинально :-). Но следуя своей привычке все, что можно проверять, посмотрел исходники TSpeedButton.SetDown... Зародились смутные подозрения..
Соорудил маленькое тестовое приложение..

type
 TForm1 = class(TForm)
   SpeedButton1: TSpeedButton;
   BitBtn1: TBitBtn;
   procedure SpeedButton1Click(Sender: TObject);
   procedure BitBtn1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 Caption := '11';
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 SpeedButton1.Down := true;
 SpeedButton1.Down := false;
end;

end.


Так вот, при клике на BitBtn1 Caption формы не изменился...
Подозрения все же оснообоснованы...


Юрий Зотов   (2004-12-14 01:39:00) [6]

> Вадим ©   (14.12.04 00:27)  

> Решил я послать ей PostMessage типа wm_LButtonDown а потом
> wm_LButtonUp

SpeedButton1.Down := True;
SpeedButton1.Down := False;

:о)


Ihor Osov'yak   (2004-12-14 01:13:00) [7]

кстати, TSpeedButton.Click никто тоже не отменял..


Ihor Osov'yak   (2004-12-14 01:07:00) [8]

хендл в VCL имеют только потомки от TWinControl, то есть классы, инкапсулирующие "надстройки" над оконными объектами  в терминологии Windows..  Не оконные классы с точки зрения взаимодействия с ними ОС вообще не существуют, то есть речб о "нажатии"  на них вообще быть не может. Скажете "а я же кликаю мышкой по спидбатону"? C точки зрения виндовс Вы кликаете по окну паренту, содержащему соотв. "безоконный" компонент.. А этот парент уже сам понимает, что нужно вызвать соотв. метод соотв. безоконника.. (См. TConrol.Perform)
То есь в Вашем случае нужно либо иммулировать клик по соотв. области парента, либо вызивать Perform от спидбатона с соотв. параметрами..


Yanis   (2004-12-14 00:48:00) [9]

Пояснение к [1] :)
SpeedButton наследник от TGraphicsControl.


Anatoly Podgoretsky   (2004-12-14 00:34:00) [10]

TGraphicsControl


Наверх

Титульная страница Поиск, карта сайта Написать письмо