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

WebPuper

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

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

  • Посещение

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

    3

Сообщения, опубликованные WebPuper

  1. Использую компонент IdHTTP из Indy  для скачивания файла по http. Но имею проблемы на уровне глюка с подключением. Я читал что для андроида значения таймаута не вступают в силу.

    Как же и чем стабильно качать файл по http?

  2. Столкнулся со странным. Для приложения в манифесте установлено     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    но после загрузки из Play Market галочка для использования "Память" не активна. Чтобы приложение имело доступ к памяти приходится ставить ее в ручную.

    Причем если я веду отладку по USB, то все в порядке.

    Почему разрешения не вступают в силу? 

  3. В 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

  4. Может кому-то поможет. Дело касается Builder C++:

    У меня порой возникала ошибка Segmentation fault при старте приложения из-за явного несоответствия типа переменной типу её значения.

    Особенно это касается всех глобальных переменных. Например

    UnicodeString Str = 14;

    ; - компилятор C++ не ругается, но приложение вылетало при старте.   (в Delphi не проверял).

  5. 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++ с использованием анонимной процедуры.

  6. Разъясните что за идентификатор ForVendor (IDFV) на мобильных платформах?   Уникальный ли он. Можно ли использовать его в качестве альтернативы уникального идентификатора устройства для защиты приложения от копирования? 

  7. Это в Windows в TWebBrowser  можно выделить текст. Под Андроидом не выделяется. Я вот думаю, а вообще  WebView предоставляет ли такое обращение к видимому тексту? 

     

    Вот статья: http://sergey-glotov.blogspot.com/2011/09/webview.html     Интересно, как воспользоваться этим методом emulateShiftHeld()  ?

  8. Для 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(); //освобождаешь ресурсы
        }
    
    }

     

×
×
  • Создать...