-
Постов
65 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Anasazi
-
-
Доброго времени суток. Помогите пожалуйста разобраться с динамическим созданием компонентов.
Хочу создать на vertscrollbox несколько rectangle, На каждом из rectangle создать хочу попробовать создать tbutton и tlabel.
Пока смог только создать несколько TRectangle. Получился вот такой:
procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin for i :=1 to 30 do with TRectangle.Create(VertScrollBox1) do Parent:=VertScrollBox1 end; procedure TForm1.FormResize(Sender: TObject); var i: integer; begin for i :=0 to Box1.ComponentCount-1 do begin if box1.Components is TRectangle then with TRectangle(box1.Components) do begin Align := TAlignLayout.Top; Margins.Left:=10; Margins.Top:=15; Margins.Right:=15; end; end;
Подскажите пожалуйста как на каждом из созданных TRectangle создать Tbutton и Tlabel?
-
В 11.04.2017 в 12:09, Евгений Корепов сказал:
Отличная статья! Но добавлю один нюанс - функция
function
pushSend(
$title
,
$text
,
$tokens
,
$server_key
) реализована не до конца, дело в том что у FCM есть одно ограничение - отправка не больше 1000 токенов за раз. Сам на это напоролся и не мог понять почему части пользователей рассылки не приходят (рассылка велась по регионам России, общее количество около 100 тысяч).
Пришлось накидать промежуточную функцию для разбивки на пакеты по 1000 штук:
function SendGCMMessagesPacket($apiKey, $DevicesTokenArray, $message, $title, $DBLink, $TableName, $MyLog_GCM_file) { if (count($DevicesTokenArray)==0) { MyLog($MyLog_GCM_file, "Token Array is 0, skip sending"); return(0); } $Count_Success = 0; $DeviceCountMax = 1000; $DeviceCountIndex = 0; $DevicesTokenPacketArray = array(); $gcpm = new GCMPushMessage($apiKey); while ($DeviceCountIndex<=count($DevicesTokenArray)) { $DevicesTokenPacketArray = array_slice($DevicesTokenArray, $DeviceCountIndex, $DeviceCountMax); MyLog($MyLog_GCM_file, "Packet send: start index $DeviceCountIndex, count ".count($DevicesTokenPacketArray)); $gcpm->setDevices($DevicesTokenPacketArray); $ResponceJSON = $gcpm->send($message, array('title' => $title)); $Count_Success = $Count_Success + AnalyzeResponse($DevicesTokenPacketArray, $ResponceJSON, $DBLink, $TableName, $MyLog_GCM_file); MyLog($MyLog_GCM_file, $ResponceJSON); $DeviceCountIndex = $DeviceCountIndex + $DeviceCountMax; } return($Count_Success); }
Функция AnalyzeResponse анализирует ответ и помечает в базе не зарегистрированные токены как неактивные
function AnalyzeResponse($DevicesTokenArray, $ResponceJSON, $DBLink, $TableName, $MyLog_GCM_file) { $Count_Success = 0; $ResponceArray = json_decode($ResponceJSON, true); if (isset($ResponceArray['results'])) { $Index = 0; foreach ($ResponceArray['results'] as $key => $value){ if (isset($value['error'])) { if (isset($DevicesTokenArray[$Index])) { MyLog($MyLog_GCM_file, $DevicesTokenArray[$Index].' : '.$value['error']); $query = "UPDATE $TableName SET Active = 0 WHERE DeviceToken = '$DevicesTokenArray[$Index]'"; $mysql_result = mysqli_query($DBLink, $query); } } else { $Count_Success = $Count_Success + 1; } $Index = $Index + 1; } } return($Count_Success); }
Можете скинуть куда-нибудь файл push.php с внесенными вами изменениями?
-
22 часа назад, Ingalime сказал:
Получилась программа по отсылке пушей при взаимодействии с сервером PHP ZuBy. Кто пользуется этим PHP сервером и кого есть время покритикуйте...
Скачать: http://my-files.ru/uwtv19
А если внутри скрипта есть проверка пароля? Добавь поля login и pass и будет нормально.
-
Вот примерно так
PostData:= TStringList.Create;
try
// Создаём подключение
IdHTTP1 := TIdHTTP.Create;
// Указываем данные для отправки
PostData.Clear;postdata.Add('text_push=' + Memo1.Text);
postdata.Add('action=send_push');// Отправляем запрос
Result:=IdHTTP1.Post(DOMAIN + 'push.php', postdata);
finally
end;Потом можешь куда-нибудь отобразить результат. showmessage(result);
-
-
1 минуту назад, krapotkin сказал:
вместо TNetHttpClient вам нужен THttpClient
хотите - храните в TStream, хотите - в TBitmap
А как думаете, как лучше получить URL'ы? PHP пусть возвращает одной строкой и потом разбивать по разделителю?
-
Всем доброго времени суток. Возникла необходимость решить такую задачу: в таблице базы MySQL хранится список изображений и их URL. Необходимо получить этот список массивом. Затем загрузить изображения и поочередно с интервалом показать их в TImage.
Понимаю, что получить список изображений правильнее при помощи PHP скрипта, но в каком виде скрип должен вернуть данные, чтобы в Delphi получить из них массив не знаю.
Раньше для получения изображений использовал такую процедуру. Но вопрос, где хранить изображения перед демонстрацией их в TImage? Создавать несколько MemoryStream?
procedure LoadWebImage(url: string; image: TBitmap);
var
idhttp : TNetHTTPClient;
ms : TMemoryStream;
begin
IdHTTP := TNetHTTPClient.Create(nil);
ms := TMemoryStream.Create;
tryidhttp.Get(url, ms);
ms.Position := 0;
image.LoadFromStream(ms);finally
ms.Free;
idhttp.Free;
end;
end; -
У меня была такая хрень, правда делал все не по статье Zuby, а по статье Александра Бирюкова, она тут тоже где-то есть на форуме. Пуш отправлял через обычную строку браузера http://пример.ru/push.php?action=send-push&text=МЧС предупреждает: сильные ливни!
Заметил такую хрень, что фантомные пуши отправлялись в момент синхронизации chrome. Или когда заходил в свою учетку chrome и на другом компе и chrome начинал подтягивать журнал пароли и прочее.
-
40 минут назад, krapotkin сказал:
hittest := false ?
Нашел тему:
Заменил OnClick на OnTap и все стало работать корректно.
-
15 минут назад, krapotkin сказал:
hittest := false ?
Установил у всех TImage hittest := false, но теперь скролинг совсем не работает.
-
Доброго времени суток всем! Столкнулся с такой штукой: есть TVertScrollBox, на нем TGridPanelLayout, а у уже в ячейках TImage. Проблема в том что при скролинге срабатывает событие OnClick у компонентов TImage. Можно ли как то исключить срабатывание этого события при прокрутке?
-
42 минуты назад, Ufomaster сказал:
Берлин, Токио
И версию ОС
-
1 час назад, Ingalime сказал:
Здравствуйте.
Хотелось бы получить статью где толково было бы описано: "PHP сервер для рассылки Push на Android и iOS".
На форуме есть ряд статей, но они бесполезны...
Эта статья судя по обсуждению устарела:
http://fire-monkey.ru/topic/1809-статья-php-сервер-для-рассылки-push-на-android-и-ios/
Есть проблема в этой статье об использования TIdHTTP и кол-ва пользователей.
Хотя эта статья самая подробная - есть SQL код создания таблиц, есть файл конфигурации - все понятно... Лучшая статья на сайте!
2. Есть статья для продвинутых пользователей:
http://blog.rzaripov.kz/2017/02/firebase-android-ios-2.html
Тут для рядовых пользователей мало полезного. Нет возможности скачать готовый PHP сервер и т.д....
Можно ли дать материал на сайте, который бы объединял бы две статьи, был подробным и понятным и имел бы материал для скачивания - готовый PHP сервер и код на дельфи для приложения...
Я вроде бы только одну строку заменил в global.pas
// Отправляем запрос
Mainform.NetHTTPClient1.Post(DOMAIN + 'push.php', postdata); -
1 час назад, Ingalime сказал:
Здравствуйте.
Хотелось бы получить статью где толково было бы описано: "PHP сервер для рассылки Push на Android и iOS".
На форуме есть ряд статей, но они бесполезны...
Эта статья судя по обсуждению устарела:
http://fire-monkey.ru/topic/1809-статья-php-сервер-для-рассылки-push-на-android-и-ios/
Есть проблема в этой статье об использования TIdHTTP и кол-ва пользователей.
Хотя эта статья самая подробная - есть SQL код создания таблиц, есть файл конфигурации - все понятно... Лучшая статья на сайте!
2. Есть статья для продвинутых пользователей:
http://blog.rzaripov.kz/2017/02/firebase-android-ios-2.html
Тут для рядовых пользователей мало полезного. Нет возможности скачать готовый PHP сервер и т.д....
Можно ли дать материал на сайте, который бы объединял бы две статьи, был подробным и понятным и имел бы материал для скачивания - готовый PHP сервер и код на дельфи для приложения...
Замени idHTTP на NetHTTPClient в коде изменения незначительные и будет все нормально.
-
Доброго времени суток! Есть приложение в котором используется TWebbrowser, хотел сделать чтобы при свайпе справа-налево выполнялся WebBrowser.GoBack, но обнаружил что жесты работают везде кроме TWebbrowser. Подскажите пожалуйста есть ли какое-либо решение этой проблемы? RAD Studio Berlin Update 1.
-
11 часов назад, Равиль Зарипов (ZuBy) сказал:
@Anasazi исправил код, проверьте его. там всего один параметр - принимает ссылку
Все получилось, спасибо большое!
-
8 часов назад, krapotkin сказал:
нажать ОК
кликнуть два раза в строку где написано DCC Error и посмотреть, что за строка такая с ошибкой
Говорит что вот эта строка:
function HTTPGet(const aURL: string; const aEncoding: TEncoding = TEncoding.UTF8): string;
-
Не компилируется, даже если не вызывать функцию.
-
В 22.03.2017 в 14:20, Равиль Зарипов (ZuBy) сказал:
проверка интернета
function CheckInet: boolean; var aResp: IHTTPResponse; aHTTP: THTTPClient; begin Result := false; aHTTP := THTTPClient.Create; try try aResp := aHTTP.Head('http://google.com'); Result := aResp.StatusCode < 400; except Result := false; end; finally FreeAndNil(aHTTP); end; end;
get запрос
function HTTPGet(const aURL: string): string; var aHTTP: THTTPClient; aResp: TStringStream; begin Result := 'Error'; aResp := TStringStream.Create('', TEncoding.UTF8); aHTTP := THTTPClient.Create; try try aHTTP.Get(aURL, aResp); Result := aResp.DataString; except Result := 'Error'; end; finally FreeAndNil(aHTTP); FreeAndNil(aResp); end; end;
C CheckInet все получилось, спасибо большое. А вот с HTTPGet не получается, при компиляции вываливается ошибка. HTTPGet вызываю так:
xml_result:=HTTPGet('https://geocode-maps.yandex.ru/1.x/?geocode='+ 'Кунгур'+ ',+' +street+ '+улица,+дом+'+ house, Result);
Подскажите пожалуйста как поправить.
-
В 22.03.2017 в 14:20, Равиль Зарипов (ZuBy) сказал:
проверка интернета
function CheckInet: boolean; var aResp: IHTTPResponse; aHTTP: THTTPClient; begin Result := false; aHTTP := THTTPClient.Create; try try aResp := aHTTP.Head('http://google.com'); Result := aResp.StatusCode < 400; except Result := false; end; finally FreeAndNil(aHTTP); end; end;
get запрос
function HTTPGet(const aURL: string): string; var aHTTP: THTTPClient; aResp: TStringStream; begin Result := 'Error'; aResp := TStringStream.Create('', TEncoding.UTF8); aHTTP := THTTPClient.Create; try try aHTTP.Get(aURL, aResp); Result := aResp.DataString; except Result := 'Error'; end; finally FreeAndNil(aHTTP); FreeAndNil(aResp); end; end;
Спасибо большое!
-
1 час назад, krapotkin сказал:
Пользуйтесь Try - Except
try THttpClient.Create.Get(URL); HasConnection := true; except HasConnection := false; end;
Ну и вместо компонента TNetHTTPClient я обычно пользуюсь классом THTTPClient в отдельном потоке
Можете поподробнее про HasConnection := true;
Что это за переменная? Не могу информацию в гугле найти.
-
Всем добрый день! Получаю координаты с помощью yandex api. Использую вот такой код:
try
////Запрос на Яндекс для получения координат
MainForm.NetHTTPClient1.Get
('https://geocode-maps.yandex.ru/1.x/?geocode='+
'Кунгур'+
',+'
+street+
'+улица,+дом+'+
house, Result);finally
end;Код отрабатывает нормально, но если ну устройстве нет интернета, то приложение просто вылетает. Подскажите пожалуйста как поправить.
Приложение для iOS.
-
-
Динамическое создание компонентов
в Прочие вопросы
Опубликовано
Спасибо, большое. Разобрался на вашем примере с алгоритмом создания компонентов,