Перейти к содержанию
Fire Monkey от А до Я
  • 0

Открыть ссылку


Kitty

Вопрос

Хочу открыть ссылку при щелчке на метку. На форуме нашла код:

uses
  FMX.Helpers.iOS, iOSapi.Foundation

function OpenURL(const AUrl: string): Boolean;
var
  Url: NSURL;
begin
  Url := TNSUrl.Wrap(TNSUrl.OCClass.URLWithString(NSStr(AUrl)));
  Result := SharedApplication.openUrl(Url);
end;

А на С++ не получается:

#include <FMX.Helpers.iOS.hpp>
#include <iOSapi.Foundation.hpp>
void __fastcall TForm1::Text1Click(TObject *Sender)
{
  NSURL Url;//<- как тут правильно?
  //***               

  /* для андроида
   _di_JIntent Intent;
  Intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW);
  Intent->setDataAndType(StrToJURI(L"http://bigburger.cv.ua/index.php"), StringToJString(L"text/html"));
  SharedActivity()->startActivity(Intent);
  */
}  

[bcciosarm Error] UnitBigburger.cpp(29): variable type 'Iosapi::Foundation::NSURL' is an abstract class
 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

Правильный код ведь для Айос, на с++ не работает?

У меня на Делфи есть такой модуль, все работает

Ссылка на комментарий
  • 0
Цитата

Правильный код ведь для Айос, на с++ не работает?

Я не понимаю, что это за тип такой: NSURL,  в смысле как его объявить?

NSURL Url;

[bcciosarm Error] UnitBigburger.cpp(29): variable type 'Iosapi::Foundation::NSURL' is an abstract class

Ссылка на комментарий
  • 0
  • Модераторы
unit modURL;

interface

uses
  System.SysUtils
{$IFDEF ANDROID}
    , Androidapi.Helpers,
  Androidapi.JNI.GraphicsContentViewText;
{$ENDIF}
// ...
{$IFDEF MACOS}
{$IFDEF IOS}
, Macapi.Helpers, iOSapi.Foundation, FMX.Helpers.IOS;
{$ELSE}
, Posix.Stdlib;
{$ENDIF}
{$ENDIF}
// ...
{$IFDEF MSWINDOWS}
, ShellAPI;
{$ENDIF}
procedure openUrl(const aURL: string);

implementation

{$IFDEF ANDROID}

function andUrl(const aURL: string): boolean;
var
  Intent: JIntent;
begin
  Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, StrToJURI(aURL));
  TAndroidHelper.Context.startActivity(Intent);
end;
{$ENDIF}
{$IFDEF IOS}

function iosUrl(const aURL: string): boolean;
var
  NSU: NSUrl;
begin
  NSU := TNSURL.Wrap(TNSURL.OCClass.URLWithString(StrToNSStr(aURL)));
  if SharedApplication.canOpenURL(NSU) then
    SharedApplication.openUrl(NSU);
end;
{$ENDIF}
{$IFDEF MSWINDOWS}

function winUrl(const aURL: string): boolean;
begin
  ShellExecute(0, 'open', pchar(aURL), nil, nil, 0);
  Result := True;
end;
{$ENDIF}
{$IF defined(MACOS) AND not defined(IOS)}

procedure macUrl(const aURL: String);
begin
  _system(PAnsiChar(AnsiString('open ' + aURL)));
end;
{$ENDIF}

procedure openUrl(const aURL: string);
begin
{$IFDEF ANDROID} andUrl(aURL); {$ENDIF}
{$IFDEF MACOS}
{$IFDEF IOS}
  iosUrl(aURL);
{$ELSE}
  macUrl(aURL);
{$ENDIF}
{$ENDIF}
{$IFDEF MSWINDOWS} winUrl(aURL); {$ENDIF}
end;

end.

вот так на делфи

Ссылка на комментарий
  • 1

Дополнительно найдено:

#if defined(__ANDROID__)

#include <Androidapi.JNI.JavaTypes.hpp>
#include <Androidapi.JNI.GraphicsContentViewText.hpp>
#include <Androidapi.JNI.Net.hpp>
#include <Androidapi.Helpers.hpp>
#include <FMX.Helpers.Android.hpp>

#elif defined(__APPLE__)

#include <iOSapi.Foundation.hpp>
#include <Macapi.Helpers.hpp>
#include <FMX.Helpers.iOS.hpp>

#elif defined(MSWINDOWS)

#include <shellapi.h>

endif

bool __fastcall OpenURL(const String &AURL)
{
    #if defined(__ANDROID__)

    _di_JIntent Intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW, TJnet_Uri::JavaClass->parse(StringToJString(AURL)));
    try
    {
        SharedActivity()->startActivity(Intent);
        return true;
    }
    catch (const Exception &)
    {
        return false;
    }

    #elif defined(__APPLE__)

    _di_NSURL NSU = StrToNSUrl(AURL);
    if (SharedApplication()->canOpenURL(NSU))
        return SharedApplication()->openURL(NSU);
    else
        return false;

    #elif defined(MSWINDOWS)

    SHELLEXECUTEINFOW sei = {0};
    sei.cbSize = sizeof(sei);
    sei.lpFile = AURL.c_str();
    sei.nShow = SH_SHOWNORMAL;

    return ShellExecuteEx(&sei);

    #else

    return false;

    #endif
}

void __fastcall TForm1::Text1Click(TObject *Sender)
{
    OpenURL(L"http://fire-monkey.tu");
}  

 

Изменено пользователем Kitty
Ссылка на комментарий
  • 0
function iosUrl(const aURL: string): boolean;
var
  NSU: NSUrl;
begin
  NSU := TNSURL.Wrap(TNSURL.OCClass.URLWithString(StrToNSStr(aURL)));
  if SharedApplication.canOpenURL(NSU) then
    SharedApplication.openUrl(NSU);
end;

How open local file in iOS by default application?

iOs 14.2

Изменено пользователем Станислав Менинник
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...