Tot999

Пользователи
  • Публикаций

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

  • Посещение

Информация о Tot999

  • Звание
    Новичок

Посетители профиля

330 просмотров профиля
  1. Tot999

    TPaintox+Tbitmap

    Добрый день! Решил покопаться в своей старой спрайтовой игрушке, чтобы освежить в памяти знания и состряпать что-нибудь новое. Возникли сомнения, нормально ли сделано графическое отображение, можно ли доработать. Все спрайты в дизайнтайме распиханы по Timagelist-ам. На старте приложения я загружаю битмапы из имэджлистов в свои обджектлисты, подгоняя под нужный размер. MeduzasBitmpAr : array [1..numofMeduzas] of TObjectList<Tbitmap>; Дальше рисую по таймеру в основном окне игры Tpaintbox.OnPaint: В принципе, даже на слабеньких телефончиках, всё вроде бодро. Но может, опытные товарищи чего подскажут, а то я 3ий день в собственном соку варюсь, ничего толкового.
  2. Tot999

    Patch RestRequest Rad 10

    Да, "Get", безусловно работает, но для переименования файла на гугл диске нужно использовать метод "Patch" (это Google Api Drive + REST). Насколько понял, по изучению сторонних форумов, данная ошибка будет возникать на Android KitKat и не будет на Android Lollipop, связано это с java библиотеками. При компиляции под windows, данная процедура работает исправно. В общем-то откатился обратно на XE7, но если кто знает, как решить, буду благодарен.
  3. Tot999

    Patch RestRequest Rad 10

    После перехода с XE7 на RAD 10 при выполнении след. процедуры возникает исключение, изображенное на скрине, что необходимо обновить/починить? procedure ServerPatchDriveFile; var Folder : TJSONObject ; FolderDest, itemmm : TJSONObject ; parents: TJSONArray ; begin form2.RESTResponseDataSetAdapter1.AutoUpdate := false; form2.RESTRequest1.Params.Clear; form2.RESTRequest1.ClearBody; form2.RESTClient1.AutoCreateParams:=false; form2.RESTClient1.Accept:= ''; form2.RESTClient1.ContentType:= ''; form2.RESTRequest1.Method:= rmPATCH; Form2.RESTClient1.BaseURL:='https://www.googleapis.com/drive/v2/files/{FileId}'; form2.RESTRequest1.Resource := ''; form2.RESTRequest1.Params.AddUrlSegment('fileId', UntitledId); Parents:= TJSONArray.Create; itemmm := TJSONObject.Create; itemmm.AddPair(TJSONPair.Create('id', form2.EditIdFOlder.Text)); Parents.AddElement((itemmm)); Folder:= TJSONObject.create; Folder.AddPair(TJSONPair.Create('title', 'Myfile')); Folder.AddPair(TJSONPair.Create('parents', Parents)); form2.RESTRequest1.AddBody(Folder); try form2.RESTRequest1.Execute; except on e: Exception do begin ShowMessage(e.Message);//Show Exception end; end; Folder.free; Application.ProcessMessages; end;
  4. Tot999

    WebForm.Fmx

    Как оказалось, можно так: 1. В OAuth2Authenticator в Redirection endpoint : http://localhost 2. Ловить webform.lasttitle, например, таймером так: procedure TForm2.TimerGetAuthCodeTimer(Sender: TObject); var tokentoedit: string; begin {$IF DEFINED(ANDROID)} if Pos('localhost/?code=', webform.LastURL) > 0 then begin AuthCode := Copy(webform.LastURL, 24, Length(webform.LastURL)); if (AuthCode <> '') then begin editactoken.Text:= AuthCode; webform.close; TimerGetAuthCode.Enabled:=false; end; end; {$ENDIF} end;
  5. Tot999

    WebForm.Fmx

    Мужики, нужны пояснения. Реализую rest delphi xe7 + google api oauth 2.0. Код, привел в порядок с примером ZuBy: uses {$IF DEFINED(ANDROID)} REST.Authenticator.OAuth.WebForm.FMX , Androidapi.Helpers, Androidapi.jni , AndroidAPI.JNIBridge, Androidapi.JNI.JavaTypes, FMX.Helpers.Android, Androidapi.JNI.GraphicsContentViewText; {$ENDIF} {$IF DEFINED(MsWindows)} REST.Authenticator.OAuth.WebForm.Win; {$ENDIF} ... private { Private declarations } WebForm: Tfrm_OAuthWebForm; procedure Auth; procedure OAuth2_GoogleTasks_BrowserTitleChanged(const ATitle: string; var DoCloseWebView: boolean); public { Public declarations } ... procedure TForm2.OAuth2_GoogleTasks_BrowserTitleChanged(const ATitle: string; var DoCloseWebView: boolean); begin //Memo3.text:=(webform.LastURL); if Pos('Success code', ATitle) > 0 then begin AuthCode := Copy(ATitle, 14, Length(ATitle)); if (AuthCode <> '') then begin //Memo3.Lines.Add(AuthCode); editactoken.Text:= AuthCode; DoCloseWebView := true; webform.Release; end; end; end; procedure TForm2.Button59Click(Sender: TObject); begin WebForm:=Tfrm_OAuthWebForm.Create(nil); WebForm.OnTitleChanged := self.OAuth2_GoogleTasks_BrowserTitleChanged; WebForm.ShowWithURL(OAuth2Authenticator1.AuthorizationRequestURI); end; На windows все работает, на Android не происходит события TitleChanged, меняю так: procedure TForm2.OAuth2_GoogleTasks_BrowserTitleChanged(const ATitle: string; var DoCloseWebView: boolean); begin ListBoxDatabase.Items.Add(ATitle); end; На Windows отображаются все заголовки, на Android - пусто. Оставляю webform, просто пробую открыть страницу авторизации в дефолтном браузере на устройстве: var Intent: JIntent; begin Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.setData(StrToJURI(OAuth2Authenticator1.AuthorizationRequestURI)); SharedActivity.startActivity(Intent); Результат на скриншотах внизу. Поясняю: из самого браузера скопировать строку не удается, не вызываются стандартные механизмы, в Title отлично видно, что Success Code пришел, когда на него кликаешь, чтобы скопировать, получаешь строку со скрина 3 (который ..approval... ) Просто создаю проект с браузером, открываю авторизацию в приложении, без webform и пытаюсь скопировать код из тела webbrowser: procedure TForm4.Button4Click(Sender: TObject); Var Clipboard: IFMXClipboardService; value: TValue; hasText: boolean; s: string; begin hasText := False; if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, IInterface(Clipboard)) then begin value := Clipboard.GetClipboard; hasText := value.TryAsType<String>(s); end; ShowMessage(BoolToStr(hasText)); if hasText then ShowMessage(s); end; Не берет. Читаю статьи: https://developers.google.com/api-cl.../installed-app https://developers.google.com/android/guides/http-auth Понимаю, что авторизацию через веббраузер надо делать для installed applications, для Android необходимо использовать нативные библиотеки. Там правда не сказано, что нельзя делать авторизацию на android через webbrowser. В связи с этим у меня возникает пара вопросов: 1. Концептуально: Можно ли получать токен на Android вышеуказанным путем? Тактически: Если да, то в таком случае, как получить success code, в чем проблема? webform.fmx забыли припечатать title? Подскажите, что переделать. ( все остальное: обмен на токен, настройка коомпонентов, скачка, закачка файлов и т.д. все работает на винде исправно, т.е. весь механизм обкатан, но при переносе на андроид возникает загвоздка с получением sucess code) 2. if not (1) тогда, есть ли у кого-то сэмплы или ссылки на реализацию через Java в Delphi, так понимаю, Android.Jni JIntent etc.
  6. Tot999

    WebForm.Fmx

    Да, у меня также было сделано с примера webdelphi. Ваш код при компиляции под windows отлично работает. Title меняется из него извлекается Access Code, но при компиляции на андроид устройстве, события OnTitleChanged не происходит, при все тех же действиях. открываю REST.Authenticator.OAuth.WebForm.Win и REST.Authenticator.OAuth.WebForm.FMX, начинаю сравнивать, в глаза бросается следующее: ... private { Private declarations } FOnBeforeRedirect: TOAuth2WebFormRedirectEvent; FOnAfterRedirect: TOAuth2WebFormRedirectEvent; FOnBrowserTitleChanged : TOAuth2WebFormTitleChangedEvent; FLastTitle: string; // <------- ЭТОГО нет в FMX FLastURL: string; public ... В WebForm.FMX: ... private { Private declarations } FOnBeforeRedirect: TOAuth2WebFormRedirectEvent; FOnAfterRedirect: TOAuth2WebFormRedirectEvent; FOnBrowserTitleChanged : TOAuth2WebFormTitleChangedEvent; FLastURL: string; ... public В случае с Win можно также извлечь код из свойства lasttitle, опять-таки в FMX только Flasturl, но он остается неизменным. Пробовал в Delphi XE7 и Delphi XE8. Может, как-то можно из WebBrowser достать значение?
  7. Tot999

    WebForm.Fmx

    Использую библиотеку Rest для работы с гугл-диском. Для авторизации вызываю Webform, под windows все работает хорошо. Стал переносить на Android (Rest.authenticator.oauth.webform.fmx) и столкнулся с проблемой, что андроид не вызывает функции копирования строки. В webform.win было свойство lasttitle из которого можно было достать access code. В webform.fmx присутствует Flasturl, но он не меняется при закрытии формы. Подскажите как быть?