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

Равиль Зарипов (ZuBy)

Модераторы
  • Постов

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

  • Посещение

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

    264

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

  1. Like
  2. Like
    Равиль Зарипов (ZuBy) получил реакцию от AngryOwl в TPushClient - нашёл чудесную вещь   
    у меня есть заготовка, но не помню на чем остановился. надо будет посмотреть и выложить
  3. Like
    Равиль Зарипов (ZuBy) отреагировална krapotkin в Размер Формы   
    еще TLayout для группировки компонентов

    и на других платформах тоже всегда так делайте
  4. Like
    Равиль Зарипов (ZuBy) получил реакцию от Ingalime в Поток в Firemonkey Android для скачивания TXT   
    во первых: синхронизация сделана не правильно
    во вторых: в примерах студии есть демка с отображением индикатора загрузки
    в третьих: создание TIdHTTP (лучше заменить на THTTPClient) нужно делать в потоке
     
    код на коленке, без TThread
    // uses System.Threading TTask.Run( procedure var aHTPP: THTTPClient; aStream: TStringStream; aResult: String; begin aResult := ''; aHTPP := THTTPClient.Create; aStream := TStringStream.Create('', TEncoding.UTF8); try aHTTP.Get('урл://', aStream); aResult := aStream.DataString; finally FreeAndNil(aHTPP); FreeAndNil(aStream); end; TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Text := aResult; end) end)  
  5. Like
    Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в Отправка PUSH сообщений через IdHTTP.Post   
    Уже давно замечены проблемы Indy с SSL на Android, вроде как, даже сама Idera рекомендовала (пруф не дам, т.к. не помню где видел это) использовать новые TNetHTTPClient и TNetHTTPRequest.
    Попробуйте использовать эти компоненты, с SSL работать умеют и асинхронные запросы умеют (т.е. не придётся создавать отдельный поток, достаточно изменить свойство компонента), и ещё куча всего.
    Основная справка с примерами тут: Using an HTTP Client
  6. Like
    Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в Embarcadero Delphi - где искать apk после компиляции проекта?   
    Опять же, пользуйтесь поиском!
    Ответ тут: Можно ли собрать APK без смартфона ?
     
    Справка:
    Deploying Your Unsigned Android Application Deploying Your Signed Android Application
  7. Like
    Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в Tokyo, артефакты при отрисовке на канве, Android   
    Рекомендую вернуться на Berlin Upd2.
    Tokyo вышла очень бажная, особенно в плане мобильной разработки. Юзать текущую версию себе дороже выйдет. Нужно дождаться как минимум Upd1, но я думаю лучше сразу Upd2 ждать.
  8. Like
    Равиль Зарипов (ZuBy) получил реакцию от #WAMACO в Как отправить фотографию в ВКонтакте?   
    вот был рабочий пример, который постил на стену ВК картинку (сейчас вроде чуть изменили апи, но должно работать)
    https://github.com/rzaripov1990/FMX.RESTLight
  9. Like
    Равиль Зарипов (ZuBy) получил реакцию от Anatoliy в TPushClient - нашёл чудесную вещь   
    у меня есть заготовка, но не помню на чем остановился. надо будет посмотреть и выложить
  10. Like
    Равиль Зарипов (ZuBy) получил реакцию от M1shQa в Отправка данных по http в фоновом режиме   
    полезно к прочтению
     
  11. Like
    Равиль Зарипов (ZuBy) отреагировална Vladimir PRO в Узнать размер видеопамяти   
    Это я этот пример выложил более года назад. Пример проверяет вашу конфигурацию на наличие разл. GPU (выдаёт их списком), инициализирует всё что необходимо на видео-акселераторе, создаёт массивы памяти на GPU, закачивает в них исходные данные из памяти CPU. Главное не забудьте, что рядом с файлом *.exe должны лежать текстовые файлы *.cpp (они при запуске передаются видеодрайверу на компиляцию). Если в них - в коде для GPU (Kernel, текстовом файле) на языке C99 есть ошибки - они будут показаны в "чёрном" окне. Потом выполняются в цикле несложные, но длительные операции.
    Причём это делается и на GPU (с контролем времени), и на CPU: чтобы убедиться в корректности вычислений. Папка со словом Slow в названии - это пример использования Atomic-функций (например, если надо найти среднее по большому массиву данных). В своих научных программах Atomic-функции стараюсь избегать: замедляют расчёты, "фирменные" atomic работают только с целыми. Использую вместо них barrier.
    Месяца 3 назад NVIDIA наконец-то начала переход со стандарта OpenCL1.2 на 2.0. Жаль, что такие интересные возможности OpenCL 2.0, как Pipes (трубы для обмена данными между модулями) NVIDIA (как и их любимая CUDA) пока не поддерживают... Только AMD даёт полноценную поддержку OpenCL 2.0 (только при размере видеопамяти более 2Gb!), а NVIDIA полностью совместима только с версией 1.2.
    В общем, будут вопросы - пишите: работаю только в связке Delphi/OpenCL уже давно. Кстати, в среде RAD Studio очень удобно редактировать одновременно и код Delphi-pascal, и C-код для OpenCL.
     
    =====
    Дополню (конец декабря 2017). Внутри той же  ссылки для скачивания добавил папку:
    OpenCL_Demo2017 Barrier and Local_Memory REDUCT
    В ней новый пример под Delphi XE8 64bit (работает и при компиляции в Delphi под Win32, но с ограничениями, о которых будет сказано ниже). Отличия:
    Добавлен пример простейшей редукции с использованием barrier и LocalMemory с обилием комментариев внутри Kernel-файла ProgramGPU1.cpp Показано, как внутри Kernel создать а-ля динамический массив (стандарт языка OpenCL 1.2 этого не позволяет). Главное. На форме добавлены Gauge-компоненты, показывающие:
    общую загрузку CPU ; загрузку CPU данной задачей ; загрузку GPU (общую); загрузку контроллера памяти GPU ; проценты использованной памяти GPU ; температуру GPU (в текстовом виде). Для определения загрузки GPU используется nvml.dll  (мануал 2017), так что последние 4 параметра определяются только для карт NVIDIA, и при компиляции в Delphi под 64bit. Эта динамич. библиотека для каждой карты NVIDIA - своя, обычно при установке драйвера карты она попадает в папку
    C:\Program Files\NVIDIA Corporation\NVSMI\nvml.dll (этот путь прямо прописан в прилагаемом примере по ссылке).
    Всё что связано с определением загрузки CPU-GPU находится в отдельном модуле ProcessorUsage.pas, который может быть применён и для других программ (без OpenCL).
    Если есть желание попробовать OpenCL не только на видеокартах, но и на процессорах INTEL, надо поставить драйвер Ещё раз напоминаю, что при запуске *.exe рядом с ним должны лежать два текстовых файла *.cpp - они будут отправлены на компиляцию драйверу видеокарты! Буду весьма признателен, если кто-то подскажет способ измерения загрузки памяти GPU от AMD (загрузку GPU, его температуру, скорость FAN и т.д. уже знаю, как программно определить и для AMD тоже: использую atiadlxx.dll . Есть похожая DLL или иной способ определения свободной/использованной памяти именно для AMD?
    Всех с наступающим Новым годом!!
  12. Like
    Равиль Зарипов (ZuBy) отреагировална Евгений Корепов в Подключение из приложения под Андроид к удаленной БД сайта MySQL в С++ Builder XE   
    PHP один из самых простых в освоении языков. Обычный интерпретатор, т.е. в большинстве случаев, выполняет код строчка за строчкой. Нет привычной отладки (хотя может и есть в каких то средах, но я программирую на php в редакторе FAR Manager), но вы всегда можете вывести значение переменной функциями echo($Переменная) , print_r($Массив) и он высыпет все вам на экран (или в консоль).
    Запускать скрипт php можно двумя способами
    Запуск в контексте веб-сервера: Вы обращаетесь к веб серверу по адресу http://www.мойсайт.ru/мой_скрипт.php - веб сервер запускает исполняемый файл php и скармливает ему ваш скрипт и параметы переданные в запросе (Get, post). Эти параметры можно получить из специальных массивов $_GET и $_POST. Запуск ручками: для отладки и всякого другого, вы можете запустить ваш скрипт в консоли (коммандной строке) под любой платформой (линукс, винда...):  " php /home/test001.php".  Просто попытайтесь освоить язык, он простой, нужно два часа чтоб освоить язык до уровня написания вышеприведенного мной скрипта.
    По теме - если у вас выводит [], то значит узнать что у вас не так:
    Выясните сколько строк возвращает запрос к sql серверу echo "Кол-во строк=".mysqli_num_rows($DBResult);
    Выводите построчно массивы c строками из запроса print_r($row); echo "<br/>\n"; 
    "<br/>\n" - это печатам для перевода на новую строку в браузере или консоли, чтоб не было каши.
    Ну и так далее... Любая непонятная функция, становится понятной вот так: в браузере, в адресной строке печатаем php mysqli_real_escape_string, и увидите хорошее описание с примерами на родном для вас языке
  13. Like
    Равиль Зарипов (ZuBy) отреагировална AliZairov в Native Android VideoView   
    Добрый вечер. Скоро будет полностью подготовлен.

  14. Like
    Равиль Зарипов (ZuBy) отреагировална Fedor K в Как отключить TLang на форме/компоненте?   
    Пожалуйста, внимательно посмотрите пример выше: cbbFiles: TComboBox;
    TComboBox содержит внутри себя TComboListBox с элементами списка, которые у вас автопереводятся. При помощи предоставленного выше примера автоперевод отключается. Если у Вас множество TComboBox, которым нужно запретить перевод, то можно воспользоваться таким способом:
    //Создаем helper для TComboBox type TComboBoxHelper = class helper for TComboBox public procedure SetAutoTranslate(AEnabled: Boolean = false); end; ... implementation ... { TComboBoxHelper } //Согласно примеру выше procedure TComboBoxHelper.SetAutoTranslate(AEnabled: Boolean); var i, count : integer; begin count := Self.Count - 1; for i := 0 to count do Self.ListBox.ListItems[i].AutoTranslate := AEnabled; end; ... //Пример использования helper в Вашем коде <Ваш TComboBox 1>.SetAutoTranslate; ... <Ваш TComboBox N>.SetAutoTranslate;  
  15. Like
    Равиль Зарипов (ZuBy) отреагировална kami в June FSM (FMX SPb Meeting)   
    небольшой фотоотчет. Будет время - напишу еще и результаты блиц-интервью участников.
    Начало встречи.

    потом было вот это

    ну и эпилог:

    на последнем фото, слева направо (без учета z-order): @kami @Error @Nik @Brovin Yaroslav
  16. Like
    Равиль Зарипов (ZuBy) отреагировална sinuke в Выделить TListViewItem нажатием правой кнопки мыши   
    FindItemByPosition - вот тут можно найти https://github.com/rzaripov1990/ModernListView. просто скопировать два файла FMX.ListView.pas и FMX.ListView.Types.pas в папку с проектом
    да и высоты всех итемов (и футеров и хидеров) тоже можно узнать. самое просто - циклом пройтись и прибавлять к некой переменной высоту текущего итема. как только эта сумма станет больше локальной координаты, то найден нужный итем
  17. Like
    Равиль Зарипов (ZuBy) отреагировална kami в June FSM (FMX SPb Meeting)   
    Господа!
    Место встречи определено: 500 метров от метро Александра Невского, пивной ресторан Bier König
    Дата: 10.06.2017. Время (пока - ориентировочно) 17:30.
    Возражения? Другие предложения?
     
    P.S. На всякий случай - адресная рассылка: @wamaco @Nik @Brovin Yaroslav @Error
  18. Like
    Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в Ошибка "Bitmap size too big"   
    Тормозит IDE:
     
  19. Like
    Равиль Зарипов (ZuBy) отреагировална Ghk в TRect ambiguity Чем победить ? РЕШЕНО!!!   
    В билдере порядком инклюдов( аналог uses в дельфях) нифига не решается. В _published явное указание типа не работает- ошибки выдает.

    Зато пока задал вопрос - догадался как написать костыль

    в public класса формы  пишем  определение  самопальной функции-обработчика   с полным указанием типов , как в  прототипе
    void __fastcall VKbShown(TObject *Sender, bool KeyboardVisible,  const System::Types::TRect &Bounds); Имя можно от балды - в данном случае
    VKbShown.
    Далее в основном файле формы   в этой функции пишем чего нада делать при появлении вирутальной клавиатуры

    void __fastcall TSomeForm::VKbShown(TObject *Sender, bool KeyboardVisible, const System::Types::TRect &Bounds)
    { //
     ShowMessage("Опаньки! Клавушка появилась !"');
    };

    ну и чтобы все это свистело и пердело как нада при появлении клавы
     В событии OnCreate   нашей формы навешиваем  эту функцию на обработчик
    TSomeForm->OnVirtualKeyboardShown=TSomeForm->VKbShown;
     
    Теперь все прекрасно работает и компилится  под андроидом

    Всем спасибо вопрос можно закрывать,
     буду дальше  покумекать свою программу.

     
  20. Like
    Равиль Зарипов (ZuBy) отреагировална Евгений Корепов в [Статья] PHP сервер для рассылки Push на Android и iOS   
    Это не проблема компонентов, это проблема малограмотности программистов kinvey, видимо они учебник SQL еще не дочитали до места "ON DUPLICATE KEY UPDATE". Беда современных проектов - все деньги тратятся на дизайнеров и менеджеров, а на то что остается на реализацию технической части, можно нанять только индусов или малограмотных оутсорсеров по объявлению.
  21. Like
    Равиль Зарипов (ZuBy) отреагировална kami в June FSM (FMX SPb Meeting)   
    Коллеги! Во флудильне в Телеграме Ярославом была озвучена великолепнейшая мысль - устроить сборище в начале июня в Питере.
    Возможные даты встречи (формат даты - dd.mm, всё - 2017 год): 03.06, 04.06, 10.06, 11.06. Предпочтительные даты выделены жирным.
    Прошу откликнуться, кто хочет и кто может присоединиться к встрече, уточнить предпочтительные для вас дату и время сбора.
    Место сбора по традиции выбирает Ярослав!
  22. Like
    Равиль Зарипов (ZuBy) отреагировална #WAMACO в Посоветуйте, сделать TGrid из TListView. Как добавить кнопку-колонку в ListView   
    Сделайте обычными SpeedButton над ListView.
    И управляйте по событиям как требуется...
    Дешево, удобно и практично будет!
  23. Like
    Равиль Зарипов (ZuBy) отреагировална Евгений Корепов в [Статья] PHP сервер для рассылки Push на Android и iOS   
    Можно и удалять. Но тогда не будут работать мои аналитические инструменты - частота запусков приложения, периоды активности и многое другое.
    У Равиля запрос добавления токена в базу вот такой:
    INSERT INTO PushTokens (`deviceToken`, `deviceID`, `platform`) VALUE ('$deviceToken', '$deviceID', '$platform') ON DUPLICATE KEY UPDATE `deviceToken` = '$deviceToken'"; У меня же он чуть сложнее:
    INSERT INTO gcm (`DeviceID`, `DeviceToken`, `City`, `last_update`, `add_date`, `RequestCount`, `Active`) VALUES ('$DeviceID','$DeviceToken','$City',NOW(),NOW(), 1, 1) ON DUPLICATE KEY UPDATE `DeviceToken` = '$DeviceToken', `City` = '$City', `last_update` = NOW(), `RequestCount` = `RequestCount` + 1, `Active` = 1 Таблица выглядит вот так
    CREATE TABLE `gcm` ( `id` int(11) NOT NULL AUTO_INCREMENT, `DeviceID` char(32) DEFAULT NULL, `DeviceToken` varchar(255) DEFAULT NULL, `City` varchar(100) DEFAULT NULL, `last_update` datetime DEFAULT NULL, `add_date` datetime DEFAULT NULL, `RequestCount` int(11) DEFAULT '1', `Active` bit(1) DEFAULT b'1', PRIMARY KEY (`id`), UNIQUE KEY `DeviceID_index` (`DeviceID`) USING BTREE ) ENGINE=MyISAM AUTO_INCREMENT=40337 DEFAULT CHARSET=utf8; Т.е. кроме всего прочего я вижу:
    Дату-время первого запуска приложения Дату-время последнего запуска приложения Количество запусков приложения Стоит ли еще приложение на этом устройстве (Active) На поле City не обращайте внимание...
  24. Like
    Равиль Зарипов (ZuBy) отреагировална Fedor K в [Андроид]запрет пушей   
    Ingalime этой настройкой нельзя управлять программно по политики безопасности системы. Из приложения программно можно лишь проверить эту галочку и предложить пользователю открыть эти настройки. Есть 2 решения:
    (самый простой способ) не отправлять уведомление с сервера. Т.к. у Вас устройства хранятся в таблице, то необходимо просто добавить туда новый столбец (например "PushEnabled") и изменить sql запрос, которым выбираете токены устройств с БД. PHP код в этом случае не затрагивается. (если править сервер невозможно или у вас нет доступа) запретить уведомления в BroadcastReceiver, который их обрабатывает и непосредственно создает уведомление в статус баре (приложение свернуто/закрыто) или передает обработку в код FMX (приложение открыто). 2-ой способ является не тривиальным, т.к. требуется изменить стандартную библиотеку FMX cloud-messaging.jar, либо написать свой собственный BroadcastReceiver и его использовать в проекте + придется использовать SharedPreferences, чтобы хранить флаг состояния уведомлений для BroadcastReceiver.
    Я рекомендую воспользоваться первым способом. Опишите логику "включения/отключения" пушей, по каким правилам и где изменяется эта настройка, чтобы легче было Вам помочь.
  25. Like
    Равиль Зарипов (ZuBy) отреагировална krapotkin в Опять про потоки и картинки   
    потому что мобильная связь это не провод с интернетом. дикие задержки и все время рвется
    протоколы обмена с сервером не предусматривают постоянных переподключений
    а вот HTTP специально разработан для такого режима
×
×
  • Создать...