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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2010, 22:11   #1
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию Запрет выхода курсора за форму

Собственно сабж. Нужно сделать так чтобы курсор не выходил за форму, а останавливался у края (как бэ ударяясь). Пока что придумал только такую тему с таймером, по другому не получается. Помогите пожалуйста, если кто знает как осуществить.
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 25.11.2010, 22:28   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Для этого есть функция ClipCursor. В качестве параметра нужно передать структуру Trect, которая будет указывать область движения курсора. Например: ClipCursor(Rect(10,10,100,100));

Учтите, что использование этой функции - плохой тон.
mihali4 вне форума Ответить с цитированием
Старый 25.11.2010, 22:57   #3
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Спасибо, на основе вашего ответа нашёл решение:

Код:
var
 Rect: TRect;
begin
 Rect.Left:=Left;
 Rect.Top:=Top;
 Rect.Right:=Left+Width;
 Rect.Bottom:=Top+Height;
 ClipCursor(@Rect);
end;
З.Ы. Этот код нужно поставить в таймер
Возможно Я Быдлокодер ©.

Последний раз редактировалось mihali4; 25.11.2010 в 23:40.
t2skler вне форума Ответить с цитированием
Старый 25.11.2010, 23:14   #4
chatlanin
 
Регистрация: 25.11.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от t2skler Посмотреть сообщение
З.Ы. Этот код нужно поставить в таймер
хм.. а почему бы на событие OnMouseMove непоставить?
chatlanin вне форума Ответить с цитированием
Старый 25.11.2010, 23:41   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ни то, ни другое совершенно не нужно.
Вот, набросал рабочий код (можно и по кнопке):
Код:
procedure TForm1.FormActivate(Sender: TObject);
var myr: PRect;
begin
myr.Left:=Left;
myr.Top:=Top;
myr.Right:=Left+Width;
myr.Bottom:=Top+Height;
ClipCursor(myr);
end;
Это - все, что нужно. Никаких таймеров и прочей лабуды...

З.Ы. Только что увидел, что ТС написал то же самое

Последний раз редактировалось mihali4; 25.11.2010 в 23:45.
mihali4 вне форума Ответить с цитированием
Старый 27.11.2010, 01:37   #6
TrapQ
Пользователь
 
Аватар для TrapQ
 
Регистрация: 21.11.2010
Сообщений: 16
По умолчанию

Поправка на ветер

Код:
procedure TForm1.FormActivate(Sender: TObject);
var myr: TRect;{<===!!!}
begin
myr.Left:=Left;
myr.Top:=Top;
myr.Right:=Left+Width;
myr.Bottom:=Top+Height;
ClipCursor(@myr); {<===!!!}
end;
Как два байта переслать...
TrapQ вне форума Ответить с цитированием
Старый 27.11.2010, 01:54   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вы хотите сказать, что мой вариант - нерабочий ?
mihali4 вне форума Ответить с цитированием
Старый 27.11.2010, 11:12   #8
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Цитата:
Вы хотите сказать, что мой вариант - нерабочий ?
Я хочу сказать, пример нерабочий:
1) myr: PRect это указатель, соответственно перед присвоением значений нужно выделить память.
2) Ограничение будет работать после запуска, но любая манипуляция с окном (перемещение, изменение размера, сворачивание/восстановление), отменят эти ограничения.
x128 вне форума Ответить с цитированием
Старый 11.02.2011, 21:46   #9
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Вот, немного переиначил
Код:
var
  ClipRect: TRect;
begin
  ClipRect.Left   := Left + GetSystemMetrics (SM_CXFRAME);
  ClipRect.Right  := ClipRect.Left + ClientWidth;
  ClipRect.Top    := Top + GetSystemMetrics (SM_CYCAPTION) + GetSystemMetrics (SM_CYFRAME);
  ClipRect.Bottom := ClipRect.Top + ClientHeight;
  ClipCursor (@ClipRect);
end;
Запрет выхода за клиентскую область окна.
Sibedir вне форума Ответить с цитированием
Старый 08.04.2011, 10:29   #10
Claster
Форумчанин
 
Аватар для Claster
 
Регистрация: 02.09.2008
Сообщений: 340
По умолчанию

А как сделать нечто подобное с формами когда их 2, сделать что бы 2 форма как бы упиралась в 1 и не могла выйти за нее?
Цитата:
- Только сисадмин может попросить у начальства 20$ на память...
Claster вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет нажатия кнопки и запрет неправильного ввода данных De_Kurlzz Помощь студентам 1 15.06.2011 15:14
Как отловить наведение курсора на форму? Marsel737 Общие вопросы Delphi 11 09.09.2010 23:32
запрет ввода символов в форму MiK_on JavaScript, Ajax 3 19.08.2010 08:37
Одну и ту же форму использовать как MDI-child форму и как модальную форму? PrimaryPro Общие вопросы Delphi 2 10.03.2010 20:52