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

Добавление и управление курсором мыши в приложении Android с помощью Delphi

Delphi , Компоненты и Классы , Библиотеки компонент

В статье рассматривается проблема добавления и управления курсором мыши в приложении Android с помощью Delphi. Предлагается решение, основанное на использовании компонента TWebBrowser и JavaScript для симуляции клика на элементе веб-страницы.

Для решения этой проблемы можно использовать компонент TWebBrowser и JavaScript для симуляции клика на элементе веб-страницы. Вот шаги, которые необходимо выполнить:

  1. Добавьте компонент TWebBrowser на форму.
  2. Установите свойство Visible компонента TWebBrowser в True.
  3. Установите свойство Enabled компонента TWebBrowser в True.
  4. В коде формы наведите курсор на элемент веб-страницы, на котором нужно выполнить клик.
  5. Вызовите метод ExecuteJavaScript компонента TWebBrowser, передав ему JavaScript-код для симуляции клика на элементе.
  6. В 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




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


:: Главная :: Библиотеки компонент ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:18:10/0.0055000782012939/1