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

Martifan

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

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

  • Посещение

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

    16

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

  1. Like
    Martifan отреагировална XXXXXX в Listbox как в сообщениях на андроиде   
    Если кому-нибудь понадобится Listbox такой-же как и в списке сообщений в андроиде. 
     
                               
     
    ListboxInteractions.zip
  2. Like
    Martifan отреагировална XXXXXX в Алфавитный скроллинг для ListView   
    Насколько я понял нужна такая штука
     

    В "LBMouseUP" скрольте до того места, куда вам надо попасть
    ListBoxAtoZ.zip
  3. Like
    Martifan отреагировална Brovin Yaroslav в [RX] [FGX] Описание версии 0.7.1.74   
    Ссылка на скачивание (Только для RAD Studio RX): fgx_0.7.1.74.zip Инструкция по установке: "Инструкция по установке набора компонентов FGX" FGX - Donate - QIWI: 4890 4941 7671 0929 Описание
    Эта версия включает в себя следующий набор компонентов:
    Дизайнер итемов - дизайнер итемов. TfgToast (UPDATED) - класс отображения быстрых сообщений TfgFlipView - слайдер изображений. Поддерживает несколько способов переключения фотографий при помощи эффектов и сдвигов. При первом использовании ОБЯЗАТЕЛЬНО прочитать инструкцию "TfgFlipView - Инструкция загрузки стиля" TfgPositionAnimation - анимация свойств типа TPosition TfgPosition3DAnimation - анимация свойств типа TPosition3D  TfgBitmapLinkAnimation - анимация свойств типа TBitmapLink  TfgProgressDialog - Компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения фоновой операции можно оценить. TfgActivityDialog - компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения операции не возможно адекватно оценить. TfgActionSheet - Аналог контекстного меню для мобильных платформ. TfgColorsPanel - Палитра цветов с возможностью выбора цвета. TfgGradientEdit - Компонент выбора градиента. TfgLinkedLabel  - Метка поддерживающая открытие Web ссылки в браузере по умолчанию. TfgApplicationEvents - компонент с возможностью легко задать обработчики на основные события приложения: Отслеживание смены состояния приложения, простой, обновление и выполнение действий Actions, Изменение ориентации устройства и тд. TfgVirtualKeyboard - компонент облегчающий работу с виртуальной клавиатурой. Позволяет задать пользовательские кнопки над виртуальной клавиатурой под iOS, а так же отлавливать события по отображению и скрытию клавиатуры. Зарегистрированы все стилевые объекты на вкладке "FGX: Style objects" Список изменений
    TfgToast: Добавлена реализация для iOS платформы. С эмулирована очередь тостов. Другими словами, при быстрой отправки несколько тостов, они будут показываться последовательно согласно заданным интервалом отображения тоста.  Добавлены глобальные настройки, позволяющие настроить внешний вид всех тостов в рамках приложения: TfgToast.DefaultBackgroundColor, TfgToast.DefaultMessageColor и TfgToast.DefaultPadding Исправлена ошибка, которая не меняла цвет текста тоста, если тост без картинки. Обновлен пример ToastsDemo
  4. Like
    Martifan отреагировална Brovin Yaroslav в Моё месторасположения на карте   
    Там вроде есть опция у компонента: 
    TMapView.ControlOptions.MyLocation
  5. Like
    Martifan отреагировална Равиль Зарипов (ZuBy) в ListBox, Edit и клавиатура   
    Пользуюсь еще вот таким модулем
     
    просто подключаем в uses и используем для Андроид
     
    vkbdhelper.zip
  6. Like
    Martifan отреагировална Brovin Yaroslav в Rad Studio   
    Запускаете проект с отладкой. Когда среда поменяет свой вид на Debug, перетаскиваете среду на требуемый монитор. Сохраняете выбранное расположение, путем нажатия на кнопку Save current desktop .png]
  7. Like
    Martifan отреагировална Brovin Yaroslav в [RX] [FGX] Описание версии 0.7.0.69   
    Ссылка на скачивание (Только для RAD Studio RX): fgx_0.7.0.69.zip
    Инструкция по установке: "Инструкция по установке набора компонентов FGX"
    Описание
    Эта версия включает в себя следующий набор компонентов:
    Дизайнер итемов (NEW) - дизайнер итемов. TfgToast (NEW) - класс отображения быстрых сообщений TfgFlipView (UPDATED) - слайдер изображений. Поддерживает несколько способов переключения фотографий при помощи эффектов и сдвигов. При первом использовании ОБЯЗАТЕЛЬНО прочитать инструкцию "TfgFlipView - Инструкция загрузки стиля" TfgPositionAnimation - анимация свойств типа TPosition TfgPosition3DAnimation - анимация свойств типа TPosition3D  TfgBitmapLinkAnimation - анимация свойств типа TBitmapLink  TfgProgressDialog (UPDATED)- Компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения фоновой операции можно оценить. TfgActivityDialog (UPDATED)- компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения операции не возможно адекватно оценить. TfgActionSheet - Аналог контекстного меню для мобильных платформ. TfgColorsPanel (UPDATED)- Палитра цветов с возможностью выбора цвета. TfgGradientEdit - Компонент выбора градиента. TfgLinkedLabel  - Метка поддерживающая открытие Web ссылки в браузере по умолчанию. TfgApplicationEvents - компонент с возможностью легко задать обработчики на основные события приложения: Отслеживание смены состояния приложения, простой, обновление и выполнение действий Actions, Изменение ориентации устройства и тд. TfgVirtualKeyboard - компонент облегчающий работу с виртуальной клавиатурой. Позволяет задать пользовательские кнопки над виртуальной клавиатурой под iOS, а так же отлавливать события по отображению и скрытию клавиатуры. Зарегистрированы все стилевые объекты на вкладке "FGX: Style objects" Список изменений
    TfgActionSheet: Исправлена ошибка не позволяющая использовать действия TTakePhotoFromCameraAction и TTakePhotoFromLibraryAction под iOS. Исправлена ошибка приводящая к AV, если экшен не имел обработчика OnExecute (Android, iOS) Исправлен внешний вид под iOS. Раньше, если TfgActionSheet не содержал заголовка, сверху система все равно оставляла под него пустое место. Теперь если заголовка нет, то место не выделяется. Обновлен пример ActionSheetDemo TfgProgressDialog, TfgActivityDialog: Добавлено свойство Cancellable, позволяющее сделать диалог отменяемым по нажатию на экран или кнопку Back. Добавлено событие OnCancel, вызываемое, если пользователь отменил диалог. Обновлен пример. Теперь все операции выполняются в отдельном потоке, асинхронно. Добавлен метод IsShown, позволяющий определить, показан диалог или нет Добавлено свойство TfgOrigressDialog.Max, позволяющее указать максимальное значение прогресса. Улучшена генерация имени действия. Если прикрепляется системный экшен TSysCommonAction, то имя берется из CustomText  TfgFlipView: Добавлено пролистывание при помощи жестов. Добавлена опция ShowNavigationButtons, позволяющая скрыть кнопки смены слайдов Добавлено событие OnImageClick, позволяющее отследить нажатие пользователем на слайд Обновлен пример для корректной работы на всех платформах. Исправлена ошибка слайдшоу, приводящая к невозможностью контролировать и менять параметры слайдшоу. Изменен курсор на руку TfgColorsPanel, TfgGradientEdit: Добавлены пропущенное свойство Size в секции published.
  8. Like
    Martifan получил реакцию от Brovin Yaroslav в Групповые занятия   
    Очень полезная занятия, лично я обращался к Ярославу и за несколько часов решили все проблемы, спасибо еще раз Ярослав
  9. Like
    Martifan получил реакцию от XXXXXX в Удаление маркеров TMapView N2   
    Private   FMarkers: TList<TMapMarker>;   ...................     Procedure AddMarker; var      mapCenter: TMapCoordinate;     MyMarker: TMapMarkerDescriptor; Begin   mapCenter := TMapCoordinate.Create(StrToFloat(Lat), StrToFloat(Lon));   MyMarker := TMapMarkerDescriptor.Create(mapCenter, 'Text');   fmain.MapView1.Location := mapCenter;   FMarkers.Add(fmain.MapView1.AddMarker(MyMarker)); End;   Procedure RemoveMarker; var      Marker: TMapMarker; Begin   for Marker in FMarkers do     Marker.Remove; FMarkers.Clear; End;   procedure Tfmain.FormCreate(Sender: TObject); begin   FMarkers := TList<TMapMarker>.Create; End;  
  10. Like
    Martifan получил реакцию от Rusland в Удаление маркеров TMapView N2   
    Private   FMarkers: TList<TMapMarker>;   ...................     Procedure AddMarker; var      mapCenter: TMapCoordinate;     MyMarker: TMapMarkerDescriptor; Begin   mapCenter := TMapCoordinate.Create(StrToFloat(Lat), StrToFloat(Lon));   MyMarker := TMapMarkerDescriptor.Create(mapCenter, 'Text');   fmain.MapView1.Location := mapCenter;   FMarkers.Add(fmain.MapView1.AddMarker(MyMarker)); End;   Procedure RemoveMarker; var      Marker: TMapMarker; Begin   for Marker in FMarkers do     Marker.Remove; FMarkers.Clear; End;   procedure Tfmain.FormCreate(Sender: TObject); begin   FMarkers := TList<TMapMarker>.Create; End;  
  11. Like
    Martifan получил реакцию от Kitty в Удаление маркеров TMapView N2   
    Private   FMarkers: TList<TMapMarker>;   ...................     Procedure AddMarker; var      mapCenter: TMapCoordinate;     MyMarker: TMapMarkerDescriptor; Begin   mapCenter := TMapCoordinate.Create(StrToFloat(Lat), StrToFloat(Lon));   MyMarker := TMapMarkerDescriptor.Create(mapCenter, 'Text');   fmain.MapView1.Location := mapCenter;   FMarkers.Add(fmain.MapView1.AddMarker(MyMarker)); End;   Procedure RemoveMarker; var      Marker: TMapMarker; Begin   for Marker in FMarkers do     Marker.Remove; FMarkers.Clear; End;   procedure Tfmain.FormCreate(Sender: TObject); begin   FMarkers := TList<TMapMarker>.Create; End;  
  12. Like
    Martifan отреагировална Brovin Yaroslav в Групповые занятия   
    Добрый день, уважаемые участники форума,
     
    В связи с востребованностью обучения по Skype и моим ограниченным количество времени, предлагаю организовать групповые занятия по курсу обучения кроссплатформенной разработки.
     
    Условия
    Занятия в группе от 2 до 3 человек Стоимость 1 часа (60 минут) - 1 500 р. с группы (сумма делится на количество участников в группе) Требования к участникам
    Знание синтаксиса языка Delphi (ООП) План курса
    На текущий момент набирается группа на обучение FireMonkey по кроссплатформенной разработке. Курс предполагает изучение следующих разделов (список разделов и тем приблизительный и может корректироваться):
    Первое приложение. (Создание проекта, типы проекта и их отличия, знакомство со средой разработки) Архитектура FireMonkey (Концепция кроссплатформенности, достоинства и недостатки подходов, архитектура платформы, сервисы, сообщения, стили) Сервисы (Концепция, Преимущества сервисов, существующие виды сервисов, Разработка своих сервисов, использование чужих.) Графика (Особенности отрисовки, отличия от VCL, виды реализаций канвы, GPU канва, весь процесс отрисовки графики. Отрисовка компонентов. Рисуем текст. Особенности отрисовки растровых изображений. Ограничения платформ. Особенности ускорения отрисовки) Анимация и триггеры (Типы (быстрая, компонентная) и виды анимации (линейная, квадратичная и тд), принцип работы настройка. Триггеры.) Фильтры и эффекты (Понятие фильтра и эффекта. Как работают фильтры и эффекты. Фильтры на уровне шейдеров. Эффекты используют фильтры) Сенсоры (Общий подход работы с сенсорами. Какие значения выдают разные виды сенсоров.) Стили (Описание, как работают стили: загрузка, создание, выгрузка, использование, виды стилей (растровые векторные), редакторы стилей. Замена платформенного стиля. и тд) Компонентная база (по выбору) Создание приложения от идеи до воплощения Особенности разработки на мобильных платформах Использование нативного API Вопросы производительности
  13. Like
    Martifan отреагировална Brovin Yaroslav в Как программно в Андроид выполнить MouseDown для компонента?   
    На уровне формы есть методы для работы с мышью:
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single); virtual; procedure MouseMove(Shift: TShiftState; X, Y: Single); virtual; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Single; DoClick: Boolean = True); virtual; procedure MouseWheel(Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean); virtual; procedure MouseLeave; virtual; Используйте их, для эмуляции нажатия мышкой или пальцем. В качестве координат нужно передавать абсолютные координаты компонента
  14. Like
    Martifan отреагировална Pulsarius в RAD XE9 (RAD X Seattle)   
    https://onedrive.live.com/redir?resid=6F5EAC5B9D042042!4961&authkey=!AEoTXbnPYPhSm4I&ithint=folder%2cpdf
  15. Like
    Martifan отреагировална Pulsarius в Delphi/C# IntPtr   
    Или можно ещё короче, если планируется работа с памятью по указателю:
    var decodedPtr: Pointer; procedure MyProcedure(const MaxDataBytes: Integer); begin GetMem(decodedPtr, MaxDataBytes); end; И потом не забыть написать где-нибудь вот это, когда выделенная память больше не нужна:
    ... FreeMem(decodedPtr); ...
  16. Like
    Martifan отреагировална Pulsarius в Delphi/C# IntPtr   
    var decodedPtr: Pointer; decoded: Array of Byte; procedure MyProcedure(const MaxDataBytes: Integer); begin SetLength(decoded, MaxDataBytes); decodedPtr:=@decoded[0]; end;
  17. Like
    Martifan отреагировална Brovin Yaroslav в FGX хотелось бы TfgToast для Android и IOS   
    На самом деле такой компонент у меня есть, но я его не публиковал, так как не довел до релизного состояния. Постараюсь доделать и выложить.
  18. Like
    Martifan отреагировална Евгений Корепов в Сообщения чата в виде сообщений в 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.
  19. Like
    Martifan отреагировална Brovin Yaroslav в Разработка настольной версии клиента для форума по FireMonkey с использованием FireMonkey   
    Немного переработан внешний вид. Теперь можно просматривать темы и посты с поддержкой форматирования. Добавлен пункт меню просмотр последних тем.  

  20. Like
    Martifan отреагировална XXXXXX в Уменьшение размера аудио   
    Недавно прочитал про уменьшение размера аудио файла, потока. Нашёл технологии Amr и Speex, хочу найти имплементацию одной из них. Общая идея в том, чтобы уменьшить размер "сырого" (raw) аудио на андроиде. Буду благодарен за любую полезную информацию
  21. Like
    Martifan отреагировална Равиль Зарипов (ZuBy) в TMapsEngine   
    Обновил TMapsEngine с выходом Delphi 10 Seattle
    Вырезал нативный сенсор (т.к. исправили TLocationSensor) переименовал методы, в соответствии с используемым API Добавил Yandex Locator API (определение координат по IP, WI-FI, GSM) для определения своих координат, достаточно отправить пустой IP адрес, yandex сам распознает откуда был запрос сделан
     
    модуль TMapsEngine_Seattle_10.zip
  22. Like
    Martifan отреагировална Kitty в Руководства RAD Studio Mobile Tutorials - Free eBook   
    Ждём книгу от автора этого форума. У неё будет успех и востребованность. Надеямся автор расставит приоритеты в своём расписании и найдёт время на выпуск книги.
  23. Like
    Martifan отреагировална Brovin Yaroslav в Руководства RAD Studio Mobile Tutorials - Free eBook   
    Ссылка на скачивание: http://docs.embarcadero.com/products/rad_studio/radstudioXE7/Mobile_Tutorials_en.pdf
  24. Like
    Martifan отреагировална Равиль Зарипов (ZuBy) в TMapsEngine   
    Компонент TMapsEngine
     
    Возможности
    Нативный LocationSensor [ANDROID] Геокодинг/Реверс геокодинг через Google API, Yandex API, Here Maps API Построение маршрута через Google Distance API Расчет дистанции по прямой Совместим со стандартным компонентом TLocationSensor  
    Видео демонстрация
     
    На видео видно как TMapView косячик с миллионом точек, приложение зависло при отрисовке, но с этим ничего не поделать.
    Без синхронизации не возможно отрисовать все точки
     
    Исходник
    TMapsEngine_source.zip
    TMapsEngine_Seattle_10.zip
     
    Скачать APK  (долго он там не пролежит, а форум не позволяет загрузить zip размером 7,4 мб )
     
  25. Like
    Martifan отреагировална Равиль Зарипов (ZuBy) в узнать расстояние между 2 точками   
    RouteURL = 'https://maps.googleapis.com/maps/api/directions/xml?origin=%s,%s&destination=%s,%s&mode=driving&key=%s'; Str := (Format(RouteURL, [OrigLatitude, OrigLongitude, DestLatitude, DestLongitude, aGoogleDistanceKey])); подробно
    смотрим XML и разбираем
×
×
  • Создать...