В статье рассматривается проблема добавления и управления курсором мыши в приложении Android с помощью Delphi. Предлагается решение, основанное на использовании компонента TWebBrowser и JavaScript для симуляции клика на элементе веб-страницы.
Для решения этой проблемы можно использовать компонент TWebBrowser и JavaScript для симуляции клика на элементе веб-страницы. Вот шаги, которые необходимо выполнить:
Добавьте компонент TWebBrowser на форму.
Установите свойство Visible компонента TWebBrowser в True.
Установите свойство Enabled компонента TWebBrowser в True.
В коде формы наведите курсор на элемент веб-страницы, на котором нужно выполнить клик.
Вызовите метод ExecuteJavaScript компонента TWebBrowser, передав ему JavaScript-код для симуляции клика на элементе.
В JavaScript-коде найдите элемент на веб-странице, на котором нужно выполнить клик, и вызовите метод click() для этого элемента.
Ниже приведен пример кода на Object Pascal (Delphi), демонстрирующий это решение:
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.ScrollBox, FMX.Memo, FMX.Controls.Presentation, IdBaseComponent,
IdComponent, IdCustomTCPServer, IdTCPServer, IdContext,
Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.JavaTypes, Androidapi.Helpers, Androidapi.JNI.NET,
System.IOUtils, FMX.Edit, FMX.Objects, FMX.Memo.Types,
System.Permissions,
Androidapi.Jni.Os,
Androidapi.JNI.Webkit, FireDAC.UI.Intf, FireDAC.FMXUI.Wait, FireDAC.Stan.Intf,
FireDAC.Comp.UI, FMX.WebBrowser, FMX.Ani, DW.NativeImage, DW.NativeShape;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
NativeImage1: TNativeImage;
procedure FormCreate(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
Shift: TShiftState);
procedure FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Muis_Cursor_Max_Horz: Integer;
Muis_Cursor_Max_Vert: Integer;
Muis_Cursor_Stap_Groote: Integer;
Muis_Cursor_Horz: Integer;
Muis_Cursor_Vert: Integer;
Site: String;
implementation
{$R *.fmx}
//------------------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
//Form1
Form1.ClientHeight:= 536; //Scherm hoogte
Form1.ClientWidth:= 955; //Scherm Breedte
//Instel waardes:
Muis_Cursor_Max_Horz := 940;
Muis_Cursor_Max_Vert := 520;
Muis_Cursor_Stap_Groote := 5;
//Begin Waardes:
Muis_Cursor_Horz := 470;
Muis_Cursor_Vert := 260;
//De Moude Cursor op het begin punt zetten:
NativeImage1.Position.X := Muis_Cursor_Horz;
NativeImage1.Position.Y := Muis_Cursor_Vert;
end;
//------------------------------------------------------------------------------
procedure TForm1.FormActivate(Sender: TObject);
begin
Site:= 'https://en.delphipraxis.net/topic/12144-mouse-cursor/';
WebBrowser1.Navigate ( Site );
end;
//------------------------------------------------------------------------------
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
Shift: TShiftState);
begin
if Key = vkDown then
begin
Muis_Cursor_Vert := Muis_Cursor_Vert + Muis_Cursor_Stap_Groote;
if Muis_Cursor_Vert > Muis_Cursor_Max_Vert then Muis_Cursor_Vert := 0;
NativeImage1.Position.Y := Muis_Cursor_Vert;
end;
if Key = vkUp then
begin
if Muis_Cursor_Vert > -1 then Muis_Cursor_Vert := Muis_Cursor_Vert - Muis_Cursor_Stap_Groote;
if Muis_Cursor_Vert < 0 then Muis_Cursor_Vert := Muis_Cursor_Max_Vert;
NativeImage1.Position.Y := Muis_Cursor_Vert;
end;
if Key = vkRight then
begin
Muis_Cursor_Horz := Muis_Cursor_Horz + Muis_Cursor_Stap_Groote;
if Muis_Cursor_Horz > Muis_Cursor_Max_Horz then Muis_Cursor_Horz := 0;
NativeImage1.Position.X := Muis_Cursor_Horz;
end;
if Key = vkLeft then
begin
if Muis_Cursor_Horz > -1 then Muis_Cursor_Horz := Muis_Cursor_Horz - Muis_Cursor_Stap_Groote;
if Muis_Cursor_Horz < 0 then Muis_Cursor_Horz := Muis_Cursor_Max_Horz;
NativeImage1.Position.X := Muis_Cursor_Horz;
end;
end;
//------------------------------------------------------------------------------
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
Shift: TShiftState);
var
Cursor_Position_X: Integer;
Cursor_Position_Y: Integer;
begin
if ((vartostr(Key) = '0') and (KeyChar = '')) then
begin
//Op OK gedrukt
Cursor_Position_X := Round( NativeImage1.Position.X );
Cursor_Position_Y := Round( NativeImage1.Position.Y );
//Симуляция клика на элементе веб-страницы
var Script: string;
Script := Format('document.elementFromPoint(%d, %d).click();', [Cursor_Position_X, Cursor_Position_Y]);
WebBrowser1.ExecuteJavaScript(Script);
end;
end;
//------------------------------------------------------------------------------
end.
При нажатии клавиши Enter на форме вызывается метод FormKeyUp, в котором определяется текущее положение курсора и вызывается метод ExecuteJavaScript компонента TWebBrowser для симуляции клика на элементе веб-страницы в точке, соответствующей положению курсора.
В качестве альтернативного решения можно рассмотреть использование библиотеки Kastri, которая предоставляет нативные компоненты для работы с веб-контентом на платформе Android. С помощью библиотеки Kastri можно добавить на форму компоненты TNativeImage и TNativeRectangle, которые позволят отображать курсор мыши и выполнять клики на элементах веб-страницы. Для этого необходимо установить пакет KastriFMX и добавить компоненты на форму. Затем можно использовать методы компонента TNativeImage для управления курсором и методы компонента TNativeRectangle для симуляции кликов на элементах веб-страницы.
В статье рассматривается проблема управления курсором мыши в приложении Android, использующем Delphi, и предлагается решение с использованием компонента TWebBrowser и JavaScript для симуляции кликов на элементах веб-страницы.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.