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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2009, 13:48   #1
anger
Пользователь
 
Регистрация: 31.10.2007
Сообщений: 20
По умолчанию Проблемы с работой с курсором.

помогите понять что не так в листинге?
Суть:
модуль для программы. должен снимать положение курсора и если он остановится то центрировать его(по центру экрана ставить).
вроде все правильно но почемуто не работает=(

листинг
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit4: TEdit;
    Button3: TButton;
    procedure FormActivate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
edit1.Text:= inttostr(500);
edit2.text:= inttostr(Screen.Width);
edit3.text:= inttostr(Screen.Height);
end;

procedure TForm1.Button3Click(Sender: TObject);
label beginOfcycle3;
var  P: TPoint;
x,y:array [1..2] of integer;
xq,yq:integer;
begin
xq:=  (strtoint(edit2.text)div 2);
yq:=  (strtoint(edit3.text) div 2 );
GetCursorPos(P);
x[1]:=0;
y[1]:=0;
repeat
    GetCursorPos(P);
    x[2]:=P.X;
    y[2]:=P.Y;
    if ((y[2] = y[1])and(x[2]=x[1]))and(x[2]<xq)and(y[2]<xq) then
    begin
      SetCursorPos(xq , yq); // ставим курсор в центр
      x[1]:=x[2];
      y[1]:=y[2];
    end;
sleep(100); // к примеру
until getasynckeystate(VK_CANCEL)<>0;
end;

end.
anger вне форума Ответить с цитированием
Старый 12.05.2009, 13:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и если он остановится
А как ты определяешь что он двигается?
Кстати есть класс Mouse.CursorPos - им удобнее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2009, 13:59   #3
anger
Пользователь
 
Регистрация: 31.10.2007
Сообщений: 20
По умолчанию

определяю сравнивая нынешнее положение с предыдущим.
надо именно с GetCursorPos(P); =(
не пойму почему не пашет=(

исходники. может кто поможет?
привязана эта штука к батону3
Вложения
Тип файла: zip 1.zip (2.4 Кб, 7 просмотров)

Последний раз редактировалось Stilet; 12.05.2009 в 14:33.
anger вне форума Ответить с цитированием
Старый 12.05.2009, 14:34   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не пойму почему не пашет=(
А чего он должен пахать коль ты его вызываешь только по нажатию клавиши...
Не пойму я твою задачу...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2009, 15:23   #5
anger
Пользователь
 
Регистрация: 31.10.2007
Сообщений: 20
По умолчанию

по нажатию клавиши вызывается цикл в котором проверяется положение мыши и если совпадают х и у текущие с предыдущими то происходит центрирование. осталось найти ошибку =(
anger вне форума Ответить с цитированием
Старый 12.05.2009, 15:53   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Допустим, а это что?
Код:
and(x[2]<xq)and(y[2]<xq)
Зачем тебе это, можеш задачу описать... иначе я лично просто затрудняюсь пдсказать верный ход
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2009, 15:59   #7
anger
Пользователь
 
Регистрация: 31.10.2007
Сообщений: 20
По умолчанию

Задача короткая:
требуется добиться автоцентрирования курсора мыши при остановке движения мыши.
Данное приложение должно выполнять свои функции в свернутом виде и не зависеть от событий onMouseMove и прочих.

может кто нибудь подскажет свой вариант? а то я чегото уже туплю сильно.
З.Ы. Stilet, там проверка против захождения за границы экрана.
anger вне форума Ответить с цитированием
Старый 12.05.2009, 16:18   #8
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

во первых Для того чтобы определить, что курсор мыши движется необходимо сравнивать его положение через некоторое незначительное время, например через 0.1с, а не с некоторым начальным фиксированым значением, как у вас.
Всякое безобразие должно быть единообразным. Тогда это называется порядком.
Anatole вне форума Ответить с цитированием
Старый 12.05.2009, 16:44   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
там проверка против захождения за границы экрана.
Ну если учитывать что эта задача для чего-то кроме раздражения пользователя всетки нужна, то присоединяясь к Анатолю добавлю что виндовс насколько я знаю в любом случае не допускает выход мышки за пределы экрана... По крайней мере я таких настроек в винде не видел чтоб позволяли мышке убегать куда и когда угодно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2009, 09:50   #10
anger
Пользователь
 
Регистрация: 31.10.2007
Сообщений: 20
По умолчанию

спасибо за помощь =) нашел ошибку=)
anger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с работой COM порта на Delphi7 sttauffen Помощь студентам 3 11.05.2009 15:02
нужна помощь с работой IceAgainstIce Общие вопросы Delphi 1 19.11.2008 23:51
Проблемы с дипломной работой HAMMAN Помощь студентам 3 16.05.2008 12:38