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

Anasazi

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

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

  • Посещение

Сообщения, опубликованные Anasazi

  1. 44 минуты назад, 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;

     

    Спасибо, большое. Разобрался на вашем примере с алгоритмом создания компонентов,

  2. Доброго времени суток. Помогите пожалуйста разобраться с динамическим созданием компонентов.

    Хочу создать на 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?

  3. В 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 с внесенными вами изменениями?

  4. 22 часа назад, Ingalime сказал:

    Получилась программа по отсылке пушей при взаимодействии с сервером PHP ZuBy. Кто пользуется этим PHP сервером и кого есть время покритикуйте...

    Скачать: http://my-files.ru/uwtv19

    А если внутри скрипта есть проверка пароля? Добавь поля login и pass и будет нормально.

  5. Вот примерно так

    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);

  6. 1 минуту назад, krapotkin сказал:

    вместо TNetHttpClient вам нужен THttpClient

    хотите - храните в TStream, хотите - в TBitmap

    А как думаете, как лучше получить URL'ы? PHP пусть возвращает одной строкой и потом разбивать по разделителю?

  7. Всем доброго времени суток. Возникла необходимость решить такую задачу: в таблице базы 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;
      try

        idhttp.Get(url, ms);
        ms.Position := 0;
        image.LoadFromStream(ms);

      finally
        ms.Free;
        idhttp.Free;
      end;
    end;

  8. У  меня была такая хрень, правда делал все не по статье Zuby, а по статье Александра Бирюкова, она тут тоже где-то есть на форуме. Пуш отправлял через обычную строку браузера http://пример.ru/push.php?action=send-push&text=МЧС предупреждает: сильные ливни! 

    Заметил такую хрень, что фантомные пуши отправлялись в момент синхронизации chrome. Или когда заходил в свою учетку chrome и на другом компе и chrome начинал подтягивать журнал пароли и прочее.

  9. Доброго времени суток всем! Столкнулся с такой штукой: есть TVertScrollBox, на нем TGridPanelLayout, а у уже в ячейках TImage. Проблема в том что при скролинге срабатывает событие OnClick у компонентов TImage. Можно ли как то исключить срабатывание этого события при прокрутке? 

  10. 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);

  11. 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 в коде изменения незначительные и будет все нормально.

  12. Доброго времени суток! Есть приложение в котором используется TWebbrowser, хотел сделать чтобы при свайпе справа-налево выполнялся WebBrowser.GoBack, но обнаружил что жесты работают везде кроме TWebbrowser. Подскажите пожалуйста есть ли какое-либо решение этой проблемы? RAD Studio Berlin Update 1.

  13. В 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);

    Подскажите пожалуйста как поправить.

     

     

    GetHttp.png

  14. В 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;

     

    Спасибо большое!

  15. 1 час назад, krapotkin сказал:

    Пользуйтесь Try - Except

    try   THttpClient.Create.Get(URL); HasConnection := true; except  HasConnection := false; end;

    Ну и вместо компонента TNetHTTPClient я обычно пользуюсь классом THTTPClient в отдельном потоке

     

     

    Можете поподробнее про  HasConnection := true;

    Что это за переменная? Не могу информацию в гугле найти.

  16. Всем добрый день! Получаю координаты с помощью yandex api. Использую вот такой код:

        try
        ////Запрос на Яндекс для получения координат
         MainForm.NetHTTPClient1.Get
        ('https://geocode-maps.yandex.ru/1.x/?geocode='+
        'Кунгур'+
        ',+'
        +street+
        '+улица,+дом+'+
        house, Result);

        finally
        end;

     

    Код отрабатывает нормально, но если ну устройстве нет интернета, то приложение просто вылетает. Подскажите пожалуйста как поправить.

    Приложение для iOS.

×
×
  • Создать...