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

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

В любом месте области формы по клику мышки срабатывает процедура [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);


Наверх

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