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

Kitty

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

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

  • Посещение

  • Победитель дней

    16

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

  1. Like
    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 сети, то все - проблема решена - Аппле именно так и проверяет.
     
     
  2. Like
    Kitty отреагировална Евгений Корепов в Узнать размер видеопамяти   
    Для Cuda тут https://github.com/nicehash/NiceHashMiner/tree/master/CudaDeviceDetection , 
    для OpenCL тут https://github.com/nicehash/NiceHashMiner/tree/master/AMDOpenCLDeviceDetection
    код на сях, но перевести на Delphi думаю не очень сложно.
  3. Like
    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;
  4. Like
    Kitty отреагировална Andrey Efimov в Посоветуйте функционал для приложения   
    Для начала можно посмотреть приложения других партий. Потом можно глянуть сайты партий и особенно сайт вашего заказчика, т.к. часто подобные приложения копируют очень многое с сайта. Т.е. можно будет уже придумать основной функционал, а потом уже добавлять чаты, карты и т.п.
    А вообще @kami дело сказал:
  5. Like
    Kitty отреагировална #WAMACO в Посоветуйте функционал для приложения   
    Добавьте скопление членов партии на карте, т.е. все зарегистрированные члены партии видят близ себя других членов партии. Удобно, например, когда ты на митинге, собрании видишь количество единомышленников, их движение, скопление. Добавьте общий репозиторий добрых дел, с фотографиями, видео, описанием, чтобы другие члены партии могли проголосовать за значимость совершенных действий членов партии.
  6. Like
    Kitty отреагировална Rusland в Посоветуйте функционал для приложения   
    Периодически членам партии в пушах присылать призывы поддержать материально (из своего кармана) какое-нибудь благое начинание типа скинуться на: ремонт дороги, школы, больницы...
  7. Like
    Kitty отреагировална kami в Посоветуйте функционал для приложения   
    Нормативная документация (устав, цели, программа)
    Актуальные вопросы на предстоящую повестку дня на какой-нибудь сессии
    Обращения от граждан (хотя они гораздо чаще идут на конкретного представителя)
    "Внутреннее" голосование по какому-нибудь разрабатываемому документу / согласование уполномоченными должностными лицами
    А вообще - лучше всего уточнить у заказчика. Не "какой функционал должен быть у приложения" , "дайте ТЗ", а "давайте вместе подумаем / пофантазируем - вот у нас есть мобильное приложение. И мы будем его использовать для / чтобы ...". Причем это лучше делать не в письменной форме, а при личной встрече (при наличии такой возможности).
     
  8. Like
    Kitty отреагировална krapotkin в Get запросы в iOS   
    вот реально в реальной задаче в течение одного года разработки я добавил в этот JSON не менее 5 разных полей...
  9. Like
    Kitty отреагировална kami в Get запросы в iOS   
    Видимо, они были не универсальны, а расширяемы. То есть - заточены под текущую задачу с большим заделом "на будущее".
    Справедливости ради надо сказать, что у меня тоже http-обмен всегда затачивался под конкретную задачу, без использования чего-то универсализированного. В отличие от некоторых других областей.
  10. Like
    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)  - форма не уничтожится и останется видимой.
  11. Like
    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;  
  12. Like
    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;  
  13. Like
    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;  
  14. Like
    Kitty отреагировална Ingalime в [Статья] Настройка пуш уведомлении через сервис Firebase для ANDROID и IOS [Часть 2]   
    Равиль Зарипов, подскажите, пожалуйста, что надо изменить в php сервере, чтобы обойти ограничение на 1000 устройств?
     
  15. Like
    Kitty отреагировална Равиль Зарипов (ZuBy) в [Статья] Настройка пуш уведомлении через сервис Firebase для ANDROID и IOS [Часть 2]   
    ну думаю изменить нужно код, а что именно поменять это решение не для этого форума. вам нужно обратиться на форум по php
  16. Like
    Kitty отреагировална Равиль Зарипов (ZuBy) в TAdMob (рекламное видео)   
    про это?
    http://www.fmxexpress.com/code-snippet-for-full-screen-interstitial-ads-in-delphi-xe8-firemonkey-on-android/
  17. Like
    Kitty отреагировална chaplin.u@gmail.com в файл не находится   
    после долгих мучений нашёл проблему. баг в деплойменте. файл не деплоится если в имени файла есть символ подчёркивания _ !
    почему я не проверил сразу т.к. почти все файлы аппликации содержат этот символ а то и два. я вообще-то и взял файл для проверки один из стандартных.
    но они проходят на ура а файлы которые идут в документс не проходят.  
    спасибо всем кто помогал.
  18. Like
    Kitty отреагировална Равиль Зарипов (ZuBy) в Ищу несколько кросс-платформенных компонентов   
    да, T(Net)HTTPClient как раз и работает адекватно на всех платформах
    при запуске проверить функцией CheckInet, если нету доступа показать окно с прокси
  19. Like
    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!
    Просмотр полной статьи
  20. Like
    Kitty отреагировална krapotkin в Не работают библиотеки   
    о чем и речь, в стартере есть только win32
    нужен trial. Он идет в версии Architect
  21. Like
    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 надо как-то уничтожать. Хотя, это интерфейс…
  22. Like
    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
     
  23. Like
    Kitty отреагировална krapotkin в Не работают библиотеки   
    что за версия и как определили что нет?
    мобильная разработка только для Enterprise и Architect
    может это VCL проект?
  24. Like
    Kitty отреагировална ENERGY в Не работают библиотеки   
    Для Android лучше Berlin использовать с последним Update 2. На Tokyo Android глючный и тормозит, фактически программы получаются не юзабельные, для Tokyo лучше подождать обновления. Все детали на форуме эбмаркадеры.
  25. Like
    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;  
×
×
  • Создать...