-
Постов
1 204 -
Зарегистрирован
-
Посещение
-
Победитель дней
26
Активность репутации
-
Rusland отреагировална Mars M в Возможна работа с паролем в Tzipfile?
Тема старая, но вот тоже понадобилось работать с запаролеными zip архивами в Windows.
Наткнулся на это http://www.uweraabe.de/Blog/2017/05/07/tzipfile-with-password-encryption-part-3/
Там статья из трех частей. Если кратко то в третьей части можно скачать конечный результат модуля, во второй, в комментах есть пример работы.
Все в сборе приаттачил к сообщению
Проверил, вроде работает. Из минусов если добавлять в архив папку с файлами(ZipDirectoryContents) то файлы не паролятся, ну это не проблема.
ZipTest.rar
-
Rusland отреагировална TTTimon в invalid class type cast в TakePhotoFromLibraryAction
Привет, столкнулся с абсолютно такой же проблемой!
Вызывал action при нажатии на SpeedButton и проблема... выяснилось, что камере нужен был фокус на контроле (не знаю для чего)
Проблему решил так: заменил speedbutton на обычный button и все, надеюсь, тебе тоже поможет!
-
Rusland отреагировална sinuke в Сетка в TimageList - артефакты на картинках. Проголосуйте!
ну проект изначально и создавался в Токио. с апдейтом как дела обстоят - не знаю... надо заново всунуть картинки в проект и понаблюдать
-
Rusland получил реакцию от Alex7wrt в [TPath] Как составлять TPathData?
Если нужно нарисовать простую фигуру (треугольник, ромб, трапеция итп), то можно самому писать, строя отрезки.
Вот для примера треугольник:
Обратите внимание на направление оси Y.
Координаты точек:
A (0,0)
B (2,-2)
С (2,0)
Значит TPathData будет такой: M0,0 L2,-2 L2,0 L0,0
M - Move to
L - Line to
(в конце возвращаемся в исходную точку)
или можно так
M0,0 L2,-2 L2,0 Z
-
Rusland отреагировална ENERGY в [Статья] PHP сервер для рассылки Push на Android и iOS
Кто просил PHP код, для отправки пушей, без лимита на 1000 токенов за одну отправку.
Вот готовый вариант:
<?php $server_key = 'AAAAnCw-yKA:APA91bEYphFbq_w...'; $title = 'Title'; $text = 'test'; $limit = 999; $field_name = 'DeviceToken'; $sql = mysqli_connect("mysqlserver.com", "DBName", "DBPassword"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $offset = 0; while (true) { $query = "SELECT $field_name FROM `DBName`.`TableName` LIMIT $limit OFFSET $offset"; $result = mysqli_query($sql, $query); if (!$result) { die('Invalid query: ' . mysql_error()); } if (mysqli_num_rows($result) == 0) { echo "{\"result\":true}"; exit; } $arr = array(); while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) { $arr[] = $row["$field_name"]; } pushSend($title, $text, $arr, $server_key); $offset = $offset + $limit; /* free result set */ mysqli_free_result($result); // foreach($arr as $item) { // echo $item, '<br>'; //} //echo '-----------<br>'; } mysqli_close($sql); // max 1000 function pushSend($title, $text, $tokens, $server_key) { $url = 'https://fcm.googleapis.com/fcm/send'; $headers = array('Authorization: key=' . $server_key, 'Content-Type: application/json'); if (is_array($tokens)) $fields['registration_ids'] = $tokens; else $fields['registration_ids'] = array($tokens); $fields['priority'] = 'high'; $fields['notification'] = array('body' => $text, 'title' => $title); $fields['data'] = array('message' => $text, 'title' => $title); $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_URL => $url, CURLOPT_POST => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_POSTFIELDS => json_encode($fields) )); $result = curl_exec($ch); curl_close($ch); return $result; } ?>
-
Rusland отреагировална ENERGY в [Статья] PHP сервер для рассылки Push на Android и iOS
@Равиль Зарипов (ZuBy) по поводу вашей статьи:
В коде отправлять токен на базу нужно только в событии OnChange , которое срабатывает в момент вызова FPushServiceConnection.Active := true; Если вы отправляете на базу в OnChange, а затем еще и в TFormMain.PushServiceRegister; - то данные отправятся 2 раза. Device ID и Token конечно же будут одинаковые. Т.е. проще говоря после строки FPushServiceConnection.Active := true; не должно идти никакого кода. Я проверил в отладчике на 4 и 5 Android.
procedure TFormMain.PushServiceRegister;
begin FPushService := nil; FPushServiceConnection := nil; {$IF defined(ANDROID)} FPushService := TPushServiceManager.Instance.GetServiceByName< (TPushService.TServiceNames.GCM); FPushService.AppProps[TPushService.TAppPropNames.GCMAppID] := FAndroidServerKey; {$ENDIF} {$IF defined(IOS) AND defined(CPUARM)} FPushService := TPushServiceManager.Instance.GetServiceByName (TPushService.TServiceNames.APS); {$ENDIF} if Assigned(FPushService) then begin FPushServiceConnection := TPushServiceConnection.Create(FPushService); FPushServiceConnection.OnChange := OnServiceConnectionChange; FPushServiceConnection.OnReceiveNotification := OnReceiveNotificationEvent; FPushServiceConnection.Active := true; // ниже код нужно удалить, иначе токен отправится на базу дважды. FDeviceID := FPushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID]; FDeviceToken := FPushService.DeviceTokenValue [TPushService.TDeviceTokenNames.DeviceToken]; // тут отправляем в хранилище токенов (на сервер с БД например) end; end; -
Rusland отреагировална Anasazi в [Статья] PHP сервер для рассылки Push на Android и iOS
Можете скинуть куда-нибудь файл push.php с внесенными вами изменениями?
-
Rusland отреагировална Евгений Корепов в [Статья] PHP сервер для рассылки Push на Android и iOS
Отличная статья! Но добавлю один нюанс - функция 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); }
-
Rusland получил реакцию от M1shQa в Как получить информацию и параметры GPS
Работал когда-то. В то время на Seattle делал
-
Rusland отреагировална Alex7wrt в 9-Patch PNG FMX Generator
Сделал небольшую программу-генератор 9-patch заставок.
Достаточно выбрать цвет фона, логотип и его видимый размер, и программа сгенерирует 9-patch для всех необходимых в FMX размеров.
Примеры
Рисунок:
Полученные 9-Patch png:
Рисунок:
Полученные 9-Patch png:
Исходники: 9Patch Generator.zip
-
Rusland получил реакцию от M1shQa в Как получить информацию и параметры GPS
Какая версия Delphi?
PS. От Indy компонентов лучше отказаться
-
Rusland получил реакцию от Semitako в Запуск приложения от PUSH-уведомления
Slava Marchenko подсказал что при закрытом приложении получить сам текст можно так:
procedure TFormMain.FormActivate(Sender: TObject); var CurNotification : TPushServiceNotification; begin if Length(fPushService.StartupNotifications) > 0 then for CurNotification in fPushService.StartupNotifications do if Assigned(CurNotification) then Memo.Lines.Text := CurNotification.Json.ToJSON; end;
-
Rusland отреагировална sinuke в Учебное приложение "Слесарное дело"
Сделал версию для macOS: https://yadi.sk/d/wBpoFcKe3LgiKx
-
Rusland отреагировална sinuke в Игра в пятнашки - Fifteen Puzzle
Название: Fifteen Puzzle
Платформа: Android
Устройство: Смартфон, планшет
Разрешение экрана: любое
Google Play: https://play.google.com/store/apps/details?id=com.sinukeapps.fifteenpuzzle
Описание: Классическая игра в пятнашки, в которой нужно собраться костяшки по порядку от 1 до 15. В игре предлагаются только решаемые расклады. Имеется возможность делиться своими результатами с друзьями. Переведено на русский, английский, украинский, белорусский и татарский языки.
Скриншоты:
-
-
-
Rusland отреагировална sinuke в Как русифицировать MessageDialog?
тогда этот вариант не вариант ))
тогда можно воспользоваться наработками ZuBy FMX.NativeView
там есть возможность выводить окошки с собственным текстом кнопок. вот только найти не могу, где он это публиковал. вот такое можно выводить:
-
Rusland отреагировална sinuke в Учебное приложение "Слесарное дело"
Приложение опубликовано в Google Play - https://play.google.com/store/apps/details?id=com.sinukeapps.locksmithery
Описывать изменения с последней здесь записи не буду, но работа по "допиливанию" ведется ))
Буду рад оценкам.
-
Rusland отреагировална enatechno в [Android] Рисовать пальцем
У TMS есть готовое решение: TTMSFMXSignatureCapture
Вот еще видео можно глянуть:
Tutorial: Finger Writer with FireMonkey (Delphi DX10.1 Berlin) on Win10, OSX, iOS
Tutorial: Signatur Capture in Firemonkey XE5 (Delphi XE5) on Win, iOS and Android
-
Rusland отреагировална enatechno в Динамическое создание компонентов
procedure TForm1.FormCreate(Sender: TObject); var i: integer; aRectangle: TRectangle; aLabel: TLabel; aButton: TButton; begin VertScrollBox1.BeginUpdate; try for i := 1 to 30 do begin aRectangle := TRectangle.Create(VertScrollBox1); aRectangle.Parent := VertScrollBox1; aRectangle.Align := TAlignLayout.Top; aRectangle.Height := 60; aRectangle.Margins.Left := 10; aRectangle.Margins.Top := 15; aRectangle.Margins.Right := 15; aRectangle.TagString := 'Rectangle' + i.ToString; aLabel := TLabel.Create(VertScrollBox1); aLabel.Parent := aRectangle; aLabel.Align := TAlignLayout.Client; aLabel.Text := 'Label' + i.ToString; aLabel.Margins.Left := 10; aLabel.TagString := 'Label' + i.ToString; aButton := TButton.Create(VertScrollBox1); aButton.Parent := aRectangle; aButton.Align := TAlignLayout.Right; aButton.Text := 'Button' + i.ToString; aButton.TagString := 'Button' + i.ToString; aButton.Margins.Top := 5; aButton.Margins.Bottom := 5; aButton.Margins.Right := 10; end; finally VertScrollBox1.EndUpdate; end; end;
-
Rusland отреагировална enatechno в Вывод/отображение нескольких картинок на форме
Тогда стандартные стили Вам не подойдут. Создавайте свой стиль для ListBoxItem на базе стандартного или "с нуля". Тут описано как это можно сделать.
Вот подправил пример. Создал mylistboxitemstyle в котором только 2 элемента - text и image. Этот стиль загружен в StyleBook1 и указан в Listbox1.DefaultItemStyles.ItemStyle. Можете редактировать этот стиль прямо в StyleBook, добавляя новые элементы и располагая их как Вам нужно.
tstListbox1.rar
-
Rusland отреагировална enatechno в Вывод/отображение нескольких картинок на форме
Из стандартных иконку отображают: listboxitembottomdetail, listboxitemleftdetail, listboxitemnodetail, listboxitemrightdetail.
tstListbox1.zip
-
Rusland отреагировална #WAMACO в Пуши после публикации в Google Play
Не надо ничего удалять, мало ли кому нибудь пригодится...
-
Rusland отреагировална yooSee в Несколько пушей в одном уведомлении
Не знаю есть ли такое решение в намерениях но как альтернатива - копии в переменную количество созданных уведомлений , при появлении дубликата гаси ранее созданное и в заголовке нового уведомления выводи общее количество. В примерах где то видел подобное.
Если закрыто апк поднимай сервер
-
Rusland отреагировална Anatoliy в Телеграмм
Ошибка найдена.
Из манифеста пропала строка:
<service android:name="com.embarcadero.gcm.notifications.GCMIntentService" />
куда делась ума не приложу... делалось строго все по пунктам из статьи и эта строка была в начале разработки добавлена. Может С++ билдер ее как-то убил... Снова добавили собрали проект с новой версией - есть пуши и когда приложение выгружено. Сейчас все нормально.