Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.22;
Скачать: CL | DM;

Вниз

Как определили, что щелкнули мышкой не по моему компоненту?   Найти похожие ветки 

 
avr555 ©   (2002-07-08 18:11) [0]

У меня есть компонент и мне нужно определить, что с ним закончили работать.
Т.е. щелкнули куда-то в другое место.
OnExit не подходит, т.к оно не срабатывает при щелчке, допустим, на панели.

Что мне делать?


 
Skier ©   (2002-07-08 18:14) [1]

>avr555
WM_CANCELMODE ?


 
avr555 ©   (2002-07-08 18:25) [2]

Может я что-то неправильно делаю?
type
TTest1 = class(TVirtualStringTree)
procedure Test(var Mess : TMessage); message WM_CANCELMODE;
end;

.....

procedure TTest1.Test(var Mess: TMessage);
begin
MessageDlg("Lost Focusssssss!!!!", mtWarning, [mbOK], 0);
end;


И ничего не происходит :(


 
Skier ©   (2002-07-08 18:31) [3]

>avr555
Используй СM_CANCELMODE (ошибка вышла :) )

procedure TTest1.CMCancelMode(var Msg: TCMCancelMode);
begin
inherited;
if Msg.Sender <> Self then begin
MessageDlg("Lost Focusssssss!!!!", mtWarning, [mbOK], 0);
end; //if
end;


 
avr555 ©   (2002-07-08 18:50) [4]

Спасибо, вроде работает.


 
MsGuns ©   (2002-07-08 20:50) [5]

А нельзя просто OnExit ?


 
avr555 ©   (2002-07-09 17:03) [6]


> MsGuns © (08.07.02 20:50)


OnExit срабатывает только если мы переходим напримир с одного TEdit в другой TEdit. А если во время редактирования щелкнуть по панели, то такое событие не происходит.

> Skier © (08.07.02 18:31)


После тщательного тестирования выяснилось, что это срабатывает только если кликать на одного из парентов. В другом случае это не срабатывает.


 
Skier ©   (2002-07-09 17:14) [7]

>avr555
А ты с SetCapture и ReleaseCapture не игрался ?


 
avr555 ©   (2002-07-09 17:57) [8]

Вообще у меня в компоненте это используется.
А как это влияет?


 
Skier ©   (2002-07-09 18:15) [9]

>avr555
Это может влиять (хотя не факт).
В общем, умозрительно трудно что-нибудь сказать определённо .

Есть ещё сообщение WM_ACTIVATE может тебе через него попытаться...


 
avr555 ©   (2002-07-09 18:28) [10]

Я так понял это сообщение передается окнам которые активизируются и деактивизируются?


 
Fiend ©   (2002-07-09 18:34) [11]

А можно тогда с другой стороны подойти??

А что должно случиться с вашим компонентом, когда юзер кликнул на другом, но фокус всё же ваш компонент не потерял


 
Skier ©   (2002-07-09 18:39) [12]

>avr555
Я думаю что оно будет приходить и к оконным компонентам (потомки TWinControl), только видимо опять нужно использовать
СM_ACTIVATE


 
avr555 ©   (2002-07-09 19:11) [13]

>Skier
Сделал по оаналогии с СM_CANCELMODE - никакой реакции.

>Fiend
Я работаю с компонентом TVirtualStringTree.
Начинаю редактировать ячейку и мне нужно определить, когда нужно принудительно закончить редактирование. Сам компонент заканчивает редактирование только при потере фокуса, а мне нужно, чтоб при нажатии на что угодно заканчивалось редактирование (в основном проблема с кнопками).


 
Skier ©   (2002-07-09 19:17) [14]

>avr555
Так ты объяснил Fiend, то - СM_CANCELMODE это то что тебе
нужно !


А вообще высылай мне свой код (вместе с TVirtualStringTree) и объясни что требуется. Завтра с утра может быть покопаюсь...



 
TTCustomDelphiMaster ©   (2002-07-09 21:11) [15]

Вообще нужно ловить кучу событый от мышки. Для этого размести на форме TApplicationEvents и напиши примерно следующее

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin

if Msg.message = WM_LBUTTONDOWN then
begin
нажали ЛКМ в одном из окон твоего приложения
по координатам или еще как нибудь попытайся определить есть ли на этом месте твой компонент
end;

if Msg.message = WM_MBUTTONDOWN then
begin
тоже для СКМ
end;

if Msg.message = WM_RBUTTONDOWN then
begin
тоже для ПКМ
end;

if Msg.message = WM_NCLBUTTONDOWN then
begin
нажали ЛКМ в одном из окон твоего приложения в неклиентской области (на заголовке, границах формы) и соответственно не на твоем компоненте
end;
обработай также WM_NCMBUTTONDOWN и WM_NCRBUTTONDOWN
end;


procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);
begin
Это событие происходит при деактивации приложения, т.е. нажали кнопку не в твоем приложении.
end;



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

Текущий архив: 2002.07.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
3-70655
TVU
2002-07-01 16:33
2002.07.22
Как прекратить выполнение сохраненой процедуры в MSSQL 7.0


3-70635
ASM
2002-07-01 15:20
2002.07.22
FormattedMemo?


3-70584
Zamiran
2002-06-28 15:47
2002.07.22
Помогите пожалуйста !!!!!!


1-70799
Пастор
2002-07-05 08:57
2002.07.22
Реестр или ini ?


1-70804
Ulugbek
2002-07-10 10:30
2002.07.22
Про InstallShield.