Вниз
Скачать: CL | DM;

В любом месте области формы по клику мышки срабатывает процедура   Найти похожие ветки 

 
algambra   (2005-11-09 11:42) [0]

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


 
ECM ©   (2005-11-09 12:55) [1]

Не знаю, как на счет остального, но сразу вижу одну ошибку:

procedure BtnOneDown(Dummy: Pointer; Sender: PControl; var Mouse: TMouseEventData);


 
Vladimir Kladov   (2005-11-09 20:28) [2]

да не суть важно - в данном случае. Параметры все равно через регистры передаются. Не используются, и ладно.

Но я не понял вообще, к чму этот пример. Пусть автор использует OnClick - зачем нужен OnMouseDown на кнопке? Кнопка должна быть кнопкой, и - все. Городить какой-то код на все случаи жизни - не в правилах Компактной библиотеки объектов.


 
homm ©   (2005-11-12 11:34) [3]

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-12 17:45) [4]

ничего не прав. Он запускает модальный системный диалог по OnMouseDown. В итоге теряется где-то WM_MOUSEUP - не обрабатывается, и система (именно система) считает, что кнопка мыши уже нажата. Исправить можно кликнув правой клавишей мыши, но это неверно вообще - не давать обрабатываться сообщениям. Можно хотя бы postmsg сделать, и уже там свой диалог показывать. Проще работать через OnClick на кнопке.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.058 c
15-1154506020
KygECHuK
2006-08-02 12:07
2006.08.27
Что за ошибка ?


2-1154794421
Yusuf
2006-08-05 20:13
2006.08.27
Большие текстовые файлы


2-1155087755
vladimirg88
2006-08-09 05:42
2006.08.27
Форма


2-1154729045
Петюха
2006-08-05 02:04
2006.08.27
Отправка писем


9-1133447973
Cash
2005-12-01 17:39
2006.08.27
OpenGL - Создание текстур




   Наверх