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

Anatoliy

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

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

  • Посещение

Активность репутации

  1. Like
    Anatoliy отреагировална Алексей Данильченко в Отправка файлов через намерение   
    Может кому пригодится. вот решение.
    procedure TfrmSendEmail.SendEmail(); {$IF DEFINED(ANDROID)} var lIntent: JIntent; lJRecipient: TJavaObjectArray<JString>; lURI: Jnet_Uri; lJFile: JFile; lFileName: string; lFilePath: string; {$ENDIF} begin {$IF DEFINED(ANDROID)} lJRecipient:= TJavaObjectArray<JString>.Create(1); lJRecipient.Items[0]:= StringToJString(eEmail.Text); lFileName:= AttachFileName; lFilePath:= System.IOUtils.TPath.Combine(System.IOUtils.TPath.GetSharedDownloadsPath, lFileName); lIntent:= TJIntent.Create; lIntent.setType(StringToJString('application/excel')); lIntent.setAction(TJIntent.JavaClass.ACTION_SEND); lIntent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); lIntent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, lJRecipient); lIntent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(eSubject.Text)); lIntent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(mEmailMessage.Text)); lJFile:= TJFile.JavaClass.init(StringToJString(lFilePath)); lURI:= TAndroidHelper.JFileToJURI(lJFile); lIntent.setData(lURI); lIntent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((lURI as ILocalObject).GetObjectID)); TAndroidHelper.Activity.startActivity(lIntent); {$ENDIF}  
  2. Thanks
    Anatoliy отреагировална Alialioglu2016 в Application Loader   
    Загрузчик приложений больше не используется на новой Mac OS X. Для этого вы должны использовать приложение Transporter.
    Transporter
  3. Like
    Anatoliy отреагировална gonzales в Пуши в IOS   
    Так а в чем конкретно проблема?
    В коде есть OnReceiveNotificationEvent - вызывается когда придет пуш. Соответственно вместо ShowMessage(aText); пишите вызов новой формы. Если она уже создана, то просто FormB.visible:=true;, если не создана, то вызов конструктора, (примерно так FormB:=TForm.Create;, соответственно конструктор должен быть описан) 
  4. Like
    Anatoliy отреагировална Brovin Yaroslav в [Статья] Делаем скриншот любого контрола FireMonkey   
    Ссылка: http://yaroslavbrovin.ru/category/fmx_ru/graphics_ru/ Автор: Ярослав Бровин Статья рассказывает о том, как сделать скриншот любого контрола FireMonkey. Так же немного расскрывает общий процесс отрисовки компонентов.
  5. Like
    Anatoliy отреагировална Равиль Зарипов (ZuBy) в CloudFlare [IPV6]   
    Доброго времени суток!
    Для тех, кто не может опубликовать приложение в AppStore
    Если приложение посылает запросы на сервер и у Вас на сервере нет поддержки IPV6, Apple не опубликует приложение!
    Что нужно для успешной публикации:
    Получить у Вашего хостера IPV6 адрес (примерно такой вид имеет ipv6 адрес)  2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d  
    Если нет root-доступа к серверу, то можно воспользоваться сервисом https://cloudflare.com Если есть root-доступ, то ознакомьтесь с инструкцией Мы рассмотрим самый частый вариант, без root-доступа, через сервис CloudFlare
    Не буду расписывать регистрацию, там все просто Нажимаем +Add Site, вписываем адрес Вашего сайта (домен), как только система проверит конфигурацию Вашего текущего DNS, она предложит изменить NS-сервера В кабинете хостера Вам нужно будет сменить NS-сервара, на те которые выдал CloudFlare  В CloudFlare -> раздел DNS Нужно будет дописать запись типа AAAA с Вашим ipv6 адресом  Все поддомены которые есть также прописать через запись типа CNAME  Чтобы работало FTP нужно отключить HTTP Proxy (CDN)  Теперь FTP протокол будет доступен по IPv4, не по домену Ждём обновления DNS и проверяем правильность конфигурации
    Результат примерно такой должен быть

    Что нужно сделать в Delphi / C++:
    Выкидываем TidHTTP (Indy) и переписываем на TNetHTTPClient Приложу пример запроса и обработки ответов, учтен баг с получением контента на IOS
    TmyAPI.zip или https://github.com/rzaripov1990/FMX.HTTP.Request
  6. Like
    Anatoliy отреагировална FAN в Amazon и Delphi   
    Видео - Amazon Web Services Programming

     
    Статья: Один год бесплатного облачного хостинга
    https://klen.github.io/aws.html
     
     
  7. Thanks
    Anatoliy отреагировална slav_z в Срабатывает OnClick на ListBox при скроллинге   
    OnTap лучше не используйте, я бы сделал на обычный OnClick... перед вызовом действий, связанных с элементами списка (ваши ShowMessage 1,  ShowMessage 2 ), просто проверьте "а не прокручивается ли сейчас listbox (scrollbox)" с помощью ListBox.AniCalculations.Moved...
  8. Like
    Anatoliy отреагировална Eric Myval в Unable to create process   
    Результат следующий 
    Мой проект корректно работает под
    1) Windows 32/64
    2) Android 32/64
    3) iOS 32/64 (обязательно настроить сертификаты, которые можно создать и прикрепить в Xcode + настроить их в Rad Studio в разделе Project-Deployment-Provisioning, выбрать там ключи как вы их настроили на вашем маке + ОБЯЗАТЕЛЬНО в version info удалить текст в CFBundleIdentifier, должно быть пусто)
    4) MacOS 32/64 
    5) iOS 32/64 simulator - не работает!!!
  9. Like
    Anatoliy отреагировална Andrey Efimov в [Статья][Android] Серия статей на тему Uses Permissions   
    Обновлена серия статей на тему использования Uses Permissions.
    Uses Permissions: Теория Uses Permissions: Добавляем метод onRequestPermissionsResult в приложение (для Delphi 10.1/10.2) Uses Permissions: Практика (для Delphi 10.3) Автор: Андрей Ефимов
  10. Like
    Anatoliy отреагировална krapotkin в Фреймворк для стандартного ListView   
    P.S.
    по факту использования мне показалось, что удобнее использовать не отдельный JSON файл, а прямо в коде константой задавать JSON строкой.
    (Видимо сказались приключения с деплоем)))
  11. Like
    Anatoliy отреагировална Tumaso в Долгая реакция переключения вкладок   
    Попробуй при создании приложения единоразово вызвать процедуру PreloadContent(TabControl2), где PreloadContent определена следующим образом:
    procedure PreloadContent(const AControl: TControl); {$IF DEFINED(ANDROID) or DEFINED(IOS)} var I: Integer; {$ENDIF} begin {$IF DEFINED(ANDROID) or DEFINED(IOS)} if AControl is TStyledControl then TStyledControl(AControl).ApplyStyleLookup; if AControl.ControlsCount > 0 then for I := 0 to AControl.ControlsCount - 1 do PreloadContent(AControl.Controls[I]); {$ENDIF} end;  
  12. Like
    Anatoliy отреагировална Tumaso в firemonkey android otg camera   
    а этот микроскоп определяется андроидом как стандартная камера? если да, то задача несложная. В rio вообще всё из коробки, в berlin нужен дополнительный модуль запроса разрешений (для андроид 6+), а с камерой можно работать из коробки
  13. Like
    Anatoliy отреагировална Maka в переход к x64?   
    Отвечают долго, 10-14 дней, а потом еще около 7 дней переписка, проверки и ожидание решения. Наберитесь терпения
  14. Like
    Anatoliy отреагировална krapotkin в Загрузка настроек приложения из БД   
    правильный ответ - не делать так ))
    нужно хранить настройки приложения в отдельном классе
    тогда кроме самого класса нужны методы, которые 
    1) читают пишут его из ... файла, БД, интернета и т.д.
    2) в нужный момент (обычно чтобы изобразить форму и заполнить св-ва компонентов или еще для чего угодно) использовать эти настройки
    3) вытекает из 2) сохранять в нужный момент новые значения в переменную, где лежат настройки
    для хранения настроек отлично подходит JSON. Т.к. он может иметь иерархическую структуру, что очень удобно. Его и хранить в БД.
    Можно и прямо поля, строки и все такое, но все равно, собирать их нужно в некое хранилище в программе.
    Пример разбирал тут http://www.cyberforum.ru/blogs/469693/blog4883.html
  15. Like
    Anatoliy отреагировална Slym в Загрузка настроек приложения из БД   
    FDQuery1.Lookup?
    или RTTI
    c:=FindComponent(FDQuery1.Fields[1].AsString)
    if assigned(c)
      SetProp(c,FDQuery1.Fields[2].AsString,TValue.From(FDQuery1.Fields[3].AsString))
     
  16. Like
    Anatoliy отреагировална Rusland в Invalid parameter при подключении таблицы   
    Кажется нашел я причину проблем с моим DataSnap проектом - при создании я поставил галочку HTTPS. 
    Сейчас пересоздал проект заново без HTTPS, все заработало.
    PS. Возможно просто нужно найти правильные ssleay32.dll и libeay32.dll
  17. Like
    Anatoliy отреагировална Евгений Корепов в Умный дом   
    К сожалению тема никакого отношения в Умному дому не имеет. В телеграмме я поднимал тему о реальных технологиях умного дома - датчиках (задымление, протечка, газ, открытие двери/окна, движение), протоколы и технологии соединения всего этого, к примеру ZigBee, ну и работа со всем этим хозяйством.
    Тема прикольная и интересная. Написал на delphi класс работы в ZigBee шлюзом, нормально опрашиваю все датчики, но запись реализовать не удалось из за отсутствия в delphi библиотек шифрования "из коробки". Наработок куча, но все они времен Delph 7 - абсолютно все используют короткие ANSI строки, и в современных версиях среды результат шифрования/дешифровки может быть какой угодно, но не правильный.
    Пока все что нужно по быстрому написал на php, там хоть с шифрованием порядок, не надо изобретать велосипед или адаптировать код двадцатилетней давности.
    Так что теперь могу включать/выключать свет с помощью умной розетки, включать светильник на основном хабе, выбирая яркость и палитру, но на php ))))
  18. Like
    Anatoliy отреагировална krapotkin в Фреймворк для стандартного ListView   
    еще один пример раскладки из реального проекта

    { "Columns":[], "Variables": [ {"Y_UNIT":"12"}, {"GAP":"8"}, {"ITEM_H":"2*GAP+5*Y_UNIT"}, {"IMG_H":"76"}, {"IMG_W":"76"}, {"STOCK_SIZE":"48"}, {"PRICE_COLW":"53"} ], "Objects": [ {"Name":"ID","Kind":"data"}, , {"Name":"img","Kind":"image", "Place":{"X":"0","Y":"0","W":"IMG_W","H":"IMG_H"}, } , {"Name":"Text","Kind":"text","TextHAlign":"leading","TextVAlign":"leading", "Place":{"X":"img.right","Y":"GAP","W":"itemwidth - IMG_W - GAP - 2*PRICE_COLW - GAP","H":"52"}, "WordWrap":true, "Color":"black", "Font":{"Size":12} } , {"Name":"earlier","Kind":"text","TextHAlign":"leading","TextVAlign":"leading", "Place":{"X":"text.left","Y":"ITEM_H-2*GAP+2","W":"itemwidth - 2*PRICE_COLW","H":"Y_UNIT"}, "WordWrap":false, "Color":"green", "Font":{"Size":10} } , {"Name":"price1","Kind":"text","TextHAlign":"trailing","TextVAlign":"trailing", "Place":{"X":"itemwidth-GAP-PRICE_COLW-W","Y":"GAP+2*Y_UNIT","W":"auto","H":"Y_UNIT*1.5", "priority":"WXYH"}, "WordWrap":false, "Color":"black", "Font":{"Size":15} } , {"Name":"imgstrike","Kind":"image", "Place":{"X":"price1.x-5","Y":"price1.y","W":"price1.w+8","H":"price1.h"}, } , {"Name":"price2","Kind":"text","TextHAlign":"trailing","TextVAlign":"trailing", "Place":{"X":"price1.right-W","Y":"ITEM_H-GAP-Y_UNIT*1.5","W":"auto","H":"Y_UNIT*1.5", "priority":"WXYH"}, "WordWrap":false, "Color":"black", "Font":{"Size":15, "style":"bold"} } , {"Name":"qty","Kind":"text","TextHAlign":"trailing","TextVAlign":"center", "Place":{"X":"itemwidth-PRICE_COLW-GAP","Y":"GAP","W":"PRICE_COLW","H":"2*Y_UNIT"}, "WordWrap":false, "Color":"black", "Font":{"Size":27, "style":"bold"} } , {"Name":"imgstock","Kind":"image", "Place":{"X":"itemwidth-STOCK_SIZE-3","Y":"ITEM_H-STOCK_SIZE-4","W":"STOCK_SIZE","H":"STOCK_SIZE"}, } ], "ItemHeight":"ITEM_H", "ItemSpaces": {"X":"0","Y":"0","W":"0","H":""}, "SideSpace":"0" }  
  19. Like
    Anatoliy отреагировална krapotkin в Удаление динамически созданных компонентов   
    Во-первых, откройте для себя фреймы ))
    Во-вторых убивать себя из обработчика себя нельзя, да и не нужно (см п.1)
    В качестве костыля.
    1. Создавайте все с Owner=NIL2.
    2. 
    TTask.Run(procedure begin   tthread.synchronize(nil, procedure begin     KILLTHEMALL(); end); end)  
  20. Like
    Anatoliy отреагировална qz5 в Не отрисовываются итемы при FetchOptions.Mode:=fmManual у DataSet'a   
    Короче нашел способ, чтобы добавлялись Item при LiveBinding! Потратил кучу времени. Вот так:
    FDQuery1.FetchNext; LinkFillControlToField1.Active := False; LinkFillControlToField1.Active := true; Но есть тогда другая проблема - ListView прокручивается на самый верх при добавлении новых строк.
    Решил это вот так:
    procedure TForm1.ListView1ScrollViewChange(Sender: TObject); var ItemHeight, p: single; begin p := ListView1.ScrollViewPos; ItemHeight := ListView1.ItemAppearance.ItemHeight; if ListView1.ScrollViewPos + ListView1.Height > ItemHeight * 0.8 * ListView1.ItemCount then begin FDQuery1.FetchNext; LinkFillControlToField1.Active := False; LinkFillControlToField1.Active := true; ListView1.ScrollViewPos := p; end; end; В принципе работает, надо только добавить условия, что все данные показаны и т.п., но наверное не буду я всё равно делать на биндингах.
    Хочу всё переделать назад на ручное добавление элементов. Подумаю как лучше будет работать.
  21. Like
    Anatoliy отреагировална mab в Не отрисовываются итемы при FetchOptions.Mode:=fmManual у DataSet'a   
    Доброго времени суток, коллеги.
    Столкнулся с проблемой неотрисовки итемов в ListView при выставлении свойства TFDQuery.FetchOptions.Mode := fmManual. Данные с TListView (и TGrid) связаны посредством LiveBindings. На скрине видно, что данные в принципе загружены в датасет и даже отображаются в TGrid, но не в Listview.

    Может кто сталкивался? Варианты пробовал разные, бьюсь 3-й день, но увы(
    До решения в общем додумался (но вышеуказанный способ не выходит из головы))): отлавливать событие, что список прокручен до упора и увеличивать свойство FetchOptions.RecsMax (при FetchOptions.Mode := скажем fmAll).
    Для чего нужно: открывать без задержек таблицы с большим количеством записей, не загружая их в датасет сразу все. fmOnDemand необходимого эффекта не дал - все равно загружаются все записи сразу. Хотя здесь (http://docwiki.embarcadero.com/Libraries/XE8/en/FireDAC.Stan.Option.TFDFetchOptions.Mode) о свойстве с этим значением написано обратное.
    PS. Delphi XE7 (XE8), БД SQLite. Проект в прицепе.
    33333.zip
  22. Like
    Anatoliy отреагировална DirtyBorov в Не отрисовываются итемы при FetchOptions.Mode:=fmManual у DataSet'a   
    Похоже FireDAC плохо дружит с LiveBinding. Я тоже напоролся на проблему - не обновляются данные. 
    Есть 3 три таблицы, связанных внешними ключами через Master/Detail, по цепочке 1>2>3. Если перейти по записям в первой таблице - во второй данные обновятся, а в третьей - нет. Обновляются только если нет связанных данных.
    Самое интересное то, что точно такой же проект, с теме же таблицами на VCL отлично работает. Из чего складывается вывод - косячит биндинг. Точнее TBindSourceDB.
  23. Like
    Anatoliy отреагировална alexei в Определение включена ли на устройстве возможность применять mock location   
    вот тебе методы обнаружения ложных gps с исходниками :https://github.com/smarques84/MockLocationDetector
  24. Like
    Anatoliy отреагировална qz5 в Модерация приложения в google play   
    Сейчас вроде три дня обещают модерировать
  25. Like
    Anatoliy получил реакцию от qz5 в Умный дом   
    В телеграмм канале обсуждалось создание умного дома. Пишу сюда. Телеграмм канал не удобен. Со временем там каша ничего не найти. Он лучше для флуда, а форум самое то. По теме - в студии для управления домом все есть из коробки. Сами биконы стоят копейки.
    Видио показывает управление. Ну и дополнительные полезные ссылки на  yutube:
     
×
×
  • Создать...