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

WebPuper

Пользователи
  • Постов

    53
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Активность репутации

  1. Like
    WebPuper получил реакцию от Barbanel в Научите делать приложение для iOS   
    Спасибо за ответы, плюсую
  2. Like
    WebPuper отреагировална Ingalime в переход к x64?   
    Это выйдет в виде новой версии студии в середине этого года.
  3. Like
    WebPuper получил реакцию от Ingalime в Ошибка при отладке Cannot Deploy   
    Причиной оказалось, что в Deploy убирал галочки с PNG иконок Android_Launcher
  4. Like
    WebPuper отреагировална Tumaso в Ошибка при отладке Cannot Deploy   
    Вместе с этим окном еще выдается и диалоговое окно с детализацией ошибки.
    Рекомендации, указанные на скриншоте, проверены? Свободное место на телефоне есть?
    Еще перед заливкой новой версии можно вручную удалить с телефона ранее установленную версию приложения
  5. Like
    WebPuper получил реакцию от Anatoliy в Переход на новую модель разрешений   
    Если кому-то потребуется, то код для C++, как я сделал
    _di_JActivity activity = TAndroidHelper::Activity; TJavaObjectArray__1<_di_JString> *Recipients = new TJavaObjectArray__1<_di_JString>(1); Recipients->Items[0] = StringToJString("android.permission.READ_EXTERNAL_STORAGE"); Recipients->Items[1] = StringToJString("android.permission.WRITE_EXTERNAL_STORAGE"); activity->requestPermissions(Recipients,0);  
  6. Thanks
    WebPuper отреагировална Евгений Корепов в Разрешения для приложения не вступают в силу на Android   
    Вот как то так, на базе штатного примера:
      Такс, я малость лопухнулся, это пример я уже под карнавал переделал, работать на токио и остальных версиях не будет. Так что я его удалил. Поищите по форуму - уже неоднократно обсуждалась тема.
  7. Like
    WebPuper получил реакцию от Yarpda в Механизм работы с APK Extension file (OBB)   
    В FMX, насколько я смог удостовериться, нет нормальных директив чтобы работать с OBB. Видимо посчитали это излишним, т.к. по сути речь идет о работе с обычной файловой системой.
    После распаковки приложения в каталоге внешнего хранилища (карты или, если нет, внутренней памяти)  Android/obb/<application ID>/ появится файл дополнений с расширением *.obb 
    Это обычный архив ZIP и его можно распаковать, например, в GetDocumentsPath средствами TZipFile
    Проблема в том, что в FMX нет процедуры возвращающей путь к файлу obb. 
    Пришлось написать костыль: 
    UnicodeString GetObbFile() { UnicodeString str = StringReplace(System::Ioutils::TPath::GetPublicPath(), "/data/", "/obb/", TReplaceFlags()); str = StringReplace(str, "/files", "/", TReplaceFlags()); TSearchRec sr; FindFirst(str + "*.obb", faAnyFile, sr ); return str + sr.Name; } Теперь у вашего приложения есть путь к единственному obb
  8. Like
    WebPuper получил реакцию от Barbanel в Механизм работы с APK Extension file (OBB)   
    В FMX, насколько я смог удостовериться, нет нормальных директив чтобы работать с OBB. Видимо посчитали это излишним, т.к. по сути речь идет о работе с обычной файловой системой.
    После распаковки приложения в каталоге внешнего хранилища (карты или, если нет, внутренней памяти)  Android/obb/<application ID>/ появится файл дополнений с расширением *.obb 
    Это обычный архив ZIP и его можно распаковать, например, в GetDocumentsPath средствами TZipFile
    Проблема в том, что в FMX нет процедуры возвращающей путь к файлу obb. 
    Пришлось написать костыль: 
    UnicodeString GetObbFile() { UnicodeString str = StringReplace(System::Ioutils::TPath::GetPublicPath(), "/data/", "/obb/", TReplaceFlags()); str = StringReplace(str, "/files", "/", TReplaceFlags()); TSearchRec sr; FindFirst(str + "*.obb", faAnyFile, sr ); return str + sr.Name; } Теперь у вашего приложения есть путь к единственному obb
  9. Like
    WebPuper получил реакцию от Anatoliy в Не работает OverWrite в Deployment   
    Либо прямо в коде сделать временную процедуру для этого дела с DeleteFile  ? (я так делаю)
  10. Like
    WebPuper получил реакцию от Anatoliy в [Android] Событие FormCloseQuery не останавливает закрытие приложения   
    Решил через анализ события FormKeyUp  
     if(Key == vkHardwareBack) Key = 0;  
     
  11. Thanks
    WebPuper отреагировална Kitty в Открыть ссылку   
    Дополнительно найдено:
    #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"); }  
  12. Like
    WebPuper получил реакцию от Anatoliy в [Android] [XE7] Ошибка класса ENotImplemented   
    struct TCloseDialogHandler :public TCppInterfacedObject<TInputCloseDialogProc> { void __fastcall Invoke(const System::Uitypes::TModalResult AResult) { switch (AResult) { case mrYes : ShowMessage("You chose Yes"); break; case mrNo: ShowMessage("You chose No"); break; case mrCancel: ShowMessage("You chose Cancel"); break; } } }; void __fastcall TForm1::SpeedButtonClick(TObject *Sender) { _di_TInputCloseDialogProc handler =new TCloseDialogHandler(); MessageDlg(L"Внимание! Здесь вопрос?", TMsgDlgType::mtConfirmation, TMsgDlgButtons() << TMsgDlgBtn::mbYes << TMsgDlgBtn::mbNo, 0, handler ); }  
    - Рабочий пример использования MessageDlg на C++ с использованием анонимной процедуры.
  13. Like
    WebPuper получил реакцию от Anatoliy в Решение Segmentation fault(11). Или "Axe beats in the balls"   
    Может кому-то поможет. Дело касается Builder C++:
    У меня порой возникала ошибка Segmentation fault при старте приложения из-за явного несоответствия типа переменной типу её значения.
    Особенно это касается всех глобальных переменных. Например
    UnicodeString Str = 14; ; - компилятор C++ не ругается, но приложение вылетало при старте.   (в Delphi не проверял).
  14. Like
    WebPuper получил реакцию от Евгений Корепов в Поиск и выделение текста на Html странице   
    Для Windows, я использую стандартное окно поиска для браузера:
    void __fastcall TForm1::ShowSearchBrowser(TCppWebBrowser *WB) { const GUID CGID_IWebBrowser =     {0xed016940, 0xbd5b, 0x11cf,     {0xba, 0x4e, 0x0, 0xc0, 0x4f, 0xd7, 0x08, 0x16}} ;    LPDISPATCH lpDispatch = WB->ControlInterface->get_Document(); //получаешь интерфейс на документ     if(lpDispatch)     {         IOleCommandTarget* pcmd=NULL;         if( SUCCEEDED(lpDispatch->QueryInterface(IID_IOleCommandTarget,(void**)&pcmd) ) ) //запрашиваешь интерфейс для выполнения команд         {  //если интерфейс успешно получен, то             pcmd->Exec(&CGID_IWebBrowser, HTMLID_FIND, 0, NULL, NULL); //выполняешь команду             pcmd->Release();  //освобождаешь ресурсы         }         lpDispatch->Release(); //освобождаешь ресурсы     } }  
  15. Like
    WebPuper получил реакцию от Anatoliy в Поиск и выделение текста на Html странице   
    Для Windows, я использую стандартное окно поиска для браузера:
    void __fastcall TForm1::ShowSearchBrowser(TCppWebBrowser *WB) { const GUID CGID_IWebBrowser =     {0xed016940, 0xbd5b, 0x11cf,     {0xba, 0x4e, 0x0, 0xc0, 0x4f, 0xd7, 0x08, 0x16}} ;    LPDISPATCH lpDispatch = WB->ControlInterface->get_Document(); //получаешь интерфейс на документ     if(lpDispatch)     {         IOleCommandTarget* pcmd=NULL;         if( SUCCEEDED(lpDispatch->QueryInterface(IID_IOleCommandTarget,(void**)&pcmd) ) ) //запрашиваешь интерфейс для выполнения команд         {  //если интерфейс успешно получен, то             pcmd->Exec(&CGID_IWebBrowser, HTMLID_FIND, 0, NULL, NULL); //выполняешь команду             pcmd->Release();  //освобождаешь ресурсы         }         lpDispatch->Release(); //освобождаешь ресурсы     } }  
  16. Like
    WebPuper получил реакцию от Anatoliy в Перейти на якорь уже загруженной страницы   
    Если кто-то ищет ответ на данный вопрос под Android, то я всегда использовал такое решение (С++):
    WebBrowser1->EvaluateJavaScript("window.location.assign(\"#"+ yakor +"\")");
×
×
  • Создать...