-
Постов
2 517 -
Зарегистрирован
-
Посещение
-
Победитель дней
264
Активность репутации
-
-
Равиль Зарипов (ZuBy) получил реакцию от AngryOwl в TPushClient - нашёл чудесную вещь
у меня есть заготовка, но не помню на чем остановился. надо будет посмотреть и выложить
-
Равиль Зарипов (ZuBy) отреагировална krapotkin в Размер Формы
еще TLayout для группировки компонентов
и на других платформах тоже всегда так делайте
-
Равиль Зарипов (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)
-
Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в Отправка PUSH сообщений через IdHTTP.Post
Уже давно замечены проблемы Indy с SSL на Android, вроде как, даже сама Idera рекомендовала (пруф не дам, т.к. не помню где видел это) использовать новые TNetHTTPClient и TNetHTTPRequest.
Попробуйте использовать эти компоненты, с SSL работать умеют и асинхронные запросы умеют (т.е. не придётся создавать отдельный поток, достаточно изменить свойство компонента), и ещё куча всего.
Основная справка с примерами тут: Using an HTTP Client
-
Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в Embarcadero Delphi - где искать apk после компиляции проекта?
Опять же, пользуйтесь поиском!
Ответ тут: Можно ли собрать APK без смартфона ?
Справка:
Deploying Your Unsigned Android Application Deploying Your Signed Android Application -
Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в Tokyo, артефакты при отрисовке на канве, Android
Рекомендую вернуться на Berlin Upd2.
Tokyo вышла очень бажная, особенно в плане мобильной разработки. Юзать текущую версию себе дороже выйдет. Нужно дождаться как минимум Upd1, но я думаю лучше сразу Upd2 ждать.
-
Равиль Зарипов (ZuBy) получил реакцию от #WAMACO в Как отправить фотографию в ВКонтакте?
вот был рабочий пример, который постил на стену ВК картинку (сейчас вроде чуть изменили апи, но должно работать)
https://github.com/rzaripov1990/FMX.RESTLight
-
Равиль Зарипов (ZuBy) получил реакцию от Anatoliy в TPushClient - нашёл чудесную вещь
у меня есть заготовка, но не помню на чем остановился. надо будет посмотреть и выложить
-
Равиль Зарипов (ZuBy) получил реакцию от M1shQa в Отправка данных по http в фоновом режиме
полезно к прочтению
-
Равиль Зарипов (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?
Всех с наступающим Новым годом!!
-
Равиль Зарипов (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, и увидите хорошее описание с примерами на родном для вас языке
-
Равиль Зарипов (ZuBy) отреагировална AliZairov в Native Android VideoView
Добрый вечер. Скоро будет полностью подготовлен.
-
Равиль Зарипов (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;
-
Равиль Зарипов (ZuBy) отреагировална kami в June FSM (FMX SPb Meeting)
небольшой фотоотчет. Будет время - напишу еще и результаты блиц-интервью участников.
Начало встречи.
потом было вот это
ну и эпилог:
на последнем фото, слева направо (без учета z-order): @kami @Error @Nik @Brovin Yaroslav
-
Равиль Зарипов (ZuBy) отреагировална sinuke в Выделить TListViewItem нажатием правой кнопки мыши
FindItemByPosition - вот тут можно найти https://github.com/rzaripov1990/ModernListView. просто скопировать два файла FMX.ListView.pas и FMX.ListView.Types.pas в папку с проектом
да и высоты всех итемов (и футеров и хидеров) тоже можно узнать. самое просто - циклом пройтись и прибавлять к некой переменной высоту текущего итема. как только эта сумма станет больше локальной координаты, то найден нужный итем
-
Равиль Зарипов (ZuBy) отреагировална kami в June FSM (FMX SPb Meeting)
Господа!
Место встречи определено: 500 метров от метро Александра Невского, пивной ресторан Bier König
Дата: 10.06.2017. Время (пока - ориентировочно) 17:30.
Возражения? Другие предложения?
P.S. На всякий случай - адресная рассылка: @wamaco @Nik @Brovin Yaroslav @Error
-
-
Равиль Зарипов (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;
Теперь все прекрасно работает и компилится под андроидом
Всем спасибо вопрос можно закрывать,
буду дальше покумекать свою программу.
-
Равиль Зарипов (ZuBy) отреагировална Евгений Корепов в [Статья] PHP сервер для рассылки Push на Android и iOS
Это не проблема компонентов, это проблема малограмотности программистов kinvey, видимо они учебник SQL еще не дочитали до места "ON DUPLICATE KEY UPDATE". Беда современных проектов - все деньги тратятся на дизайнеров и менеджеров, а на то что остается на реализацию технической части, можно нанять только индусов или малограмотных оутсорсеров по объявлению.
-
Равиль Зарипов (ZuBy) отреагировална kami в June FSM (FMX SPb Meeting)
Коллеги! Во флудильне в Телеграме Ярославом была озвучена великолепнейшая мысль - устроить сборище в начале июня в Питере.
Возможные даты встречи (формат даты - dd.mm, всё - 2017 год): 03.06, 04.06, 10.06, 11.06. Предпочтительные даты выделены жирным.
Прошу откликнуться, кто хочет и кто может присоединиться к встрече, уточнить предпочтительные для вас дату и время сбора.
Место сбора по традиции выбирает Ярослав!
-
Равиль Зарипов (ZuBy) отреагировална #WAMACO в Посоветуйте, сделать TGrid из TListView. Как добавить кнопку-колонку в ListView
Сделайте обычными SpeedButton над ListView.
И управляйте по событиям как требуется...
Дешево, удобно и практично будет!
-
Равиль Зарипов (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 не обращайте внимание...
-
Равиль Зарипов (ZuBy) отреагировална Fedor K в [Андроид]запрет пушей
Ingalime этой настройкой нельзя управлять программно по политики безопасности системы. Из приложения программно можно лишь проверить эту галочку и предложить пользователю открыть эти настройки. Есть 2 решения:
(самый простой способ) не отправлять уведомление с сервера. Т.к. у Вас устройства хранятся в таблице, то необходимо просто добавить туда новый столбец (например "PushEnabled") и изменить sql запрос, которым выбираете токены устройств с БД. PHP код в этом случае не затрагивается. (если править сервер невозможно или у вас нет доступа) запретить уведомления в BroadcastReceiver, который их обрабатывает и непосредственно создает уведомление в статус баре (приложение свернуто/закрыто) или передает обработку в код FMX (приложение открыто). 2-ой способ является не тривиальным, т.к. требуется изменить стандартную библиотеку FMX cloud-messaging.jar, либо написать свой собственный BroadcastReceiver и его использовать в проекте + придется использовать SharedPreferences, чтобы хранить флаг состояния уведомлений для BroadcastReceiver.
Я рекомендую воспользоваться первым способом. Опишите логику "включения/отключения" пушей, по каким правилам и где изменяется эта настройка, чтобы легче было Вам помочь.
-
Равиль Зарипов (ZuBy) отреагировална krapotkin в Опять про потоки и картинки
потому что мобильная связь это не провод с интернетом. дикие задержки и все время рвется
протоколы обмена с сервером не предусматривают постоянных переподключений
а вот HTTP специально разработан для такого режима