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

Дениска

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

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

  • Посещение

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

1 692 просмотра профиля
  1. Актуальный вопрос. С появлением Lollipop на некоторых телефонах началась эта лажа! Как управлять автозавершением слов программно?
  2. C недавних пор мой старый метод открытия файлов в другом приложении перестал работать на ipad mini и iphone6. Оказалось что Apple ещё с ios 7 представил свой способ передачи файлов Airdrop, он же предоставляет возможность открывать файл в различных приложениях аналогично кнопке Open in. Итак код: uses {$IFDEF IOS} iOSapi.UIKit, iOSapi.Foundation, iOSapi.CoreGraphics, FMX.Helpers.iOS, Macapi.Helpers, Macapi.ObjectiveC {$ENDIF}; procedure Share(const AControl: TControl; filepath: string); var objects: NSMutableArray; controller : UIActivityViewController; popoverController: UIPopoverController; url: NSURL; procedure ShowForPhone; var Window: UIWindow; begin Window := SharedApplication.keyWindow; if (Window <> nil) and (Window.rootViewController <> nil) then Window.rootViewController.presentModalViewController(controller, True); end; procedure ShowForPad; var Window: UIWindow; PopoverRect: CGRect; AbsolutePos: TPointF; begin Window := SharedApplication.keyWindow; if AControl <> nil then begin AbsolutePos := AControl.LocalToAbsolute(PointF(0, 0)); if AControl.Scene <> nil then AbsolutePos := AControl.Scene.LocalToScreen(AbsolutePos); PopoverRect := CGRectMake(AbsolutePos.X, AbsolutePos.Y, AControl.Width, AControl.Height); end else PopoverRect := CGRectMake(0, 0, 0, 0); popoverController := TUIPopoverController.Alloc; popoverController.initWithContentViewController(controller); popoverController.presentPopoverFromRect(PopoverRect, Window.rootViewController.View, UIPopoverArrowDirectionAny, True); end; procedure ShowActionsSheet; begin if IsPad then ShowForPad else ShowForPhone; end; begin url := TNSURL.Wrap(TNSURL.OCClass.fileURLWithPath(StrToNSStr(filepath))); objects := TNSMutableArray.Create; objects.addObject((url as ILocalObject).GetObjectID); try if objects.count > 0 then begin controller := TUIActivityViewController.alloc; controller.initWithActivityItems(objects , nil); ShowActionsSheet; end; finally objects.release; objects := nil; end; end; Возможно Вы найдёт для себя что-то лишнее или нагромождённое, но заметьте, этот код подходит и для телефона и для планшета и сделан для быстрого понимания происходящего. Он был "заимствован" и модифицирован из самой RAD Studio из модуля FMX.MediaLibrary.IOS 395 строка. Оригинал же позволял передавать лишь String и TBitmap. Если же Вам нужно передавать именно их, Вы можете открыть этот модуль "C:\Program Files\Embarcadero\Studio\17.0\source\fmx\FMX.MediaLibrary.iOS.pas" и найти в оригинале как это делается.
  3. Спасибо огромное. Абракадабравцы не дают скачивать незаригестрированным
  4. Лично я этого почему-то не понял. Embarcadero об этом не говорит Я их нигде не загружаю. У меня есть функция FakeLoader, но с помощью неё я линкую только статическую библиотеку. У меня вопрос следующего плана: есть ли возможность как-нибудь использовать dylib библиотеки на IOS, если того требует сторонняя SDK? Или, может быть, существует обходной путь.
  5. Господа! Тема очень важная. Как использовать сторонние нативные (написанные на Obj-C) фреймворки и SDK в Firemonkey (не дописана). Имеется SDK, включающий статическую библиотеку, заголовок к ней и кучу классов упрощающих работу с библиотекой. libSDK.a SDK.h class1.h class1.m class2.h class3.m ... classN.h classN.m Чтобы упростить себе жизнь, немного покопавшись: www.youtube.com/watch?v=f7lxkv-sZA0 www.youtube.com/watch?v=5cnY8WNKRwg ... я собрал из этой кучи файлов одну статическую библиотеку MyLib.a. (Кому нужно знать как это делается, спрашивайте. Это отдельная тема.) Как заверяют разработчики этого SDK, для использования этой библиотеки необходимо подключить пару нативных фреймворков и две динамические библиотеки: SystemConfiguration.framework CoreTelephony.framework libstdc++.dylib libz.dylib Фреймворки стандартные и уже реализованы в RAD Studio, а библиотеки присутствуют в скачиваемом IOS SDK по пути: C:\Users\Username\Documents\Embarcadero\Studio\SDKs\iPhoneOS9.0.sdk\usr\lib. Embarcadero "побеспокоилась" о подключении сторонних статических библиотек. Создаётся функция (пример взят из сканера баркодов): implementation procedure FakeLoader(произвольное имя); cdecl; external 'MyLib.a' name 'OBJC_CLASS_$_MyClass'; Реальная польза этой функции для меня остаётся загадкой, кроме того, что без неё приложение не увидит библиотеки и при попытки обратится к классу выдаст: "ObjectiveC class MyClass could not be found". Для начала я создал на XCode libHelloWorld.a (думаю не нужно говорить, что она делает). Немного покопавшись: ridingdelphi.blogspot.com/2014/01/the-quest-to-migrate-ios-squarecam-app_3169.html blog.blong.com/2013/05/delphi-for-ios-some-notes.html написал хедер HelloWorld.pas, в котором описал классы и функции хранящиеся в этой библиотеке. Подключил pas в uses в проекте и всё заработало. (Кому нужно знать как это делается, спрашивайте. Это отдельная тема.). Решил теперь подключить мою MyLib.a, которую я создал из основе SDK, можно сказать конвертировал. Но она требует две динамические библиотеки, что в случае с HelloWorld не требовалось. Как подсказывает Embarcadero, мне нужно дописать в мой FakeLoader директиву dependency. Итого: procedure FakeLoader; cdecl; external 'MyLib.a' name 'OBJC_CLASS_$_MyClass' dependency 'libstdc++.dylib', 'libz.dylib'; Но вот тут и нужна Ваша помощь! Я помещал эти библиотеки прямо в проект, указывал абсолютные пути из MacPC и из моего PC, копировал оригинальные библиотеки из MacPC, писал их с расширением и без, с префиксом "lib" и без. IDE твердит одно: [DCC Error] E2597 ld: library not found for -llibz.dylib [DCC Error] E2597 ld: library not found for -llibstdc++.dylib Без этих библиотек моя статическая библиотека MyLib.a не компилируется с ошибками: Error: "blablabla", referenced from: lalalala in MyLib.a(Class1.o); lalalala in MyLib.a(Class1.o); Error: "qwertyuui", referenced from: olololo in MyLib.a(Class2.o); olololo in MyLib.a(Class2.o); Error: "abracadabra", referenced from: abcdefjgh in MyLib.a(Class3.o); abcdefjgh in MyLib.a(Class3.o); ... Кто сталкивался? Кто знает чем помочь? Пишите. Сейчас мой проект простаивает из-за этой проблемы.
  6. Запусти LogCat. Посмотри какие ошибки пишет? У меня тоже после обновления Galaxy Tab до 5.1 проблема при запуске с определённой ориентацией экрана getStack: Window{16a35e14 u0 d0 com.xxx.android/com.embarcadero.firemonkey.FMXNativeActivity} couldn't find taskId=45
  7. о повышении зп

  8. Какая ошибка? У меня тоже не компилировался, показывал ошибку в библиотеках. Я исправил, сейчас работает на ios64
  9. на OnClose формы делаем так: procedure TForm2.OnClose(Sender: TObject; var Action: TCloseAction); begin Action := TCloseAction.caFree; end; и освобождаем форму не Free, а DisposeOf: Form2 := TForm2.Create(nil); Form2.ShowModal; Form2.DisposeOf;
  10. implementation uses IOUtils {$IFDEF IOS} ,iOSapi.Foundation, FMX.Platform.Ios, iOSapi.UIKit, Macapi.Helpers {$ENDIF} ; procedure TForm1.Button1Click(Sender: TObject); var fpath: string; begin fpath:= TPath.GetDocumentsPath + PathDelim + 'filename.extention'; OpenIn(fpath); end; procedure TForm1.OpenIn(path: string); {$IFDEF IOS} var controller : UIDocumentInteractionController; URL: NSURL; {$ENDIF} begin {$IFDEF IOS} URL := TNSUrl.Wrap(TNSUrl.OCClass.fileURLWithPath(StrToNSStr(path))); controller := TUIDocumentInteractionController.Wrap( TUIDocumentInteractionController.OCClass.interactionControllerWithURL(URL)); controller.presentOpenInMenuFromRect( WindowHandleToPlatform(self.Handle).View.frame, WindowHandleToPlatform(self.Handle).View,true); {$ENDIF} end;
  11. Как открыть файл из вашего приложения в другом приложении?
  12. Коллега устанавливал на виртуалку Win 7 XE8 - у него всё заработало. У меня же на планшете 4.4.2 - работает дебаг, а на телефоне 4.2.2 - нет. Я просто стянул его виртуалку и работаю на ней. Походу раз на раз не приходится. Пробуйте устанавливать заново и заново.
×
×
  • Создать...