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

Вниз

Cursor in RUNTIME   Найти похожие ветки 

 
WondeRu ©   (2004-04-26 08:27) [0]

Почему курсор не меняется:


procedure TForm1.Panel1MouseMove(Sender: TObject; Shift:ShiftState; X, Y: Integer);
begin
 if ssLeft in Shift
   then
     Panel1.Cursor := crHandPoint
   else
     Panel1.Cursor := crDefault
end;



А следующий код превосходно работает:


procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 if ssLeft in Shift
   then
     Screen.Cursor := crHandPoint
   else
     Screen.Cursor := crDefault
end;



Необходимо реализовать изменение курсора над панелькой принажатой клавиши мыши, но при этом курсор за панелью не должен меняться!


 
Nikolay M. ©   (2004-04-26 09:22) [1]

Например, можно написать маленького наследника:

type TMyPanel = class (TPanel)
 public
   procedure CMMouseEnter(var Message: Msg); message CM_MOUSEENTER;
   procedure CMMouseLeave(var Message: Msg); message CM_MOUSELEAVE;
end;

procedure TMyPanel.CMMouseEnter(var Message: Msg);
begin
    Screen.Cursor := crHandPoint;
end;

procedure TMyPanel.CMMouseLeave(var Message: Msg);
begin
    Screen.Cursor := crDefault;
end;

Но если ты нажал кнопку, скажем, на форме и, не отпуская кнопку, перевел курсор на панель, то событие о мыше не придет, потому как мышь будет захвачена окном формы (из Win32 SDK:
The WM_MOUSEMOVE message is posted to a window when the cursor moves. If the mouse is not captured, the message is posted to the window that contains the cursor. Otherwise, the message is posted to the window that has captured the mouse.).
Если тебя такой вариант устроит, тогда флаг в руки. Иначе придется дополнительно отлавливать захват мыши.


 
WondeRu ©   (2004-04-26 09:37) [2]

проблема:

если у панели есть PopupMenu, то эти сообщения обрабатываются некорректно(((

(нажимаем правой кнопкой, выводится меню, потом курсор за панельку и он остается хэндпоинт)


 
Nikolay M. ©   (2004-04-26 09:48) [3]

Screen.Cursor := crDefault;
замени на
Cursor := crDefault;
от твоего кода осталось :)


 
WondeRu ©   (2004-04-26 10:09) [4]

а как же обрабатывать
if ssLeft in Shift?


 
WondeRu ©   (2004-04-26 10:34) [5]

Так что ж придется мириться с глючностью компонентов?


 
Nikolay M. ©   (2004-04-26 15:13) [6]


> а как же обрабатывать
> if ssLeft in Shift?

GetAsyncKeyState, например.



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

Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.032 c
3-1082189318
Koba
2004-04-17 12:08
2004.05.16
База данных


6-1080034438
Aks
2004-03-23 12:33
2004.05.16
принадлежность ип к данной группе


4-1079499482
Vilux
2004-03-17 07:58
2004.05.16
Не работает FindWindow


7-1080704871
Мыш
2004-03-31 07:47
2004.05.16
Как узнать высоту таскбара и высоту заголовка окна?


1-1082976043
Dron1
2004-04-26 14:40
2004.05.16
Как сохранить исходное форматирование при копировании в Excel





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский