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

Евгений Корепов

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

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

  • Посещение

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

    100

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

  1. Like
    Евгений Корепов отреагировална Равиль Зарипов (ZuBy) в DeviceInfo - модуль для получения информации о девайсе   
    Обновленная версия, кое что подправил теперь нет ошибки на IOS 64 bit
    результат (Android, IPhone 4S, IPhone 6, MacOS Yosemite на виртуалке, Windows 10)

    Добавлена функция isGPSActive [ANDROID], определяет включен ли сенсор на устройстве
    DeviceInfo.zip
  2. Like
    Евгений Корепов отреагировална Равиль Зарипов (ZuBy) в DeviceInfo - модуль для получения информации о девайсе   
    DeviceInfo - модуль для получения информации о девайсе
    Android || Windows || IOS || MAC OS
      

    Intel планшет

    для Андроида нужно включить разрешения (permission)
    Ссылка на GitHub
  3. Like
    Евгений Корепов отреагировална rareMax в [TidTCPClient] В IdTCPClient возникает Max line length exceeded при чтении   
    Для начала - я бы попробовал обновить инди. Та версия, что поставляется с Делфи - немного отстает. Постоянно выходят багфиксы. Скачать последнюю версию можно с помошью SVN клиента(ваш любимый либо встроенный в ИДЕ): https://svn.atozed.com:444/svn/Indy10  Имя:  Indy-Public-RO пароль пустой оставь
  4. Like
    Евгений Корепов отреагировална Равиль Зарипов (ZuBy) в Клонирование TListView   
    я пользуюсь первым вариантом, создаю такого плана record и использую его для разных вариантов отрисовок
    TmyListViewDrawer = record procedure PaintBitmaps(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); // динамическая отрисовка картинок procedure PaintHorzBitmaps(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); // динамическая отрисовка картинок (горизонтально LV) procedure RestoranDrawer(const Sender: TObject; const AItem: TListViewItem); // отрисовка плиточки // настройка LV class procedure RestoranConfig(aLV: TListView); static; class procedure BludoConfig(aLV: TListView); static; class procedure MenuConfig(aLV: TListView); static; // ... class procedure RestoranAdd(aLV: TListView; const aTitle, aLocation, aURL: string; const aDistance, aRating: Real; const aMinPrice, aDeliveryPrice, aDeliveryTime: integer; const aSale: Boolean); static; // добавление Itema end; плюс в том что можно потом копировать в другие проекты, просто дополняя. а не сидеть и настраивать руками
  5. Like
    Евгений Корепов отреагировална Равиль Зарипов (ZuBy) в Исключить устройства с Intel Atom как не поддерживаемые   
    точно могу сказать только про HTTP/S, TCP, Location Sensor, Map, воспроизведение звука
    еще вспомнилось что с камерой был косяк, но детали не вспомню.
  6. Like
    Евгений Корепов отреагировална ElenaS. в Просмотрщик готовых отчетов FastReport FMX   
    После нескольких звонков в наш офис, мы узнали, что некоторые гос. структуры (соцстрах, пенсионный фонд) выдают пользователям документы в .fp3, и эти пользователи были озадачены: просматривать их было нечем. Такую несправедливость вынести мы не смогли и выпустили новый просмотрщик для готовых отчетов.
     
    FR Viewer может просматривать/печатать файлы .fp3. В этом формате работают сразу два наших продукта: FastReport VCL и FastReport FMX. Но если с VCL просмотрщик работал и до этого, то FMX до этого момента просматривать было нечем. Viewer автоматически определяет версию .fp3 между VCL/FMX и запускает соответствующий просмотр. 
     
    Доступен для платформ Windows и MacOS и абсолютно бесплатен. 
     
    Скачать можно тут: https://www.fast-report.com/en/download/fast-report-viewer/
  7. Like
    Евгений Корепов получил реакцию от privet20044 в [Android] Как убрать "Вставить" и подчеркивание при фокусе?   
    Быть такого не может. Отладкой проверяли? Может у вас срабатывает на if Assigned(FClipboardSvc) then и ничего не выполняется. 
     
    В главной форме не забудьте    FClipboardSvc: IFMXClipboardService;
     
    и потом:
    procedure TFormMain.FormCreate(Sender: TObject); begin   if not TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, IInterface(FClipboardSvc)) then     FClipboardSvc := nil; ...
  8. Like
    Евгений Корепов получил реакцию от privet20044 в [Android] Как убрать "Вставить" и подчеркивание при фокусе?   
    Избежать появления кнопки Вставить можно очисткой буфера обмена.
    Например так:
      procedure TFormMain.Edit1CanFocus(Sender: TObject; var ACanFocus: Boolean); begin   if Assigned(FClipboardSvc) then     FClipboardSvc.SetClipboard('');   ACanFocus:=True; end; Обратите внимание что именно пустая строка очищает буфер, попытка сделать FClipboardSvc.SetClipboard(Nil); поместит в буфер строку 'empty'.
  9. Like
    Евгений Корепов отреагировална AngryOwl в Поворот стрелки как на часах   
    вдогонку, кому интересно

    SampleCPUUsage.zip
  10. Like
    Евгений Корепов получил реакцию от Kitty в Действие при открытии через Push-cообщение [Android]   
    Как то так: procedure TFormMain.NotificationCenterReceiveLocalNotification(Sender: TObject;   ANotification: TNotification); begin   If ANotification.Name.Equals('Взгляни на третью вкладку') Then     TabControl.ActiveTab:=TabItem3;   NotificationCenter.CancelNotification(ANotification.Name); end;
  11. Like
    Евгений Корепов отреагировална Равиль Зарипов (ZuBy) в [Android] [6.0] Не удается загрузить SSL библиотеку   
    не думаю беда в этом, грешу на indy в RX10
    Сегодня попробую откомпилить на XE8 под 6ку
     
     
    UPDATE:
    XE8 приложение вылетает сразу, try except end не реагирует
    в модуле System.pas (RX 10) значительно переработан код
     
    Дебаг выдаёт, что загрузка этих библиотек происходит

     
     
  12. Like
    Евгений Корепов отреагировална avenger_msoft в [Windows] TnTRayIcon не визуальный компонент обеспечивающий управление значком в области System Tray   
    Переделаный компонет VCL TTrayIcon
     
    FMX.TrayIcon.Win.zip
  13. Like
    Евгений Корепов отреагировална ivadimos в [Android] Как очистить буфер обмена в С++ Builder XE7?   
    Тоже столкнулся с такой проблемой.
    Решил таким образом:
     
    var   а: IFMXClipBoardService; begin     if TPlatformServices.Current.SupportsPlatformService(IFMXClipBoardService, Service) then var   а: IFMXClipBoardService; begin   if TPlatformServices.Current.SupportsPlatformService(IFMXClipBoardService, Service) then     Service.SetClipboard('');  
  14. Like
    Евгений Корепов отреагировална sviat9440 в Виртуальная клавиатура   
    Выкладываю свой проект виртуальной клавиатуры на FMX.
    example_virtual_keyboard.zip
  15. Like
    Евгений Корепов получил реакцию от Равиль Зарипов (ZuBy) в Установка ScrollViewPos после добавления ListViewItem   
    Вы будете смеяться, но проблема решена. Методом научного тыка.
     
    Не работающая установка значения ListView.ScrollViewPos решается следующей строкой   ListView.ItemIndex:=0; (Не важно 0 или любое другое число).
    Т.е. для того чтоб заработало делаем так:
      ListView.ItemIndex:=0;   ListView.ScrollViewPos:=333; // Ура, работает!!! Почему так работает, я не понял.
  16. Like
    Евгений Корепов получил реакцию от Равиль Зарипов (ZuBy) в Как создать хелперы для массива?   
    Вот здесь посмотрите https://code.google.com/p/delphi-foundations/source/browse/trunk/Book/06.+Arrays,+collections+and+enumerators/Simple+search+%28TArray+class+helper%29/CCR.Generics.SimpleArraySearch.pas?r=29
  17. Like
    Евгений Корепов получил реакцию от rareMax в Как создать хелперы для массива?   
    Вот здесь посмотрите https://code.google.com/p/delphi-foundations/source/browse/trunk/Book/06.+Arrays,+collections+and+enumerators/Simple+search+%28TArray+class+helper%29/CCR.Generics.SimpleArraySearch.pas?r=29
  18. Like
    Евгений Корепов получил реакцию от AngryOwl в Получить размер файла   
    Ура! Я победил проблему. Причем с помощью почти забытой мной процедуры FindFirst ;-) Код работает корректно под Windows и Android. Файл не передергивается, антивирус спокоен.
    function TFileManager.GetFileSize(APath : String) : String; Var AFileSizeByte : Int64;     AFileSizeFloat : Double;     SearchRec : TSearchRec;     FileAttrs: Integer; begin   FileAttrs :=faArchive;   FileAttrs := FileAttrs + faAnyFile;   Result:='unknow';   AFileSizeByte:=0;   try     FindFirst(APath,FileAttrs,SearchRec);     AFileSizeByte:=SearchRec.Size;     FindClose(SearchRec);   except       Exit;   end;   if AFileSizeByte<1024 then   begin     Result:=Format('%d',[AFileSizeByte])+' Byte';     Exit;   end;   if AFileSizeByte<1048576 then   begin     AFileSizeFloat:=AFileSizeByte/1024;     Result:=Format('%6.3f',[AFileSizeFloat])+' KByte';     Exit;   end;   if AFileSizeByte<1073741824 then   begin     AFileSizeFloat:=AFileSizeByte/1048576;     Result:=Format('%6.3f',[AFileSizeFloat])+' MByte';     Exit;   end;   AFileSizeFloat:=AFileSizeByte/1073741824;   Result:=Format('%6.3f',[AFileSizeFloat])+' GByte'; end;
  19. Like
    Евгений Корепов получил реакцию от Vitaldj в Получить размер файла   
    Ура! Я победил проблему. Причем с помощью почти забытой мной процедуры FindFirst ;-) Код работает корректно под Windows и Android. Файл не передергивается, антивирус спокоен.
    function TFileManager.GetFileSize(APath : String) : String; Var AFileSizeByte : Int64;     AFileSizeFloat : Double;     SearchRec : TSearchRec;     FileAttrs: Integer; begin   FileAttrs :=faArchive;   FileAttrs := FileAttrs + faAnyFile;   Result:='unknow';   AFileSizeByte:=0;   try     FindFirst(APath,FileAttrs,SearchRec);     AFileSizeByte:=SearchRec.Size;     FindClose(SearchRec);   except       Exit;   end;   if AFileSizeByte<1024 then   begin     Result:=Format('%d',[AFileSizeByte])+' Byte';     Exit;   end;   if AFileSizeByte<1048576 then   begin     AFileSizeFloat:=AFileSizeByte/1024;     Result:=Format('%6.3f',[AFileSizeFloat])+' KByte';     Exit;   end;   if AFileSizeByte<1073741824 then   begin     AFileSizeFloat:=AFileSizeByte/1048576;     Result:=Format('%6.3f',[AFileSizeFloat])+' MByte';     Exit;   end;   AFileSizeFloat:=AFileSizeByte/1073741824;   Result:=Format('%6.3f',[AFileSizeFloat])+' GByte'; end;
  20. Like
    Евгений Корепов отреагировална Равиль Зарипов (ZuBy) в ListView Color Helper   
    Привет Всем!
    Много тем на форуме про раскраску TListView, нашел в интернете решение и доработал его
    Вот что получилось
       
    LV_Helper.zip                                                                  ColorListView.zip
    Доступно для Seattle
    ListView1.SetColorItemSelected(TAlphaColorRec.Orangered); //выделенный ListView1.SetColorItemFill(TAlphaColorRec.Gray); // обычный цвет Item ListView1.SetColorItemFillAlt(TAlphaColorRec.Lightgrey); // альтернативный цвет Item ListView1.SetColorBackground(TAlphaColorRec.Black); // цвет самого TListView ListView1.SetColorItemSeparator(TAlphaColorRec.Lightgray); // Линия разделения Item'ов ListView1.SetColorText(TAlphaColorRec.Red); // Обычный текст ListView1.SetColorTextSelected(TAlphaColorRec.White); // выделенный текст ListView1.SetColorTextDetail(TAlphaColorRec.Yellow); // текст доп. инфы ListView1.SetColorTextHeader(TAlphaColorRec.Green); // текст заголовка ListView1.SetColorTextHeaderShadow(TAlphaColorRec.Lightgray); // тень текста   ListView1.SetColorButtonText(TAlphaColorRec.Orange); // цвет текста кнопки   ListView1.SetColorButtonTextPressed(TAlphaColorRec.Orangered); // цвет нажатой кнопки добавлено в Berlin
    ListView1.SetColorPullRefresh(TAlphaColorRec.Orange); ListView1.SetColorPullRefreshIndicator(TAlphaColorRec.Orangered); ListView1.SetColorStretchGlow(TAlphaColorRec.Lime); ModernListView.rar
  21. Like
    Евгений Корепов отреагировална xenon54 в Смена родительского компонента для аниматора   
    procedure TForm2.MoveRect(Rect: TRectangle); begin TAnimator.AnimateIntWait(Rect, 'Position.Y', 0); TAnimator.AnimateInt(Rect, 'Position.Y', 152); end; Так вас не устроит?
  22. Like
    Евгений Корепов получил реакцию от rustam_d в Push сообщение для одного конкретного клиента   
    {     "registration_ids": [         "APA91bFwDgtPtlwgvbgVt7qpxqes0UIi...",         "APA91bFS3fknVDY6qifQiJ1KZDSjwZE..."     ],     "data": {         "title": "Заголовок сообщения",         "message": "Текст сообщения"     } }
  23. Like
    Евгений Корепов отреагировална Belov.V. в Отправка файлов через намерение   
    Goggle Drive в качестве имени ставит то, что указано в Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(aComment));
    Т.е. прописывайте в это поле имя файла без пути,
     
    Mail.ru не пробовал.
  24. Like
    Евгений Корепов получил реакцию от rakhmet в Сообщения чата в виде сообщений в iphone.   
    Для одного проекта писал такое пару месяцев назад, пользуйтесь.Под windows, при клике на сообщение, оно превращается в readonly TMemo - дабы можно было скопировать нужное из сообщения. При наличии URL в сообщении, сбоку появляется кнопка открыть - лучше ничего для открытия ссылок не придумал. Надо бы сделать диалог выбора для открытия одной из нескольких ссылок, но руки пока не доходят. Пощупать чат вживую можно в приложении https://play.google.com/store/apps/details?id=ru.flintnet.InternetAgent , для активации и загрузки примера чата отсканируйте  приложением qr-код с страницы  http://internetagent.flintnet.ru/
     

    unit ChatBox; interface uses   System.SysUtils, System.Classes, FMX.Types, FMX.Controls, FMX.Layouts,System.Types,   FMX.StdCtrls,FMX.Edit,FMX.Memo,FMX.TextLayout,System.UITypes,FMX.Graphics,FMX.Objects,   FMX.Effects,FMX.Styles.Objects; type   TMessagePos = (msgLeft,msgRight);   TEventText = procedure(PURL: String) of object;   TChatBox = class(TVertScrollBox)   private     FTextLyout : TTextLayout;     FLastMessageId : Integer;     FMsgWidthPercentage : Integer;     FOnURLButtonClick : TEventText;     FCalloutLength : Single;     FCalloutXRadius : Single;     FCalloutYRadius : Single;     FMessageFontSize : Single;     FMemo : TMemo;     procedure ButtonClick(Sender: TObject);     procedure MyMsgContainerOnClick(Sender: TObject);     procedure MyMsgContainerOnExit(Sender: TObject);     function FCreateMsgBlock(AOwner: TComponent; PMessageId : Integer;       PDate, PAutor, PMessage : String; PMessagePos : TMessagePos) : TLayout;     function CalculateTextItemHeight(Sender: TObject) : Single;     procedure LayoutResize(Sender: TObject);     function ExtractURL(pString : String) : String;     procedure Memo1ApplyStyleLookup(Sender: TObject);   public     property LastMessageId : Integer read FLastMessageId;     property MsgWidthPercentage : Integer read FMsgWidthPercentage write FMsgWidthPercentage default 80;     constructor Create(AOwner: TComponent); override;     destructor Destroy; override;     Procedure AddMessage(pMessageId : Integer; PDate, PAutor, PMessage : String; PMessagePos : TMessagePos);     procedure ClearChildren(AChatBox: TChatBox);     procedure ScrollBottomSmoothly;     procedure ScrollBottom;   published     property OnURLButtonClick : TEventText read FonURLButtonClick write FonURLButtonClick;     property CalloutLength : Single read FCalloutLength write FCalloutLength;     property CalloutXRadius : Single read FCalloutXRadius write FCalloutXRadius;     property CalloutYRadius : Single read FCalloutYRadius write FCalloutYRadius;     property MessageFontSize : Single read FMessageFontSize write FMessageFontSize;   end;   TOpenChatBox = class(TChatBox); Procedure Register; implementation procedure Register; begin   RegisterComponents('EKorepov', [TChatBox]); end; constructor TChatBox.Create(AOwner: TComponent); begin   inherited create(Aowner);   FLastMessageId:=-1;   FTextLyout := TTextLayoutManager.DefaultTextLayout.Create;   FMemo:=TMemo.Create(Aowner);   FMemo.TextSettings.WordWrap:=True;   FMemo.ReadOnly:=True;   FMemo.Align:=TAlignLayout.Client;   FMemo.OnExit:=MyMsgContainerOnExit;   FMemo.OnApplyStyleLookup:=Memo1ApplyStyleLookup;   FMemo.StyledSettings:=FMemo.StyledSettings-[TStyledSetting.Size];   With Self as TVertScrollBox do   begin     AniCalculations.Animation := True;     AniCalculations.BoundsAnimation := True;     AniCalculations.TouchTracking := [ttVertical];   end; end; destructor TChatBox.Destroy; begin   FreeAndNil(FMemo);   FreeAndNil(FTextLyout);   inherited Destroy; end; procedure TChatBox.ScrollBottomSmoothly; begin   AniCalculations.MouseWheel(0, ContentBounds.Height+5); end; procedure TChatBox.ScrollBottom; begin   ScrollBy(0, -ContentBounds.Height); end; procedure TChatBox.ButtonClick(Sender: TObject); Var URL : String; begin   URL:=TButton(Sender).HelpKeyword;   if Assigned(FonURLButtonClick) then     FonURLButtonClick(URL); end; procedure TChatBox.Memo1ApplyStyleLookup(Sender: TObject); begin end; procedure TChatBox.MyMsgContainerOnClick(Sender: TObject); begin   FMemo.TextSettings:=TLabel(Sender).TextSettings;   FMemo.Lines.Text:=TLabel(Sender).Text;   TLabel(Sender).AddObject(FMemo); end; procedure TChatBox.MyMsgContainerOnExit(Sender: TObject); begin   if (Sender is TMemo) then     if Assigned(TMemo(Sender).Parent) then       if (TMemo(Sender).Parent is TLabel) then         TLabel(TMemo(Sender).Parent).RemoveObject(TMemo(Sender)); end; procedure TChatBox.ClearChildren(AChatBox: TChatBox); begin   Assert(AChatBox <> nil);   TOpenChatBox(AChatBox).Content.DeleteChildren;   AChatBox.Repaint; end; function TChatBox.CalculateTextItemHeight(Sender: TObject) : Single; var Item: TLabel; begin   Result:=0;   if (Sender is TLabel) then   begin     Item := TLabel(Sender);     FTextLyout.BeginUpdate;     try       FTextLyout.Text := Item.Text;       FTextLyout.MaxSize := TPointF.Create(Item.Width-Item.Margins.Left-Item.Margins.Right-10, 1000);       FTextLyout.Font := Item.Font;       FTextLyout.WordWrap:= Item.WordWrap;       FTextLyout.HorizontalAlign:= Item.TextSettings.HorzAlign;       FTextLyout.VerticalAlign:= Item.TextSettings.VertAlign;     finally       FTextLyout.EndUpdate;     end;     Result:= FTextLyout.Height+10;   end; end; procedure TChatBox.LayoutResize(Sender: TObject); Var Item : TLabel;     CalloutRectangle : TCalloutRectangle;     Layout : TLayout;     I : Integer; begin   Layout:=TLayout(Sender);   for I := 0 to Layout.Children.Count-1 do   begin     If Layout.Children.Items[I] is TCalloutRectangle Then     begin       CalloutRectangle:=TCalloutRectangle(Layout.Children.Items[I]);       Item:=TLabel(CalloutRectangle.Children.Items[0]);       CalloutRectangle.Width:=(Layout.Width / 100) * FMsgWidthPercentage;       Layout.Height:=CalculateTextItemHeight(Item);     end;     If Layout.Children.Items[I] is TButton Then     begin       TButton(Layout.Children.Items[I]).Width:=(Layout.Width / 100) * (100-FMsgWidthPercentage-5);     end;   end; end; Procedure TChatBox.AddMessage(pMessageId : Integer; PDate, PAutor, PMessage : String; PMessagePos : TMessagePos); Var lcLayout : TLayout; begin   PDate:=Trim(PDate);   PAutor:=Trim(PAutor);   PMessage:=Trim(PMessage);   FLastMessageId:=PMessageId;   lcLayout:=FCreateMsgBlock((Self as TVertScrollBox), PMessageId, PDate, PAutor, PMessage, PMessagePos);   Self.AddObject(lcLayout); end; function TChatBox.FCreateMsgBlock(AOwner: TComponent; PMessageId : Integer; PDate, PAutor, PMessage : String;                                   PMessagePos : TMessagePos) : TLayout; Var lcLayout,lcLayout2 : TLayout;     Item : TLabel;     Button : TButton;     CalloutRectangle : TCalloutRectangle;     lcHeight : Single;     URL : String; begin   lcLayout:=TLayout.Create(AOwner);   lcLayout.Tag:=pMessageId;   lcLayout.Align:=TAlignLayout.Top;   lcLayout.Width:=200;   lcLayout.Position.X:=0;   lcLayout.Position.Y:= ((AOwner as TVertScrollBox).ContentBounds.Height+10);   lcLayout.Margins.Bottom:=10;   CalloutRectangle:=TCalloutRectangle.Create(lcLayout);   CalloutRectangle.XRadius:=FCalloutXRadius;   CalloutRectangle.YRadius:=FCalloutYRadius;   CalloutRectangle.CalloutWidth:=10;   CalloutRectangle.CalloutOffset:=-3-FCalloutYRadius-CalloutRectangle.CalloutWidth;   CalloutRectangle.Width:=((AOwner as TVertScrollBox).Width / 100) * FMsgWidthPercentage;   CalloutRectangle.HitTest:=False;   case PMessagePos of     msgRight :     begin       CalloutRectangle.Align:=TAlignLayout.Right;       CalloutRectangle.CalloutPosition:=TCalloutPosition.Right;       CalloutRectangle.Padding.Right:=CalloutRectangle.CalloutLength+CalloutRectangle.XRadius;       CalloutRectangle.Padding.Left:=CalloutRectangle.XRadius;     end;     msgLeft :     begin       CalloutRectangle.Align:=TAlignLayout.Left;       CalloutRectangle.CalloutPosition:=TCalloutPosition.Left;       CalloutRectangle.Padding.Left:=CalloutRectangle.CalloutLength+CalloutRectangle.XRadius;       CalloutRectangle.Padding.Right:=CalloutRectangle.XRadius;     end;   end;   CalloutRectangle.Padding.Top:=1;   CalloutRectangle.Padding.Bottom:=1;   lcLayout.AddObject(CalloutRectangle);   Item:=TLabel.Create(CalloutRectangle);   Item.TextSettings.Font.Size:=MessageFontSize;   CalloutRectangle.AddObject(Item);   Item.Align:=TAlignLayout.Client; {$IFDEF MSWINDOWS}   Item.OnClick:=MyMsgContainerOnClick; {$ENDIF MSWINDOWS}   Item.Text:=PDate+' '+PAutor+#10+PMessage;   Item.HitTest:=True;   Item.WordWrap:=True;   lcHeight:=CalculateTextItemHeight(Item);   lcLayout.Height:=lcHeight;   URL:=ExtractURL(pMessage);   Item.StyledSettings:=Item.StyledSettings- [TStyledSetting.Size,TStyledSetting.Style];   if Not URL.IsEmpty then   begin     lcLayout2:=TLayout.Create(lcLayout);     lcLayout2.Align:=TAlignLayout.Client;     lcLayout2.Margins.Left:=5;     lcLayout2.Margins.Right:=5;     lcLayout.AddObject(lcLayout2);     Button:=TButton.Create(lcLayout2);     Button.Text:='Открыть';     Button.Align:=TAlignLayout.Center;     Button.HelpKeyword:=URL;     Button.OnClick:=ButtonClick;     lcLayout2.AddObject(Button);   end;   lcLayout.OnResize:=LayoutResize;   Result:=lcLayout; end; function TChatBox.ExtractURL(pString : String) : String; Var S : String; begin   Result:='';   if Not pString.Contains('http') then     Exit;   S:=pString.Substring(Pos('http',pString)-1);   S:=S.Remove(S.IndexOfAny([' ',',']));   Result:=S.TrimRight(['.']); end; end.
  25. Like
    Евгений Корепов отреагировална alexbirukov в [Статья] PHP сервер для рассылки Push на Android и iOS   
    Ссылка на статью. Автор: Александр Бирюков В статья я максимально подробно попытался описать работу с PHP скриптом для рассылки Push сообщений из любой программы вне зависимости от платформы. Затрагивается вопроса от экспорта скриптов до кода программы: отправка и получение Push, регистрация устройств.
     
    Надеюсь кому-нибудь пригодится. Буду рад комментариям, обоснованной критике и доработкам.
     
×
×
  • Создать...