Форум: "Основная";
Текущий архив: 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.45 MB
Время: 0.029 c