![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В любом месте области формы по клику мышки срабатывает процедура [Delphi, Windows]
algambra © (2005-11-09 11:42:00)Создал малую прогу. Вот ее текст.
В любом месте области формы по клику мышки срабатывает процедура BtnOneDown. Через сист. пиктограммы окно закрыть невозможно.
program Pr1;
uses
Windows,
Messages,
KOL;
{$R *.res}
var
fmMain, BtnOne: PControl;
procedure BtnOneDown(Sender: PControl; var Mouse: TMouseEventData);
begin
MsgOk('BtnOneDown');
end;
procedure BtnOneClick(Dummy : Pointer; Sender: PControl);
begin
MsgOk('BtnOneClick');
// fmMain.Close;
end;
begin
fmMain:=NewForm(Applet,'First WIndow');
fmMain.HasBorder:=True;
fmMain.CanResize:=True;
fmMain.StatusText[0]:='Example';
BtnOne:=NewButton(fmMain,'Close');
BtnOne.Left:=6;
BtnOne.Top:=4;
//BtnOne.Shift(6,4);
BtnOne.OnMouseDown:=TOnMouse( MakeMethod(nil,@BtnOneDown));
BtnOne.OnClick:=TOnEvent(MakeMethod(nil,@BtnOneClick));
Run(fmMain);
end.
Vladimir Kladov (2005-11-12 17:45:00) [1]ничего не прав. Он запускает модальный системный диалог по OnMouseDown. В итоге теряется где-то WM_MOUSEUP - не обрабатывается, и система (именно система) считает, что кнопка мыши уже нажата. Исправить можно кликнув правой клавишей мыши, но это неверно вообще - не давать обрабатываться сообщениям. Можно хотя бы postmsg сделать, и уже там свой диалог показывать. Проще работать через OnClick на кнопке.
homm (2005-11-12 11:34:00) [2]
uses
Windows,
Messages,
KOL;
var
fmMain, BtnOne: PControl;
procedure BtnOneDown(Sender: PControl; var Mouse: TMouseEventData);
begin
MsgOk('BtnOneDown');
end;
begin
fmMain:=NewForm(Applet,'First WIndow');
BtnOne:=NewButton(fmMain,'Close');
BtnOne.OnMouseDown:=TOnMouse( MakeMethod(nil,@BtnOneDown));
Run(fmMain);
end.
algambraправ. Ничего городить не надо. Просто OnDown срабатывет на форме если Button или BitBtn (может еще кто) в фокусе. Попробовал GRushButton - такой косяк не появляется.
Vladimir Kladov (2005-11-09 20:28:00) [3]да не суть важно - в данном случае. Параметры все равно через регистры передаются. Не используются, и ладно.
Но я не понял вообще, к чму этот пример. Пусть автор использует OnClick - зачем нужен OnMouseDown на кнопке? Кнопка должна быть кнопкой, и - все. Городить какой-то код на все случаи жизни - не в правилах Компактной библиотеки объектов.
ECM (2005-11-09 12:55:00) [4]Не знаю, как на счет остального, но сразу вижу одну ошибку:
procedure BtnOneDown( Dummy: Pointer;Sender: PControl; var Mouse: TMouseEventData);