Anatoliy
-
Постов
176 -
Зарегистрирован
-
Посещение
Активность репутации
-
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}
-
Anatoliy отреагировална Alialioglu2016 в Application Loader
Загрузчик приложений больше не используется на новой Mac OS X. Для этого вы должны использовать приложение Transporter.
Transporter
-
Anatoliy отреагировална gonzales в Пуши в IOS
Так а в чем конкретно проблема?
В коде есть OnReceiveNotificationEvent - вызывается когда придет пуш. Соответственно вместо ShowMessage(aText); пишите вызов новой формы. Если она уже создана, то просто FormB.visible:=true;, если не создана, то вызов конструктора, (примерно так FormB:=TForm.Create;, соответственно конструктор должен быть описан)
-
Anatoliy отреагировална Brovin Yaroslav в [Статья] Делаем скриншот любого контрола FireMonkey
Ссылка: http://yaroslavbrovin.ru/category/fmx_ru/graphics_ru/ Автор: Ярослав Бровин Статья рассказывает о том, как сделать скриншот любого контрола FireMonkey. Так же немного расскрывает общий процесс отрисовки компонентов.
-
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
-
Anatoliy отреагировална FAN в Amazon и Delphi
Видео - Amazon Web Services Programming
Статья: Один год бесплатного облачного хостинга
https://klen.github.io/aws.html
-
Anatoliy отреагировална slav_z в Срабатывает OnClick на ListBox при скроллинге
OnTap лучше не используйте, я бы сделал на обычный OnClick... перед вызовом действий, связанных с элементами списка (ваши ShowMessage 1, ShowMessage 2 ), просто проверьте "а не прокручивается ли сейчас listbox (scrollbox)" с помощью ListBox.AniCalculations.Moved...
-
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 - не работает!!!
-
Anatoliy отреагировална Andrey Efimov в [Статья][Android] Серия статей на тему Uses Permissions
Обновлена серия статей на тему использования Uses Permissions.
Uses Permissions: Теория Uses Permissions: Добавляем метод onRequestPermissionsResult в приложение (для Delphi 10.1/10.2) Uses Permissions: Практика (для Delphi 10.3) Автор: Андрей Ефимов
-
Anatoliy отреагировална krapotkin в Фреймворк для стандартного ListView
P.S.
по факту использования мне показалось, что удобнее использовать не отдельный JSON файл, а прямо в коде константой задавать JSON строкой.
(Видимо сказались приключения с деплоем)))
-
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;
-
Anatoliy отреагировална Tumaso в firemonkey android otg camera
а этот микроскоп определяется андроидом как стандартная камера? если да, то задача несложная. В rio вообще всё из коробки, в berlin нужен дополнительный модуль запроса разрешений (для андроид 6+), а с камерой можно работать из коробки
-
Anatoliy отреагировална Maka в переход к x64?
Отвечают долго, 10-14 дней, а потом еще около 7 дней переписка, проверки и ожидание решения. Наберитесь терпения
-
Anatoliy отреагировална krapotkin в Загрузка настроек приложения из БД
правильный ответ - не делать так ))
нужно хранить настройки приложения в отдельном классе
тогда кроме самого класса нужны методы, которые
1) читают пишут его из ... файла, БД, интернета и т.д.
2) в нужный момент (обычно чтобы изобразить форму и заполнить св-ва компонентов или еще для чего угодно) использовать эти настройки
3) вытекает из 2) сохранять в нужный момент новые значения в переменную, где лежат настройки
для хранения настроек отлично подходит JSON. Т.к. он может иметь иерархическую структуру, что очень удобно. Его и хранить в БД.
Можно и прямо поля, строки и все такое, но все равно, собирать их нужно в некое хранилище в программе.
Пример разбирал тут http://www.cyberforum.ru/blogs/469693/blog4883.html
-
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))
-
Anatoliy отреагировална Rusland в Invalid parameter при подключении таблицы
Кажется нашел я причину проблем с моим DataSnap проектом - при создании я поставил галочку HTTPS.
Сейчас пересоздал проект заново без HTTPS, все заработало.
PS. Возможно просто нужно найти правильные ssleay32.dll и libeay32.dll
-
Anatoliy отреагировална Евгений Корепов в Умный дом
К сожалению тема никакого отношения в Умному дому не имеет. В телеграмме я поднимал тему о реальных технологиях умного дома - датчиках (задымление, протечка, газ, открытие двери/окна, движение), протоколы и технологии соединения всего этого, к примеру ZigBee, ну и работа со всем этим хозяйством.
Тема прикольная и интересная. Написал на delphi класс работы в ZigBee шлюзом, нормально опрашиваю все датчики, но запись реализовать не удалось из за отсутствия в delphi библиотек шифрования "из коробки". Наработок куча, но все они времен Delph 7 - абсолютно все используют короткие ANSI строки, и в современных версиях среды результат шифрования/дешифровки может быть какой угодно, но не правильный.
Пока все что нужно по быстрому написал на php, там хоть с шифрованием порядок, не надо изобретать велосипед или адаптировать код двадцатилетней давности.
Так что теперь могу включать/выключать свет с помощью умной розетки, включать светильник на основном хабе, выбирая яркость и палитру, но на php ))))
-
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" }
-
Anatoliy отреагировална krapotkin в Удаление динамически созданных компонентов
Во-первых, откройте для себя фреймы ))
Во-вторых убивать себя из обработчика себя нельзя, да и не нужно (см п.1)
В качестве костыля.
1. Создавайте все с Owner=NIL2.
2.
TTask.Run(procedure begin tthread.synchronize(nil, procedure begin KILLTHEMALL(); end); end)
-
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; В принципе работает, надо только добавить условия, что все данные показаны и т.п., но наверное не буду я всё равно делать на биндингах.
Хочу всё переделать назад на ручное добавление элементов. Подумаю как лучше будет работать.
-
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
-
Anatoliy отреагировална DirtyBorov в Не отрисовываются итемы при FetchOptions.Mode:=fmManual у DataSet'a
Похоже FireDAC плохо дружит с LiveBinding. Я тоже напоролся на проблему - не обновляются данные.
Есть 3 три таблицы, связанных внешними ключами через Master/Detail, по цепочке 1>2>3. Если перейти по записям в первой таблице - во второй данные обновятся, а в третьей - нет. Обновляются только если нет связанных данных.
Самое интересное то, что точно такой же проект, с теме же таблицами на VCL отлично работает. Из чего складывается вывод - косячит биндинг. Точнее TBindSourceDB.
-
Anatoliy отреагировална alexei в Определение включена ли на устройстве возможность применять mock location
вот тебе методы обнаружения ложных gps с исходниками :https://github.com/smarques84/MockLocationDetector
-
Anatoliy отреагировална qz5 в Модерация приложения в google play
Сейчас вроде три дня обещают модерировать
-
Anatoliy получил реакцию от qz5 в Умный дом
В телеграмм канале обсуждалось создание умного дома. Пишу сюда. Телеграмм канал не удобен. Со временем там каша ничего не найти. Он лучше для флуда, а форум самое то. По теме - в студии для управления домом все есть из коробки. Сами биконы стоят копейки.
Видио показывает управление. Ну и дополнительные полезные ссылки на yutube: