![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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