![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сменить вид указателя мыши при нажатии на левую кнопку. [D7, WinXP]
DVM © (2006-11-29 11:05:00)Сделал потомка от TWinControl. Хочу наделить его способностью перемещаться по родительскому окну. Само перемещение не вызывает проблем. Проблема вот в чем. При нажатии на левую кнопку мыши (кнопку не отпустили еще) хочу поменять указатель на крестик - и не получается. С правой кнопкой, средней - ок, а вот с левой нет почему-то.
Где собака зарыта?
TViewItem2 = class(TCustomControl)
private
...
protected
...
public
...
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
......
......
procedure TViewItem2.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
....
Self.Cursor := crSizeAll;
...
inherited;
end;
DVM (2006-11-29 12:20:00) [1]Все решилось проще:
procedure TViewItem2.WMLButtonDown(var Message: TWMLButtonDown);
begin
Self.Cursor := crSizeAll;
inherited;
end;
clickmaker (2006-11-29 12:13:00) [2]LoadCursor не будет лишнюю работу делать. Она типа умная ))
DVM (2006-11-29 12:11:00) [3]
> clickmaker © (29.11.06 12:08) [5]
Так то я знаю.
Но он же уже загружен приложением. Из списка загруженных его никак?
clickmaker (2006-11-29 12:08:00) [4]
> [4] DVM © (29.11.06 12:06)
LoadCursor(0, IDC_SIZEALL)
DVM (2006-11-29 12:06:00) [5]
> clickmaker © (29.11.06 11:18) [1]
как узнать хэндл курсора, который в делфи обозначен как crSizeAll ?
DVM (2006-11-29 12:05:00) [6]
> REA (29.11.06 11:46) [2]
> Можно попробовать на MouseMove, если MouseCapture то Cursor
> := crSizeAll
Не получится так. MouseMove возникает до того как я нажимаю левую кнопку, а именно по нажатию левой кнопки выставляется флаг FDrag, говорящий в дальнейшем в MouseMove, что окно надо тащить. Пока левая кнопка не отпущена, окну плевать на изменения курсора.
REA (2006-11-29 11:46:00) [7]Можно попробовать на MouseMove, если MouseCapture то Cursor := crSizeAll
clickmaker (2006-11-29 11:18:00) [8]возможно, дело в этом
procedure TControl.WMLButtonDown(var Message: TWMLButtonDown);
begin
SendCancelMode(Self);
как вариант, можно подцепить обработчик WM_SETCURSOR и вызывать в нем SetCursor(SizeCursorHandle), если (GetKeyState(VK_LBUTTON) >> 8) <> 0