【发布时间】:2018-08-20 06:10:09
【问题描述】:
在我的智能手机android远程协助项目中,我正在尝试基于Image组件(Delphi)内的鼠标坐标模拟屏幕触摸(使用AccessibilityService),这就是我接收屏幕的地方远程设备。
Image组件位于ScrollBox组件内
-
Image组件是:对齐:alNone,AutoSize:True -
ScrollBox是:对齐: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;
这就是我发送坐标的方式:
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;
SS1.Socket.Connections[Index].SendText('touch' + IntToStr(X) +
'<|>' + IntToStr(Y) + #13#10);
end;
然后我在 Java 代码 (android) 上尝试了这个:
String xline;
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;
// touch on screen with x and y
}
但触摸发生在非常遥远的地方。
如何解决这个问题?
【问题讨论】:
-
请注意,这些操作不会改变 X 和 Y:
X := (X * Image1.Width) div Image1.Width;。期望的结果是什么?什么坐标? -
@MBo,我想要那个,例如:当我点击 WhatsApp 图标时,智能手机上的触摸也会出现在 whatsapp 图标上。这是希望的结果。
-
那么,没有人知道如何计算这些坐标以在我用鼠标指向
TImage组件的同一位置触摸智能手机屏幕上(上面的Delphi应用程序截图)?
标签: android delphi delphi-10-seattle accessibilityservice