Kitty
-
Постов
792 -
Зарегистрирован
-
Посещение
-
Победитель дней
16
Активность репутации
-
Kitty отреагировална Сергей Сергеев в Ipv6 в datasnap
Проблема решена - приложение в Апп сторе.
Опишу как решил.
Конфигурация - Berlin 10.1 - update 2, Xcode 8.
Datasnap сервер, использую tcpIp.
Компоненты на клиенте TSqlConnection - для Datasnap, TIdTcpClient - использую для проверки соединения перед открытием ДатаСнар соединения, т.к. в нем не работает ТаймОут и есть вероятность "залипнуть"
Сервер так и остался в ИП4 ( вначале хотел перевести его в ип6, но провайдер МТС ответил, что такие адреса не дает, сделал туннель с tunnelbroker.net на тестовый сервер, но так и не пригодилось ( кстати бесплатно, но без гарантии пропускной способности) .
Никаких квадратных скобок , если у вас имена хостов а не ИП адреса не нужны.
Смысл простой - у обоих компонентов нужно выставить свойства протоколов в зависимости от сети нахождения клиента.
Вначале ставлю у обоих ИПв4, если коннект ексептиться - то ставлю ипв6 и еще раз пробую коннектится. и только второй ексепт скажет, что сети действительно нет.
function TClientModule1.gethost(aHost : string):string; var dbxProps: TDBXDatasnapProperties; begin try TabbedForm.HostDS := TabbedForm.Host4; TabbedForm.HostP := TabbedForm.Host4; // ставим все в ип4 IdTCPClient1.IPVersion := TIdIpVersion.Id_IPv4; IdTCPClient1.Host:=TabbedForm.Host4; IdTCPClient1.Port:=StrToInt(TabbedForm.port); //порт сервера DataSnap idTCPClient1.ConnectTimeout := 12000; //заданный тайм-аут Assert(SQLConnection1.DriverName = 'DataSnap', 'Driver must be DataSnap'); dbxProps := SQLConnection1.ConnectionData.Properties as TDBXDatasnapProperties; dbxProps.CommunicationProtocol := 'tcp/ip'; dbxProps.CommunicationIPVersion := 'IP_IPv4'; IdTCPClient1.Connect; if IdTCPClient1.Connected then begin //подключились result:=TabbedForm.Host4; TabbedForm.HostDS := TabbedForm.Host4; TabbedForm.HostP := TabbedForm.Host4; IdTCPClient1.Disconnect; end; except on E: Exception do begin //toast ('IPv4 except '+E.Message); try IdTCPClient1.IPVersion := TIdIpVersion.Id_IPv6; IdTCPClient1.Host:= TabbedForm.Host6P; IdTCPClient1.Port:=StrToInt(TabbedForm.port); //порт сервера DataSnap idTCPClient1.ConnectTimeout := 12000; //заданный тайм-аут IdTCPClient1.Connect; if IdTCPClient1.Connected then begin //подключились result:=TabbedForm.Host6DS; TabbedForm.HostDS := TabbedForm.Host6DS; TabbedForm.HostP := TabbedForm.Host6P; IdTCPClient1.Disconnect; dbxProps.CommunicationIPVersion := 'IP_IPv6'; end; except on E: Exception do begin //не подключились result:='Не подключились'; dbxProps.CommunicationIPVersion := 'IP_IPv4'; IdTCPClient1.IPVersion := TIdIpVersion.Id_IPv4; TabbedForm.HostDS := TabbedForm.Host4; TabbedForm.HostP := TabbedForm.Host4; end; end; end; end; Тут немного есть излишества кода - думал что для Ип4 и Ип6 будут разные имена хостов, но сейчас это одно и тоже имя Сервера который находится в Ип4 и не имеет ни выхода ни адреса в ип6.
вызвав эту фунцию я заполняю глобальные переменные ( ds- датаснап сервер. P- для пробного открытия ("пинг" )) на самом деле они тоже одинаковые.
клиента проверял, как описано http://www.brianjcoleman.com/tutorial-how-to-test-your-app-for-ipv6-compatibility/
т.е. макбук подключен через 3ж модем в сеть и через WiFi раздает ИпВ6 сеть и Айфон к ней присоединен. Если приложение работает в этой внутренней ипв6 сети, то все - проблема решена - Аппле именно так и проверяет.
-
Kitty отреагировална Евгений Корепов в Узнать размер видеопамяти
Для Cuda тут https://github.com/nicehash/NiceHashMiner/tree/master/CudaDeviceDetection ,
для OpenCL тут https://github.com/nicehash/NiceHashMiner/tree/master/AMDOpenCLDeviceDetection
код на сях, но перевести на Delphi думаю не очень сложно.
-
Kitty отреагировална Равиль Зарипов (ZuBy) в Разрешение/запрет гасить экран
я использовал вот такой вариант в одной программе
function GetScreenOffTimeout: integer; // Androidapi.JNI.Provider, FMX.Helpers.Android begin Result := 0; {$IFDEF ANDROID} Result := TJSettings_System.JavaClass.getInt(SharedActivityContext.getContentResolver, TJSettings_System.JavaClass.SCREEN_OFF_TIMEOUT, 15000); // 15 seconds is default is not found {$ENDIF} end; function SetScreenOffTimeout(ATimeOut: integer): Boolean; // Androidapi.JNI.Provider, FMX.Helpers.Android begin Result := false; {$IFDEF ANDROID} Result := TJSettings_System.JavaClass.putInt(SharedActivityContext.getContentResolver, TJSettings_System.JavaClass.SCREEN_OFF_TIMEOUT, ATimeOut); {$ENDIF} end; -
Kitty отреагировална Andrey Efimov в Посоветуйте функционал для приложения
Для начала можно посмотреть приложения других партий. Потом можно глянуть сайты партий и особенно сайт вашего заказчика, т.к. часто подобные приложения копируют очень многое с сайта. Т.е. можно будет уже придумать основной функционал, а потом уже добавлять чаты, карты и т.п.
А вообще @kami дело сказал:
-
Kitty отреагировална #WAMACO в Посоветуйте функционал для приложения
Добавьте скопление членов партии на карте, т.е. все зарегистрированные члены партии видят близ себя других членов партии. Удобно, например, когда ты на митинге, собрании видишь количество единомышленников, их движение, скопление. Добавьте общий репозиторий добрых дел, с фотографиями, видео, описанием, чтобы другие члены партии могли проголосовать за значимость совершенных действий членов партии.
-
Kitty отреагировална Rusland в Посоветуйте функционал для приложения
Периодически членам партии в пушах присылать призывы поддержать материально (из своего кармана) какое-нибудь благое начинание типа скинуться на: ремонт дороги, школы, больницы...
-
Kitty отреагировална kami в Посоветуйте функционал для приложения
Нормативная документация (устав, цели, программа)
Актуальные вопросы на предстоящую повестку дня на какой-нибудь сессии
Обращения от граждан (хотя они гораздо чаще идут на конкретного представителя)
"Внутреннее" голосование по какому-нибудь разрабатываемому документу / согласование уполномоченными должностными лицами
А вообще - лучше всего уточнить у заказчика. Не "какой функционал должен быть у приложения" , "дайте ТЗ", а "давайте вместе подумаем / пофантазируем - вот у нас есть мобильное приложение. И мы будем его использовать для / чтобы ...". Причем это лучше делать не в письменной форме, а при личной встрече (при наличии такой возможности).
-
Kitty отреагировална krapotkin в Get запросы в iOS
вот реально в реальной задаче в течение одного года разработки я добавил в этот JSON не менее 5 разных полей...
-
Kitty отреагировална kami в Get запросы в iOS
Видимо, они были не универсальны, а расширяемы. То есть - заточены под текущую задачу с большим заделом "на будущее".
Справедливости ради надо сказать, что у меня тоже http-обмен всегда затачивался под конкретную задачу, без использования чего-то универсализированного. В отличие от некоторых других областей.
-
Kitty отреагировална ENERGY в Как правильно уничтожить форму?
DisposeOf не освобождает память, а просто вызывает деструктор.
Можно не использовать его, а использовать обычный Close с TCloseAction.caFree.
Я проверял на мобильном компиляторе (Android) - все уничтожается корректно, срабатывает деструктор формы.
Обязательно создавать надо форму с Owner nil, иначе форма не уничтожится.
frmLoading := TfrmLoading.Create(nil); frmLoading.Show; //В форме: procedure TfrmLoading.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := TCloseAction.caFree; end; //Уничтожаем: frmLoading.Close; frmLoading := nil;
Если на ARC компиляторах вместо Close, вызвать FreeAndNil(frmLoading) - форма не уничтожится и останется видимой.
-
Kitty отреагировална Alex7wrt в TPath Как программно указать TPathData
Например так:
var path: TPathData; .......... Path:=TPathData.Create; Path.Clear; Path.MoveTo(PointF(x[0],y[0])); for i:=1 to N do Path.LineTo(PointF(x[i],y[i])); Path.ClosePath;
-
Kitty отреагировална Евгений Корепов в Get запросы в iOS
Var HTTPClient : THTTPClient; HTTPResponse : IHTTPResponse; LResultStream : TStringStream; LQuery, street, house : String; LResult : Boolean; begin HTTPClient:=THTTPClient.Create; LResultStream:=TStringStream.Create; LResult:=True; street:='Ленина'; house:='1'; LQuery:='https://geocode-maps.yandex.ru/1.x/?geocode='+'Кунгур'+',+'+street+'+улица,+дом+'+house; try HTTPResponse:=HTTPClient.Get(LQuery, LResultStream); except LResult:=False; end; if LResult and (HTTPResponse.StatusCode=200) then if LResultStream.Size>0 then begin // Обрабатываем результат находящийся тут LResultStream.DataString end; LResultStream.Free; HTTPClient.Free; end;
-
Kitty отреагировална Евгений Корепов в ListView задать размер скроллбара
Во время добавления так же можно отключить обработчики ListView1.OnUpdatingObjects и(или) ListView1.OnUpdateObject (если у вас в них есть какой либо код).
ListView1.BeginUpdate; ListView1.OnUpdatingObjects:=Nil; ListView1.OnUpdateObjects:=Nil; for i := 0 to List.Count - 1 do begin LVItems := ListView1.Items.Add; LVItems.Data['MyData']:=... ... end; ListView1.OnUpdatingObjects:=ListView1UpdateObjects; ListView1.OnUpdateObjects:=ListView1UpdatingObjects; ListView1.EndUpdate;
-
Kitty отреагировална Ingalime в [Статья] Настройка пуш уведомлении через сервис Firebase для ANDROID и IOS [Часть 2]
Равиль Зарипов, подскажите, пожалуйста, что надо изменить в php сервере, чтобы обойти ограничение на 1000 устройств?
-
Kitty отреагировална Равиль Зарипов (ZuBy) в [Статья] Настройка пуш уведомлении через сервис Firebase для ANDROID и IOS [Часть 2]
ну думаю изменить нужно код, а что именно поменять это решение не для этого форума. вам нужно обратиться на форум по php
-
Kitty отреагировална Равиль Зарипов (ZuBy) в TAdMob (рекламное видео)
про это?
http://www.fmxexpress.com/code-snippet-for-full-screen-interstitial-ads-in-delphi-xe8-firemonkey-on-android/
-
Kitty отреагировална chaplin.u@gmail.com в файл не находится
после долгих мучений нашёл проблему. баг в деплойменте. файл не деплоится если в имени файла есть символ подчёркивания _ !
почему я не проверил сразу т.к. почти все файлы аппликации содержат этот символ а то и два. я вообще-то и взял файл для проверки один из стандартных.
но они проходят на ура а файлы которые идут в документс не проходят.
спасибо всем кто помогал.
-
Kitty отреагировална Равиль Зарипов (ZuBy) в Ищу несколько кросс-платформенных компонентов
да, T(Net)HTTPClient как раз и работает адекватно на всех платформах
при запуске проверить функцией CheckInet, если нету доступа показать окно с прокси
-
Kitty отреагировална Brovin Yaroslav в Cool App Winner: Mimix 3D Profile Scanner by intricad
The March winner of the Embarcadero Cool App Contest is the Mimix 3D Profile Scanner by intricad. I looked at this app a few years ago, and found it pretty impressive then. It uses a really cool technique to capture a 3D impression with only your monitor and a standard webcam.
Mimix 3D Profile Scanner Personal allows you to make 3D impressions using your webcam and PC monitor screen. mimix 3D Profile Scanner Personal uses a set of 4 black and white patterns which are projected by your computer screen while your camera captures the images of your face in front of the screen. The images are then processed to reveal a 3D impression.
Under proper lighting conditions mimix 3D can capture scenes and objects with incredible detail recovery. The trick is to be in a very dark room, and have a good webcam and bright screen.
After the scan you can create cool effects by relighting the scene or 3D print your impression.
It is built for Windows using Delphi, VCL, TMS Components, Eurekalog and ShellBrowser.
Check out the video or download the free scanner for yourself!
[YoutubeButton url='https://youtu.be/3L7TjscXpCI']
Be sure to enter you cool app for a chance to win a $500 gift card. New winners every month!
Просмотр полной статьи
-
Kitty отреагировална krapotkin в Не работают библиотеки
о чем и речь, в стартере есть только win32
нужен trial. Он идет в версии Architect
-
Kitty отреагировална Mazzay в Можно ли как-нибудь попроще воспроизвести на Андроиде произвольный звук?
Спасибо большое!
На Билдере получилось так:
#include <AndroidApi.JNI.Media.hpp> void AndroidSound(double freqHz, int durationMs) { double Pi = 3.14159265358979323846; int count = (int)(44100.0 * 2.0 * (durationMs / 1000.0)) & ~1; TJavaArray__1<short>* samples = new TJavaArray__1<short>(count); for(int i = 0; i < count; i += 2) { short sample = (short)(Sin(2 * Pi * i / (44100.0 / freqHz)) * 0x7FFF); samples->Items[i + 0] = sample; samples->Items[i + 1] = sample; } _di_JAudioTrack audioTrack; audioTrack = TJAudioTrack::JavaClass->init(TJAudioManager::JavaClass->STREAM_MUSIC, 44100, TJAudioFormat::JavaClass->CHANNEL_CONFIGURATION_MONO, TJAudioFormat::JavaClass->ENCODING_PCM_16BIT, count * (sizeof(TJavaArray__1<short>) / 8), TJAudioTrack::JavaClass->MODE_STATIC); if(audioTrack->write((TJavaArray__1<short>*)samples, 0, count)) audioTrack->play(); delete samples; } Только при многократном вызове (у меня при прокрутке щёлкает звуком ScrollBox) получаю ошибку:
Не пойму, почему. Сдаётся мне, переменную audioTrack надо как-то уничтожать. Хотя, это интерфейс…
-
Kitty отреагировална krapotkin в Можно ли как-нибудь попроще воспроизвести на Андроиде произвольный звук?
http://stackoverflow.com/questions/2413426/playing-an-arbitrary-tone-with-android
тут формируют буфер синусом и
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, (int)numSamples*2, AudioTrack.MODE_STATIC); audioTrack.write(generatedSnd, 0, generatedSnd.length); // Load the track audioTrack.play(); ну или тут
https://gist.github.com/slightfoot/6330866
-
Kitty отреагировална krapotkin в Не работают библиотеки
что за версия и как определили что нет?
мобильная разработка только для Enterprise и Architect
может это VCL проект?
-
Kitty отреагировална ENERGY в Не работают библиотеки
Для Android лучше Berlin использовать с последним Update 2. На Tokyo Android глючный и тормозит, фактически программы получаются не юзабельные, для Tokyo лучше подождать обновления. Все детали на форуме эбмаркадеры.
-
Kitty отреагировална Равиль Зарипов (ZuBy) в Скачать курс валют через THTTPClient
нет такой проблемы, ваш код у меня отработал так
uses System.Net.HTTPClient; procedure TForm2.Button1Click(Sender: TObject); var aHttp: THTTPClient; aStr: TStringStream; begin aHttp := THTTPClient.Create; aStr := TStringStream.Create('', TEncoding.UTF8); try aHttp.Get('http://www.cbr.ru/', aStr); Memo1.text := aStr.DataString; finally aHttp.Free; aStr.Free; end; end;