Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.07.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
1-70781
eruc
2002-07-09 22:10
2002.07.22
ListBox1


1-70761
Fiend
2002-07-09 18:21
2002.07.22
Service


3-70593
jaric
2002-06-28 16:25
2002.07.22
Проблемы с Halcyon


1-70783
race1
2002-07-09 15:47
2002.07.22
незнаю


14-70878
Val
2002-06-21 11:26
2002.07.22
Краткий курс английского для инженеров





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский