Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Корректное отображение координат касания на экране Android устройства через Delphi

Delphi , Программа и Интерфейс , Процессы и Сервисы

Как рассчитать координаты X, Y для имитации касания на экране?

В рамках проекта по удаленному управлению смартфонами на Android вы столкнулись с необходимостью имитации касаний на экране, используя координаты курсора мыши внутри компонента Image в Delphi. Это компонент отображает экран удаленного устройства. В вашем проекте компонент Image расположен внутри компонента ScrollBox. Оба компонента настроены следующим образом:

  • Image компонент: Align: alNone, AutoSize: True
  • ScrollBox компонент: Align: alClient, AutoScroll: True, AutoSize: False

Код для изменения размеров Image компонента:

procedure TForm2.Checkbox1Click(Sender: TObject);
begin
  if Checkbox1.Checked then
  begin
    Image1.AutoSize := False;
    Image1.Stretch := True;
    Image1.Align := alClient;
  end
  else
  begin
    Image1.AutoSize := True;
    Image1.Stretch := False;
    Image1.Align := alNone;
  end;
end;

Для отправки координат используется процедура Image1MouseDown:

procedure TForm2.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  X := (X * Image1.Width) div Image1.Width;
  Y := (Y * Image1.Height) div Image1.Height;
  // Отправка координат на Android устройство
end;

Вы также попытались применить подобный подход в коде на Java (Android), но касания происходили в неправильных местах:

if (xline.contains("touch")) {
    String coordinates = xline.replace("touch", "");
    String[] tokens = coordinates.split(Pattern.quote("<|>"));
    float x = parseFloat(tokens[0]);
    float y = parseFloat(tokens[1]);
    int screenWidth = getResources().getDisplayMetrics().widthPixels;
    int screenHeight = getResources().getDisplayMetrics().heightPixels;
    x = (x * screenWidth) / screenWidth;
    y = (y * screenHeight) / screenHeight;
    // Касание на экране с координатами x и y
}

Проблема заключалась в том, что операции с координатами не изменяли их значение, как ожидалось, и касания происходили в местах, отличных от тех, где был совершен клик мышью на экране компонента TImage в приложении Delphi.

Решение проблемы было найдено и заключается в следующем:

procedure TForm2.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  Index, XTouch, YTouch, RXCoord, RYCoord: Integer;
  List: TStrings;
  RScreen: String;
begin
  Index := Form1.ListView1.ItemIndex;
  if Index = -1 then
    Exit;
  List := TStringList.Create;
  RScreen := Form1.ListView1.Selected.SubItems[6];
  try
    ExtractStrings(['x'], [], PChar(RScreen), List);
    RYCoord := StrToInt(List[0]); // Высота экрана устройства
    RXCoord := StrToInt(List[1]); // Ширина экрана устройства
  finally
    List.Free;
  end;
  XTouch := Round((X / Image1.Width) * RXCoord);
  YTouch := Round((Y / Image1.Height) * RYCoord);
  Form1.SS1.Socket.Connections[Index].SendText('touch' + IntToStr(XTouch)
    + '<|>' + IntToStr(YTouch) + #13#10);
end;

В данном решении используется информация о разрешении экрана устройства для корректного преобразования координат из компонента Image в реальные физические размеры экрана устройства.

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

Создано по материалам из источника по ссылке.

В рамках проекта по удаленному управлению смартфонами на Android необходимо рассчитать координаты X и Y для имитации касаний на экране с учетом масштабирования компонента `Image` в Delphi и реальных размеров экрана устройства.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Процессы и Сервисы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 22:28:51/0.0061221122741699/0