Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2009, 09:35   #1
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 103
Радость Изменить курсор при перемещении формы

Необходимо изменять курсор при перемещении формы с crDefault на crSizeAll

пробовал такой вариант но он меняет курсор не после начала перемещения формы а по MouseOnDown

Код:
 Private
   Procedure WMSysCommand (Var Msg: TWMSysCommand); Message WM_SYSCOMMAND;

.
.
.

Procedure TForm1.WMSysCommand(Var Msg: TWMSysCommand);
  Begin
   If ((Msg.cmdType And $FFF0)=SC_MOVE ) Then Cursor:=crSizeAll;
   Inherited;
   Cursor:=crDefault
 End;
необходимо менять курсор по событию перемещения формы и восстанавливать по отпусканию кнопки мышки

как это реализовать?
Никто не знает больше чем не знаю я
Nester вне форума Ответить с цитированием
Старый 28.09.2009, 09:48   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

В твой пример допиши проверку на позицию формы.
По mouseDown сохраняем позицию, а твоей процедуре сравниваем текущую позицию и сохранённую.
TwiX вне форума Ответить с цитированием
Старый 28.09.2009, 10:39   #3
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 103
По умолчанию

не выходит WMSysCommand срабатывает раньше чем FormMouseDown
Никто не знает больше чем не знаю я
Nester вне форума Ответить с цитированием
Старый 28.09.2009, 11:01   #4
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Вообще-то перемещение и изменение размеров лучше всего отслеживать в сообщении WM_EXITSIZEMOVE (ну как вариант можно попробовать) , итак имеем :
Код:
  public
    procedure WMEXITSIZEMOVE(var Message: TMessage); message WM_EXITSIZEMOVE;
....
....
procedure TForm1.WMEXITSIZEMOVE(var Message: TMessage);
begin
  ....// что-то делаем
  ....
  inherited;
end;
P.S. прошу прощения - это не то что тебе нужно ... сообщение можно не читать ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT

Последний раз редактировалось Kotofff; 28.09.2009 в 11:05.
Kotofff вне форума Ответить с цитированием
Старый 28.09.2009, 11:03   #5
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 103
По умолчанию

и так не правильно работает

Код:
Procedure TForm1.WMEnterSizeMove;
 Begin
  Cursor:=crSizeAll;;
  Inherited
End;

Procedure TForm1.WMExitSizeMove;
 Begin
  Inherited;
  Cursor:=crDefault;
 End;
причём WMEnterSizeMove срабатывает если нажать кнопку и удерживать её гдето секунду
Никто не знает больше чем не знаю я
Nester вне форума Ответить с цитированием
Старый 28.09.2009, 11:06   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

http://www.programmersforum.ru/showthread.php?t=58809
Читаем, разбираемся...
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 28.09.2009, 11:56   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

может это поможет
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.09.2009, 12:02   #8
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 103
По умолчанию

всё равно не работает вот пример:
Вложения
Тип файла: rar 123.rar (162.4 Кб, 9 просмотров)
Никто не знает больше чем не знаю я
Nester вне форума Ответить с цитированием
Старый 28.09.2009, 12:47   #9
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

может это поможет #
SetSystemCursor(GetCursor, OCR_CROSS);
вместо OCR_CROSS можно написать еще
OCR_NORMAL — нормальный курсор в виде стрелки;
OCRIBEAM — курсор, используемый для выделения текста;
OCR_WAIT — большие песочные часы;
OCR_CROSS — крестик;
OCRJJP — стрелка вверх;
OCRSIZE — курсор изменения размера;
OCR_ICON — значок;
OCR_SIZENWSE или OCR_SIZENESW — курсор, используемый для растяги-
вания объекта;
OCR__SIZEWE — курсор горизонтального изменения размера;
OCR SIZENS — курсор вертикального изменения размера;
OCR_SI2EALL — курсор горизонтального и вертикального изменения
размера;
OCRSIZENO — интернациональный несимвольный курсор;
OCR_APPSTARTING — маленькие песочные часы со стрелкой.
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 28.09.2009, 13:37   #10
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 103
По умолчанию

проблема скорее всего в том что событие WM_SetCursor срабатывает после отпускания кнопки мышки

возможно нужно както так

Код:
 Procedure TForm1.WMMOVING;
  Begin
   Cursor:=crSizeAll;
   тут посылаем WM_SetCursor
 End;
Никто не знает больше чем не знаю я
Nester вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура при перемещении формы Alex Cones Общие вопросы Delphi 7 28.07.2009 09:11
Запоминание координат при перемещении формы Shouldercannon Общие вопросы Delphi 5 21.06.2009 23:11
Возможно ли изменить курсор в PopupMenu и MainMenu? Volkogriz Общие вопросы Delphi 2 30.10.2007 13:48
Определение X и Y координат PaintBox при перемещении курсора мыши Vladimir K. Общие вопросы Delphi 3 04.01.2007 10:45