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

Дениска

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

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

  • Посещение

Весь контент Дениска

  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 - нет. Я просто стянул его виртуалку и работаю на ней. Походу раз на раз не приходится. Пробуйте устанавливать заново и заново.
  13. В vmware есть технология, позволяющая подключать периферийные устройства, аналогично подключению принтера или фотика. Давай ближе к сути. Знаешь, что может быть не так? Кстати проверил на симуляторе версии апи 5.0 - лезет ошибка и дебагер запускается. А на симуляторе ниже 5.0 дебагер молчит, но приложение запускается без ошибки.
  14. На виртуальной машине установил XE8 параллельно с XE7. Создал тестовое приложение с ошибкой. Запустил по F9 на телефоне. Отладчик не запускается, ошибку не отлавливает. На Win и iOS работает. Скажите мне, что у Вас работает отладка на андроиде и это не баг XE8, чтоб я вздохнул с облегчением.
  15. Поставил XE8. По F9 и по кнопке не запускается отладочное окно. Пустой проект с настройками по умолчанию. Конфигурация Debug-Debug. В проекте все галочки на отладку установлены. Что не так?
  16. Я решил это 2 способами!! Закрытие приложения по кнопке "Home": нужно в "...\iOSDevice\Release\myapp.info.plist" после строки "<string>ResourceRules.plist</string>" добавить строку "<key>UIApplicationExitsOnSuspend</key><true/>". Закрытие приложения по кнопке из приложения: procedure TForm1.Button1Click(Sender: TObject); begin Halt(0); //аварийное завершение end; Удачи =)
  17. У меня XE7 update1. Я нашёл ещё одну причину такого поведения. Проблема решена. В мобильных платформах вместо Free или Close нужно использовать DisposeOf. http://fire-monkey.ru/topic/10-kak-pravilno-udaliat-kontroly-v-runtime/
  18. Пустое приложение. У меня есть формы: А и B. А по кнопке создаёт и показывает B и сразу самоуничтожается: B := TB.Create(nil); B.Show; A.Free; B в свою очередь делает обратное: A := TA.Create(nil); A.Show; B.Free; На Win32 платформе в диспетчере задач память по мере открытия форм не растёт. В iOS 6.1.1 iPhone 3 проследить память я не смог, но после 5-10 открытий форм приложение падает. Вероятнее всего растёт хип (heap). Почему тогда не работает FREE?? Как правильно освободить память и уничтожить форму в iOS??? Я нашёл ответ. Если на форме есть картинки, то их нужно: Image1.Bitmap.Assign(nil);
  19. Величайшее спасибо. Спустя 4 часа лазания от ссылки к ссылке и метода тыка я запустил таки на ios 8.2 своё приложение. Это мне помогло - http://blogs.embarcadero.com/ao/2013/05/24/39472 Только вместо кода: <?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"> <dict> <key>application-identifier</key> <string>12345ABCDE.com.example.myapp</string> <key>aps-environment</key> <string>development</string> <key>get-task-allow</key> <true/> </dict> </plist> я вставил: <?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"> <dict> <key>application-identifier</key> <string>12345ABCDE.com.example.myapp</string> <key>get-task-allow</key> <true/> </dict> </plist>
  20. Создаю пустой проект в конфигурации AdHoc на девайсе с версией ios 6.1. Великолепно запускается. Беру ipa и пытаюсь установить его на девайс с версией ios 8.2 (вышедшей 11 марта 2015). Не устанавливается. Просто висит "установка...", а на девайсе иконка с прогрес баром установки доходит до 60-80% и сбрасывается. Потом просто висит иконка из iTunes. Этот же пустой проект на девайсе ios 8.2 билдится, но не устанавливается с ошибкой "Unable to install package e800003a". Что я не так делаю? Скажите как надо так? PS: все provisioning profiles присутствуют на обеих устройствах. Оба девайса в них добавлены. Мин. версия в проекте ios 6.0.
  21. Мне нужно получить имена (или пути с именами) всех картинок, которые можно просмотреть через галерею (photo library). После, используя эту информацию, получить bitmap определённой картинки.
×
×
  • Создать...