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

Rusland

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

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

  • Посещение

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

    26

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

  1. Like
    Rusland отреагировална Mars M в Возможна работа с паролем в Tzipfile?   
    Тема старая, но вот тоже понадобилось работать с запаролеными zip архивами в Windows.
    Наткнулся на это http://www.uweraabe.de/Blog/2017/05/07/tzipfile-with-password-encryption-part-3/
    Там статья из трех частей. Если кратко то в третьей части можно скачать конечный результат модуля, во второй, в комментах есть пример работы.
    Все в сборе приаттачил к сообщению
    Проверил, вроде работает. Из минусов если добавлять в архив папку с файлами(ZipDirectoryContents) то файлы не паролятся, ну это не проблема.
     
    ZipTest.rar
  2. Like
    Rusland отреагировална TTTimon в invalid class type cast в TakePhotoFromLibraryAction   
    Привет, столкнулся с абсолютно такой же проблемой!
    Вызывал action при нажатии на SpeedButton и проблема... выяснилось, что камере нужен был фокус на контроле (не знаю для чего)
    Проблему решил так: заменил speedbutton на обычный button и все, надеюсь, тебе тоже поможет!
  3. Like
    Rusland отреагировална sinuke в Сетка в TimageList - артефакты на картинках. Проголосуйте!   
    ну проект изначально и создавался в Токио. с апдейтом как дела обстоят - не знаю... надо заново всунуть картинки в проект и понаблюдать
  4. Like
    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 
  5. Like
    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; } ?>  
  6. Like
    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;
  7. Like
    Rusland отреагировална Anasazi в [Статья] PHP сервер для рассылки Push на Android и iOS   
    Можете скинуть куда-нибудь файл push.php с внесенными вами изменениями?
  8. Like
    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); }  
  9. Like
    Rusland получил реакцию от M1shQa в Как получить информацию и параметры GPS   
    Работал когда-то. В то время на Seattle делал
  10. Like
    Rusland отреагировална Alex7wrt в 9-Patch PNG FMX Generator   
    Сделал небольшую программу-генератор 9-patch заставок. 
    Достаточно выбрать цвет фона, логотип и его видимый размер, и программа сгенерирует 9-patch для всех необходимых  в FMX размеров.

    Примеры
    Рисунок:

    Полученные 9-Patch png:

    Рисунок:

    Полученные 9-Patch png:

     
    Исходники: 9Patch Generator.zip
     
  11. Like
    Rusland получил реакцию от M1shQa в Как получить информацию и параметры GPS   
    Какая версия Delphi?
    PS. От Indy компонентов лучше отказаться
  12. Like
    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;  
  13. Like
    Rusland отреагировална sinuke в Учебное приложение "Слесарное дело"   
    Сделал версию для macOS: https://yadi.sk/d/wBpoFcKe3LgiKx

  14. Like
    Rusland отреагировална sinuke в Игра в пятнашки - Fifteen Puzzle   
    Название: Fifteen Puzzle
    Платформа: Android
    Устройство: Смартфон, планшет
    Разрешение экрана: любое
    Google Play: https://play.google.com/store/apps/details?id=com.sinukeapps.fifteenpuzzle
    Описание: Классическая игра в пятнашки, в которой нужно собраться костяшки по порядку от 1 до 15. В игре предлагаются только решаемые расклады. Имеется возможность делиться своими результатами с друзьями. Переведено на русский, английский, украинский, белорусский и татарский языки.
    Скриншоты:
     
  15. Like
    Rusland отреагировална ENERGY в Apple PAy   
    Пожалуйста держите нас в курсе, это важная тема на Delphi сообщества.
  16. Like
    Rusland отреагировална enatechno в Как русифицировать MessageDialog?   
  17. Like
    Rusland отреагировална sinuke в Как русифицировать MessageDialog?   
    тогда этот вариант не вариант ))
    тогда можно воспользоваться наработками ZuBy FMX.NativeView
    там есть возможность выводить окошки с собственным текстом кнопок. вот только найти не могу, где он это публиковал. вот такое можно выводить:

  18. Like
    Rusland отреагировална sinuke в Учебное приложение "Слесарное дело"   
    Приложение опубликовано в Google Play - https://play.google.com/store/apps/details?id=com.sinukeapps.locksmithery
    Описывать изменения с последней здесь записи не буду, но работа по "допиливанию" ведется ))
    Буду рад оценкам.
  19. Like
    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
  20. Like
    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;  
  21. Like
    Rusland отреагировална enatechno в Вывод/отображение нескольких картинок на форме   
    Тогда стандартные стили Вам не подойдут. Создавайте свой стиль для ListBoxItem на базе стандартного или "с нуля". Тут описано как это можно сделать.

    Вот подправил пример. Создал mylistboxitemstyle в котором только 2 элемента - text и image. Этот стиль загружен в StyleBook1 и указан в Listbox1.DefaultItemStyles.ItemStyle. Можете редактировать этот стиль прямо в StyleBook, добавляя новые элементы и располагая их как Вам нужно.

     
    tstListbox1.rar
  22. Like
    Rusland отреагировална enatechno в Вывод/отображение нескольких картинок на форме   
    Из стандартных иконку отображают: listboxitembottomdetail, listboxitemleftdetail, listboxitemnodetail, listboxitemrightdetail.
     
    tstListbox1.zip
  23. Like
    Rusland отреагировална #WAMACO в Пуши после публикации в Google Play   
    Не надо ничего удалять, мало ли кому нибудь пригодится...
  24. Like
    Rusland отреагировална yooSee в Несколько пушей в одном уведомлении   
    Не знаю есть ли такое решение в намерениях но как альтернатива - копии в переменную количество созданных уведомлений , при появлении дубликата гаси ранее созданное и в заголовке нового уведомления выводи общее количество. В примерах где то видел подобное.
    Если закрыто апк поднимай сервер 
  25. Like
    Rusland отреагировална Anatoliy в Телеграмм   
    Ошибка найдена.
    Из манифеста пропала строка:
    <service android:name="com.embarcadero.gcm.notifications.GCMIntentService" />
    куда делась ума не приложу... делалось строго все по пунктам из статьи и эта строка была в начале разработки добавлена. Может С++ билдер ее как-то убил... Снова добавили собрали проект с новой версией - есть пуши и когда приложение выгружено. Сейчас все нормально.
×
×
  • Создать...