MouseAndKeyInput не отжимается кнопка мыши

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
ViTality
постоялец
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

MouseAndKeyInput не отжимается кнопка мыши

Сообщение ViTality »

MouseAndKeyInput это такой компонент-некомпонент в Лазарусе который позволяет эмулировать нажатия мыши и клавы.
Вот столкнулся с проблемой, что кнопка мыши, какбы, "не отжимается" [s]если было перемещение[/s].

Этот код из примера выделяющий ячейки отрабатывает нормально

Код: Выделить всё

 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.QueueAsyncCall(@SelectCells, 0);
end;

procedure TForm1.SelectCells(Data: PtrInt);
begin
  StringGrid1.SetFocus;
  Application.ProcessMessages;
  MouseInput.Down(mbLeft, [], StringGrid1, 10, 10);
  MouseInput.Up(mbLeft, [], StringGrid1, 200, 100);
end;

А вот в следующем коде (нужно переместить окно) кнопка "залипает". и приходится уже самому еще раз щелкать мышью чтоб отпустило

Код: Выделить всё

procedure TForm1.MoveWindow(Data: PtrInt);
begin
  Application.ProcessMessages;
  MouseInput.Down(mbLeft, [], form1.Left+50, form1.Top+10);
  MouseInput.Up(mbLeft, [], 10, 10);
end;

подскажите в чем трабл? как "отпустить" окно?

Добавлено спустя 1 час 21 минуту 59 секунд:
проверил просто

Код: Выделить всё

 
Application.ProcessMessages;
  MouseInput.click(mbLeft, [], form1.Left+50, form1.Top+10);

тоже залипает... значит перемещение тут не причем...

Добавлено спустя 21 минуту 34 секунды:
проблема возникает только с окном собственного приложения
Аватара пользователя
Verx0Laz
постоялец
Сообщения: 125
Зарегистрирован: 11.09.2007 11:24:07

Сообщение Verx0Laz »

А так пробовал?

Код: Выделить всё

    procedure TForm1.MoveWindow(Data: PtrInt);
    begin
      MouseInput.Down(mbLeft, [], form1.Left+50, form1.Top+10);
      MouseInput.Up(mbLeft, [], 10, 10);
      Application.ProcessMessages;
    end;

Или так?

Код: Выделить всё

    procedure TForm1.MoveWindow(Data: PtrInt);
    begin
      Application.ProcessMessages;
      MouseInput.Down(mbLeft, [], form1.Left+50, form1.Top+10);
      MouseInput.Up(mbLeft, [], 10, 10);
      Application.ProcessMessages;
    end;
ViTality
постоялец
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Сообщение ViTality »

попробовал. не помогает(
Сделал тоже самое через mouse_event - не залипает, но окно появляется уже в месте отпускания кнопки. а нужно чтоб двигалось вместе с курсором

Код: Выделить всё

x:=Round((form1.Left+50) * (65535 / Screen.Width));
y:=Round((form1.Top+10) * (65535 / Screen.Height));
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, x, y, 0, 0);
sleep(500);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
sleep(500);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, x+10000, y+10000, 0, 0);
sleep(500);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, x+20000, y+20000, 0, 0);
sleep(500);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, x+30000, y+30000, 0, 0);
sleep(500);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, x+30000, y+30000, 0, 0);
sleep(1500);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, 0, 0, 0, 0);

если повтыкать после каждого действия Application.ProcessMessages;
то перемещается но "криво" и опятьже залипает на курсор(
Ответить