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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2009, 01:24   #1
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию Координты курсора на форме

Здраствуйте, мне надо при бездействии сворачивать приложение, решил это сделать через таймер определяя координаты курсора, но вот праблема, как считывать координаты относитлеьн оформы


Код:
Label6.Caption:=inttostr(MyMouse.CursorPos.x) + 'Õ ' + inttostr(MyMouse.CursorPos.y);
так показывает если курсор над формой но елси курсор попадает на другие компанент, то всё, коордынаты не считываются, писать в каждый
компанент на форме нереально ибо для кждого будит своя точка (0;0)

Помойму както можно сделать это черзе канвас но я не знаю как, подскажите пожайлуста решение, поиск по форуму не дал ответов
Dozent вне форума Ответить с цитированием
Старый 10.10.2009, 01:32   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

просто таймером сравниваешь глобальные координаты курсора, если они равны то запускаешь другой таймер, по истечению которого сворачивается форма, но если курсор подвинется(это в первом таймере), то останавливаешь и обнуляешь второй.

Добавлено:
Вот так получаем координаты курсора:
Код:
var
  cur: TPoint;
begin
  GetCursorPos(cur);
end;

Последний раз редактировалось TwiX; 10.10.2009 в 01:35.
TwiX вне форума Ответить с цитированием
Старый 10.10.2009, 01:41   #3
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

ну да, а чо с чем сравнивать?
1 таймере считывать координаты и присваивать переменым? а во втором считывать и сравнивать с перемеными? так?
не могу уловить алгоритм... Бошка уже болит, целый ден ькодю
Dozent вне форума Ответить с цитированием
Старый 10.10.2009, 01:41   #4
Vladya
Форумчанин
 
Аватар для Vladya
 
Регистрация: 04.11.2008
Сообщений: 360
По умолчанию

я, если честно, не совсем понял что Вы имели ввиду под словом "бездействии" но как мне показалось это то что если курсор находится не на форме, так? Если да то вот код:

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
Var
FormPos: TRect;
CursorPos: TPoint;
Begin
GetCursorPos(CursorPos );
FormPos:=Rect(Form1.Left,Form1.Top,Form1.Left + Form1.Width,Form1.Top + Form1.Height);
If PtInRect(FormPos,CursorPos) Then
Begin
//Реакция проекта если курсор находится над формой
End
Else
Begin
// Действие если курсор не над формой
End;
End;
Мой скромненький сайт
Vladya вне форума Ответить с цитированием
Старый 10.10.2009, 10:47   #5
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Цитата:
Сообщение от Dozent Посмотреть сообщение
ну да, а чо с чем сравнивать?
1 таймере считывать координаты и присваивать переменым? а во втором считывать и сравнивать с перемеными? так?
не могу уловить алгоритм... Бошка уже болит, целый ден ькодю
В начале загоняем позицию курсора, например, в pos:TPoint.
Потом начинаем каждые десять мс проверять позицию курсора... Надоело писать) Вот держи (только не смог понять почему фокус форме не передаётся - она разворачивается на задний план):
Разве showwindow(form1.hadle, sw_show) не должно автоматически фокус передвать этому окну?
Вложения
Тип файла: zip Timers.zip (4.9 Кб, 14 просмотров)
TwiX вне форума Ответить с цитированием
Старый 10.10.2009, 11:06   #6
andreibtzt
Заблокирован
 
Регистрация: 04.04.2009
Сообщений: 43
По умолчанию

Код:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Caption := 'x='+inttostr(x) + '  Y='+ IntToStr(y);
end;
andreibtzt вне форума Ответить с цитированием
Старый 10.10.2009, 12:41   #7
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Цитата:
Сообщение от andreibtzt Посмотреть сообщение
Код:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Caption := 'x='+inttostr(x) + '  Y='+ IntToStr(y);
end;
А если курсор за формой?
TwiX вне форума Ответить с цитированием
Старый 10.10.2009, 12:56   #8
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

TwiX, спасибо большое за код) но токок он работает один раз при запуске)) Ша буду вертеть и ешё
Код:
Application.MainFormOnTaskbar := True;
ошибку выдаёт
Dozent вне форума Ответить с цитированием
Старый 10.10.2009, 13:01   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...очевидно, под бездействием автор подразумевает если пользователь мышой не шевелит, вне зависимости от того где находиться мыша...
по таймеру:
Код:
var t: tpoint;
     curx,cury,cnt: integer;

 //триггер движения-
TForm1.Timer1Timer(Sender: TObject); //interval на 1000
 getcursorpos(t);
 if (abs(t.X-curx)>5) or(abs(t.Y-cury)>5) then begin
  p:=true;
  cnt:= 0
end else begin
 p:=false;
 inc(cnt)
end;

 curx:=t.x;cury:=t.y;
 if (not p)and(cnt>4) then begin //через 4 сек
  cnt:= 0;
  hide
 end
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 10.10.2009, 13:07   #10
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

ИЗ всего это упростил твой код под свои нужды

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  tmp:TPoint;
begin
GetCursorPos(tmp);
sleep(1000);
If (tmp.X=cur.X)and(tmp.Y=cur.Y) then Application.Minimize;
cur:=tmp;
end;
Вот мне надо чтобы при простои сворачивалась, а развртывание автоматом ненужно, но тут возникла маленькая проблема, сильно тормазит проект, както можно отладить его чтобы не тормазил, при перетаскивание форма тормазит да и ваше курсор рывками двигается, напрягает

тормазит токо форма проект...

Последний раз редактировалось Dozent; 10.10.2009 в 13:14.
Dozent вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отлов Курсора. BARNEY Общие вопросы Delphi 3 04.08.2009 09:16
Перемещение курсора kykysya БД в Delphi 2 07.04.2009 20:33
Рисунок курсора Fellics{новичок} Помощь студентам 2 25.05.2008 20:04
Координаты курсора Haster Win Api 8 06.08.2007 12:04
Координаты курсора относительно объекта на форме CoDeR Общие вопросы Delphi 4 01.08.2007 22:49