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

ENERGY

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

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

  • Посещение

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

    57

Весь контент ENERGY

  1. Равиль огромное вам спасибо, так просто. Все работает. Обычная пропорция. Я думал сложнее (я делал Image1.Height := Image1.Bitmap.Height; ). И заодно решилась проблема, когда увеличиваешь размер формы, картинка корректно увеличивается с Fit. Вот правильный код, который посоветовал Равиль: procedure TfrmSplash.FormResize(Sender: TObject); var vKoef: Single; begin if Handle = nil then exit; // on Android without this user will get Access Violation vKoef := Image1.Width / Image1.Bitmap.Width; Image1.Height := Image1.Bitmap.Height * vKoef; end
  2. Простейшая анимация Timage + Float Animation который меняет RotationAngle картинки. Если запустить анимацию, и если слева от крутящейся картинки стоит еще одна картинка или контрол (статичный), то на этом месте показываются и пропадают вертикальные линии, как будто эффект старой кинопленки. Причем под Android все ок, такая ерунда под Windows. А мне нужно сделать прогу под Win и Android. Кто нибудь сталкивался с таким? Здесь большой круг вращается. А левый маленький - обычная картинка. (2 Timage). Delphi Berlin Update 2 TestAnim.zip
  3. Есть картинка-шапка (лого). Wrap Mode = Fit. При изменении размера формы (ширины), меняется размер картинки внутри Timage, но не меняется размер самого TImage. Из за этого неправильно позиционируются контролы под Timage (точнее они не меняют позицию), к примеру при уменьшении ширины формы остаются большие пустые куски, из за того что картинка уменьшилась, а сам Timage нет (он должен сменить Height самого конторола пропорционально его Width ), и контролы что под ним (c Align Top), не сменили позицию. В VCL был Autosize у Timage, есть ли что то подобное у FMX ?
  4. @RoschinSpb пожалуйста, возможно вы подскажете как оптимальнее это сделать? Нужно удалять картинки, т.к. они загружаются на Dropbox, и затем удаляются из ListView и из TImageList.
  5. Динамически добавляю картинки, - thumbnails в ImageList для дальнейшего отображения в ListView. Некоторые картинки через время не нужны, как корректно удалить картинку из TImageList, чтобы освободить память? При добавлении картинка добавляется в 3 списка Source.Add, Destination.Add и Destination.Layers.Add, получается ее нужно удалять с этих 3 списков? Спасибо. Добавляю картинку так:
  6. Application.processmessages пробовали после смены размера окна? Мне кажется проблема в этих режимах. Можно подробнее про них?
  7. На мобильных платформах обычно не принято указывать пути, хотя есть конечно исключения. На Android нет стандартного диалога, на iOS есть, но Apple не рекомендует использовать его. Important: An iOS app should never use an Open or Save panel to prompt the user for the location of a file within the app’s sandbox. iOS apps should always save files to known locations inside their sandbox, and apps should use a custom interface when presenting those documents to the user. iOS apps can, however, use a UIDocumentPickerViewController to prompt the user to import, export, open, or move files to or from some areas outside the app’s sandbox. For more information, see the Document Picker Programming Guide. https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/UsingtheOpenandSavePanels/UsingtheOpenandSavePanels.html unit frmSelect; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Edit, FMX.Layouts, FMX.ListBox, FMX.Controls.Presentation; type TCallback = procedure (ASelected: String) of object; TfmSelect = class(TForm) Panel1: TPanel; btnRefresh: TButton; lstItems: TListBox; edtCurrentFolder: TEdit; pnlDirectoryNotExist: TPanel; lblDirectoryNotExist: TLabel; btnSelect: TButton; procedure btnRefreshClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure lstItemsClick(Sender: TObject); procedure btnSelectClick(Sender: TObject); private { Private declarations } public const CONST_STRING_PARENT = '..'; CONST_X = '/'; { I know is function for this } var Callback: TCallback; { Public declarations } function CD(AFolder: String): Boolean; end; var fmSelect: TfmSelect; implementation {$R *.fmx} uses System.IOUtils; procedure TfmSelect.btnSelectClick(Sender: TObject); var LResult: String; begin if Assigned(Callback) then begin if lstItems.ItemIndex = -1 then LResult := EmptyStr else LResult := lstItems.Items[lstItems.ItemIndex]; Callback(LResult); end; Close; end; function TfmSelect.CD(AFolder: String): Boolean; var LParent: String; LDirs, LFiles: TStringDynArray; s: String; begin lstItems.Clear; pnlDirectoryNotExist.Visible := False; if (AFolder <> EmptyStr) and (AFolder <> CONST_X) and (AFolder[AFolder.Length - 1] <> CONST_X) then AFolder := AFolder + CONST_X; edtCurrentFolder.Text := AFolder; { http://stackoverflow.com/questions/20318875/how-to-show-the-availble-files-in-android-memory-with-firemonkey } if not TDirectory.Exists(AFolder, True) then begin lblDirectoryNotExist.Text := 'Directory ' + AFolder + ' does not exist.'; pnlDirectoryNotExist.Visible := True; Exit(False); end; { } LParent := TDirectory.GetParent(AFolder); { } if LParent <> AFolder then lstItems.Items.Add(CONST_STRING_PARENT); { } LDirs := TDirectory.GetDirectories(AFolder, '*'); // Get all files. Non-Windows systems don't typically care about // extensions, so we just use a single '*' as a mask. LFiles := TDirectory.GetFiles(AFolder, '*'); for s in LDirs do lstItems.Items.Add(s + CONST_X); for s in LFiles do lstItems.Items.Add(s); Result := True; end; procedure TfmSelect.FormCreate(Sender: TObject); begin pnlDirectoryNotExist.Visible := False; end; procedure TfmSelect.lstItemsClick(Sender: TObject); var s: String; begin if lstItems.ItemIndex = -1 then Exit; if SameText(lstItems.Items[lstItems.ItemIndex], CONST_STRING_PARENT) then { Or we need to use global var for Parent } CD(TDirectory.GetParent(edtCurrentFolder.Text)) else begin s := lstItems.Items[lstItems.ItemIndex]; if s = EmptyStr then Exit; if s[s.Length - 1] = CONST_X then CD(s); end; end; procedure TfmSelect.btnRefreshClick(Sender: TObject); begin if edtCurrentFolder.Text <> EmptyStr then CD(edtCurrentFolder.Text) else CD(TPath.GetDocumentsPath); end; end. Использование if fmSelect = nil then begin Application.CreateForm(TfmSelect, fmSelect); fmSelect.Callback := Yahoo; end; fmSelect.Show; fmSelect.CD(TPath.GetDocumentsPath); procedure TFormXX.Yahoo(ASelectedItem: String); begin ShowMessage(ASelectedItem); // end;
  8. Друзья, нашел тут интересную статью, где тестируются разные jSON парсеры. Ссылка: http://www.webdelphi.ru/2016/10/ishhem-samyj-bystryj-parser-json-v-delphi/ Автор: Владислав Баженов Описание (26/10/2016):
  9. http://www.webdelphi.ru/2014/07/delphi-avtorizaciya-po-oauth-2-0-v-dropbox-svoimi-silami/
  10. Вам что нужно сделать? Связать Windows и Android или iOS?
  11. А если нужно будет указать длительность 24 или 25 часов? Сделай обычный TLabel и рядом кнопки + - которые будут прибавлять убавлять единицу, или можно использовать TSpinBox
  12. Вообще время должно отображаться в том формате, который показывает TimeEdit по умолчанию. Т.к. это системный формат, и он удобен тому пользователю, которые его установил. 24 часовой формат: TimeEdit1.Format := 'HH:mm'; Чтобы принудительно на am pm перевести: TimeEdit1.Format := 'hh:mm ampm' - главное чтобы была строчка ampm или am\pm или .
  13. Там много чего перестало работать в токио, плюс упала в 2 раза производительность, нужно подождать обновление, а до этого лучше не использовать Токио для Android. Больше информации на сайте эмбаркадеро.
  14. Попробуйте THashSHA1.GetHMACAsBytes из System.Hash.pas Вообще мне больше нравятся System.Net компоненты вместо Indy. Ну и вдогонку function OAuthEncryptHMACSha1(const aValue, aKey: string): string; begin Result := TNetEncoding.Base64.EncodeBytesToString( THashSHA1.GetHMACAsBytes(aValue, aKey) ); end;
  15. Равиль Зарипов Спасибо. А как вообще проводиться авторизация? Ведь пользователь должен ввести свой email и пароль к своему DropBox акку? Через что это делается? Насколько я понял через TWebBrowser?
  16. Спасибо что попробовали, я тоже по разному пытался.
  17. ENERGY

    MySQL

    Vitaldj Идея была в том что FireDac универсальный мультиплатформенный компонент для доступа к разным базам данных. Покурив мануалы, понял что FireDac MySQL не работает на моб. платфомах, есть только вариант использовать DevArt DAC, он работает с mySQL с моб. платформы, правда он платный (FireDac тоже в принципе платный ).
  18. ENERGY

    MySQL

    Вообще информации много в сети по поводу доступа из моб. систем при помощи FireDac, это и статьи, видео и темы на форумах.. Откуда у вас такая информация? http://docwiki.embarcadero.com/RADStudio/Berlin/en/Mobile_Tutorial:_Using_FireDAC_and_SQLite_(iOS_and_Android)
  19. RESTAPI для меня новый компонент. Ничего не знаю о нем. Нашел пару статей о том как сделать upload , http://simshelloworld.blogspot.co.uk/2014/12/restuploadfile.html https://forums.embarcadero.com/thread.jspa?threadID=109596 но там показан только upload, а как провести авторизацию? Ведь пользователь должен ввести свой email и пароль, должна показаться формочка с кнопкой разрешить.. Вобщем с чего начать подскажите пожалуйста? P. s. Есть набор компонентов TMS FMX Cloud - там все это есть и рабочее, но денег у меня к сожалению нет на его покупку (в год 150$)...
  20. ENERGY

    MySQL

    Илья Захаров FireDac мультиплатформенный, это то что рекомендует использовать Embarcadero для доступа к база.
  21. ENERGY

    MySQL

    http://docwiki.embarcadero.com/CodeExamples/Berlin/en/FireDAC.MySQL_Sample
  22. ENERGY

    MySQL

    Объясните для чего так делать? Почему не использовать например FireDac?
  23. English... please, do you speak it? https://translate.google.com
×
×
  • Создать...