• 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
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 ответов на этот вопрос

  • 0

Ну так поставь FGX - этот код как раз с него взят.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

А как в iOS открыть ссылку стандартными средствами без FGX? Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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 пользователей онлайн

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