-
Постов
2 517 -
Зарегистрирован
-
Посещение
-
Победитель дней
264
Активность репутации
-
Равиль Зарипов (ZuBy) получил реакцию от Rusland в TLocationSensor - GPS трекер
вот оригинальный код, я же себе сделал компонент сразу с геокодингом и реверс геокодингом (через три сервиса here maps, google maps, yandex maps) +расчёт дистанции по дороге через google +расчёт дистанции по прямой
AndroidGPS.zip
-
Равиль Зарипов (ZuBy) получил реакцию от zairkz в TLocationSensor - GPS трекер
вот оригинальный код, я же себе сделал компонент сразу с геокодингом и реверс геокодингом (через три сервиса here maps, google maps, yandex maps) +расчёт дистанции по дороге через google +расчёт дистанции по прямой
AndroidGPS.zip
-
Равиль Зарипов (ZuBy) отреагировална kami в [Android] программа закрывается при использовании LocationSensor и Memo
{$IFDEF offtop}Мсье знает толк в извращениях {$ENDIF}
-
Равиль Зарипов (ZuBy) получил реакцию от zairkz в [Android] программа закрывается при использовании LocationSensor и Memo
Это все конечно хорошо, но не всегда работает.
Вот такая зверская конструкция на Windows отрабатывается на ура, а на андроиде бывают лаги
TTask.Run(procedure begin // тут обращение к базе например TThread.Synchronize(nil, procedure begin // тут разбираем данные TTask.Run(procedure begin // тут сохраняем TThread.Queue(nil, procedure begin // тут обновляем данные в визуальных компонентах end); end); end); end); пришлось отказаться от такой конструкции, но иногда она жутко удобна
-
Равиль Зарипов (ZuBy) отреагировална Brovin Yaroslav в [Android] программа закрывается при использовании LocationSensor и Memo
Если у вас зависает программа, то замените Synchronize на TThread.Queue. Это точно должно помочь
Этим летом мне выделили время и я плотно занимался проблемой "черного экрана" на андроиде и креша при закрытии приложения на Андроиде. На форуме было очень много обсуждений этой проблемы. Поэтому есть пара советов, как ее избежать в текущих версия среды:
Все операции требуемые выполнять в Delphi UI потоке нужно выполнять в Synchronize или Queue. Второе предпочтительнее. Отличие между Synchronize и Queue - только в том, что первое остановит выполнение потока до тех пор, пока не выполниться код в Synchronize. Queue наборот, поставить в очередь ваш код на выполнение. Поэтому если вы можете выполнять вашу задачу асинхронно, то лучше использовать Queue, если нет, то Synchronize. В вашем случае вы можете выполнить добавление маркера асинхронно, так как результат сенсора вы не используете в будущем для вычислений. То есть у вас только задача отображения данных в Real Time. Поэтому
-
Равиль Зарипов (ZuBy) получил реакцию от Brovin Yaroslav в [Android] программа закрывается при использовании LocationSensor и Memo
TThread.Synchronize(nil, procedure begin Memo1.Lines.Add(''); end); потому что работает в другом потоке!
-
Равиль Зарипов (ZuBy) получил реакцию от Rusland в [Android] программа закрывается при использовании LocationSensor и Memo
с какими точно не могу сказать, это зависит от того какие компоненты вы используете. например карта (судя по коду) тоже работают в отдельном потоке, но пока проблем не было
ограничения по Memo я поставил 1000 символом и после чего очищаю его (для логов использовал)
-
Равиль Зарипов (ZuBy) получил реакцию от Евгений Корепов в узнать расстояние между 2 точками
uses Math, FMX.Maps
function TMapsEngine.GetDistance(const aStart, aEnd: TMapCoordinate): Real; const Radius = 6372795; PiDiv180 = Pi / 180; var CosLatStart, SinLatStart, CosLatEnd, SinLatEnd, Delta, CosDelta, SinDelta, X, Y: Real; begin try CosLatStart := Cos(aStart.Latitude * PiDiv180); CosLatEnd := Cos(aEnd.Latitude * PiDiv180); SinLatStart := Sin(aStart.Latitude * PiDiv180); SinLatEnd := Sin(aEnd.Latitude * PiDiv180); Delta := (aEnd.Longitude * PiDiv180) - (aStart.Longitude * PiDiv180); CosDelta := Cos(Delta); SinDelta := Sin(Delta); Y := Sqrt(((CosLatEnd * SinDelta) * (CosLatEnd * SinDelta)) + ((CosLatStart * SinLatEnd - SinLatStart * CosLatEnd * CosDelta) * (CosLatStart * SinLatEnd - SinLatStart * CosLatEnd * CosDelta))); X := SinLatStart * SinLatEnd + CosLatStart * CosLatEnd * CosDelta; Result := Round(ArcTan2(Y, X) * Radius); except Result := -1; end; end; рассчитывает отрезок по прямой, не по дороге!
-
Равиль Зарипов (ZuBy) получил реакцию от Alex7wrt в При выравниваниее по правому краю съедаются символы.
как одно из решении, добавить пробелы с права от текста. если float то перевести в string
-
Равиль Зарипов (ZuBy) получил реакцию от Rusland в [Android] программа закрывается при использовании LocationSensor и Memo
TThread.Synchronize(nil, procedure begin Memo1.Lines.Add(''); end); потому что работает в другом потоке!
-
Равиль Зарипов (ZuBy) получил реакцию от Kitty в При выравниваниее по правому краю съедаются символы.
как одно из решении, добавить пробелы с права от текста. если float то перевести в string
-
Равиль Зарипов (ZuBy) получил реакцию от Martifan в узнать расстояние между 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 и разбираем
-
Равиль Зарипов (ZuBy) получил реакцию от AngryOwl в узнать расстояние между 2 точками
uses Math, FMX.Maps
function TMapsEngine.GetDistance(const aStart, aEnd: TMapCoordinate): Real; const Radius = 6372795; PiDiv180 = Pi / 180; var CosLatStart, SinLatStart, CosLatEnd, SinLatEnd, Delta, CosDelta, SinDelta, X, Y: Real; begin try CosLatStart := Cos(aStart.Latitude * PiDiv180); CosLatEnd := Cos(aEnd.Latitude * PiDiv180); SinLatStart := Sin(aStart.Latitude * PiDiv180); SinLatEnd := Sin(aEnd.Latitude * PiDiv180); Delta := (aEnd.Longitude * PiDiv180) - (aStart.Longitude * PiDiv180); CosDelta := Cos(Delta); SinDelta := Sin(Delta); Y := Sqrt(((CosLatEnd * SinDelta) * (CosLatEnd * SinDelta)) + ((CosLatStart * SinLatEnd - SinLatStart * CosLatEnd * CosDelta) * (CosLatStart * SinLatEnd - SinLatStart * CosLatEnd * CosDelta))); X := SinLatStart * SinLatEnd + CosLatStart * CosLatEnd * CosDelta; Result := Round(ArcTan2(Y, X) * Radius); except Result := -1; end; end; рассчитывает отрезок по прямой, не по дороге!
-
Равиль Зарипов (ZuBy) получил реакцию от Brovin Yaroslav в узнать расстояние между 2 точками
uses Math, FMX.Maps
function TMapsEngine.GetDistance(const aStart, aEnd: TMapCoordinate): Real; const Radius = 6372795; PiDiv180 = Pi / 180; var CosLatStart, SinLatStart, CosLatEnd, SinLatEnd, Delta, CosDelta, SinDelta, X, Y: Real; begin try CosLatStart := Cos(aStart.Latitude * PiDiv180); CosLatEnd := Cos(aEnd.Latitude * PiDiv180); SinLatStart := Sin(aStart.Latitude * PiDiv180); SinLatEnd := Sin(aEnd.Latitude * PiDiv180); Delta := (aEnd.Longitude * PiDiv180) - (aStart.Longitude * PiDiv180); CosDelta := Cos(Delta); SinDelta := Sin(Delta); Y := Sqrt(((CosLatEnd * SinDelta) * (CosLatEnd * SinDelta)) + ((CosLatStart * SinLatEnd - SinLatStart * CosLatEnd * CosDelta) * (CosLatStart * SinLatEnd - SinLatStart * CosLatEnd * CosDelta))); X := SinLatStart * SinLatEnd + CosLatStart * CosLatEnd * CosDelta; Result := Round(ArcTan2(Y, X) * Radius); except Result := -1; end; end; рассчитывает отрезок по прямой, не по дороге!
-
Равиль Зарипов (ZuBy) отреагировална Brovin Yaroslav в Редактирование стиля, как добавить "TStyleObject", "TActiveStyleObject" и т.п.?
По умолчанию эти объекты стиля и другие не зарегистрированы в палитре инструментов.
Эти объекты используются только в стилях для:
Упрощение создания стиля за счет композиции контролов для достижения наиболее часто используемых функций (смена изображений по триггеру в зависимости от состояния контрола - кнопка с тремя состояниями, Текст с тенью) Увеличения производительности работы стиля за счет композиции контролов. Уменьшение размера стиля за счет повторного использования одного исходного изображения в однотипных контролах (TButton, TSpeedButton и тд). То есть вместо загрузки по отдельности каждого изображения в стиль каждого контрола, можно использовать изображения по ссылке. Чтобы их использовать, нужно их зарегистрировать в среде IDE RAD Studio.
Это делает вот этот пакет:
RAD Studio XE5 - FMX Style Objects.zip RAD Studio XE6 - FMX Style Objects (XE6).zip После установки пакета в палитре инструментов появится вкладка "Style Object", в которой будут находится все служебные стилевые объекты среды RAD Studio XE5.
Список добавляемых стилевых объектов:
TStyleObject - Использование изображения по ссылке на оригинал и области в этом изображении. Не загружает повторно объект. TSubImage - Использование изображения по ссылке на оригинал и области в этом изображении. Не загружает повторно объект. TActiveStyleObject - Объект для смены одного изображения на другое с указанным типом анимации и указанным триггером. TTabStyleObject - специальный объект для быстрого создания стиля вкладки TTabControl TCheckStyleObject - специальный упрощенный объект для создания стиля TCheckBox TButtonStyleObject - упрощенный объект стиля кнопки с поддержкой загрузки отдельных изображений на каждое состоянии кнопки (нормальное, фокус, под мышкой, нажатое) TSystemButtonObject - стиль системной кнопки. То же, что и TButtonStyleObject, только с дополнительным состоянием - неактивная кнопка TStyleTextObject - объект для быстрого создания стиля текст с тенью. TStyleTextAnimation - объект анимации для смены цвета и тени текста TActiveStyleTextObject - объект стиля для создания текста с тенью и переключению цвета текста и тени на другой по анимации и триггеру. TTabStyleTextObject - объект стиля для создания вкладки с текстом для TTabControl. TButtonStyleTextObject - объект стиля для создания стиля кнопки с текстом. TActiveOpacityObject - объект для смены прозрачности контрола. TBrushObject - объект хранящий кисть TBrush TBitmapObject - объект хранящий изображение TBitmap TFontObject - хранение шрифта TFont TPathObject - хранение SVG пути TPath TColorObject - хранение цвета TAlphaColor -
Равиль Зарипов (ZuBy) отреагировална #WAMACO в Индивидуальные занятия по Skype
И не только книги, но хотя бы открытого "клиента" под этот форум!
-
Равиль Зарипов (ZuBy) отреагировална FIL в fmx Popmenu ниже button как?
Хорошо. Отмечу лишь, что ListBox позволяет сделать все тоже самое и даже больше.
-
Равиль Зарипов (ZuBy) получил реакцию от enatechno в [TListBox] Как отобразить итемы в виде панелей?
я же наоборот использую ListView, для достижении своих целей
-
Равиль Зарипов (ZuBy) получил реакцию от enatechno в OnButtonClick vs OnItemClick
в итоге получилось так
ContentView - TListView
procedure TForm1.ContentViewItemClickEx(const Sender: TObject; ItemIndex: Integer; const LocalClickPos: TPointF; const ItemObject: TListItemObject); var pMy: TPoint; pItem: TRect; begin // вычисляем прямоугольник, где распологается кнопка pItem.Left := trunc(ContentView.Width - ContentView.ItemAppearanceObjects.ItemObjects.Accessory.WidthWhenVisible - ContentView.ItemAppearanceObjects.ItemObjects.TextButton.WidthWhenVisible) - 12; pItem.Right := pItem.Left + trunc(ContentView.ItemAppearanceObjects.ItemObjects.TextButton.WidthWhenVisible); pItem.Top := trunc((ContentView.ItemAppearance.ItemHeight / 2) - (ContentView.ItemAppearanceObjects.ItemObjects.TextButton.HeightWhenVisible / 2)); pItem.Bottom := pItem.Top + trunc(ContentView.ItemAppearanceObjects.ItemObjects.TextButton.HeightWhenVisible); { смотрим куда тыкаем ShowMessage('click : ' + LocalClickPos.X.ToString + ' ' + LocalClickPos.Y.ToString + #13#10 + 'client: ' + ContentView.Width.ToString + #13#10 + pItem.Left.ToString + ' ' + pItem.Top.ToString + #13#10 + pItem.Right.ToString + ' ' + pItem.Bottom.ToString + #13#10); } pMy.X := trunc(LocalClickPos.X); pMy.Y := trunc(LocalClickPos.Y); if PtInRect(pItem, pMy) then begin ShowMessage('Нажалось))'); end else begin // нажатие на Item, выполняем код тут, не в OnItemClick end; end; стиль вот такой используется
-
Равиль Зарипов (ZuBy) отреагировална AngryOwl в [XE7-XE8] [Android] SONY
Для чего использовались драйвера (Windows 7/8/10 (x64)):
Sony Xperia SP
Sony Xperia L
Sony Xperia Tablet Z
и в архиве еще туча райверов для других девайсов от Sony ( размер архива 400 Mb !)
https://drive.google.com/open?id=0B5LS-2rAfJMDVkIycVlOQ1hqejA
P.S. Здесь и сделаю примечание по работе с данными девайсами.
В случае попытки работы с графическими примитивами, рисование закрашенных градиентом примитивов, возникает "баг" - вместо того чтобы рисовать, например, прямоугольник залитый градиентом, рисуется прямоугольник цветом "Fuchsia".
Чтобы избежать этого, рекомендую использовать обычные PNG.
Например:
-
Равиль Зарипов (ZuBy) получил реакцию от AngryOwl в [TListBox] Как отобразить итемы в виде панелей?
я же наоборот использую ListView, для достижении своих целей
-
Равиль Зарипов (ZuBy) отреагировална AngryOwl в [TListBox] Как отобразить итемы в виде панелей?
Не в первый раз вижу эту тему...
TGridPanelLayout - далеко не предпочтительный вариант. Совсем.
У ListBox с его Item'ами намного больше возможностей.
С [xenon54] соглашусь, но не полностью. ListView действительно хорош (для мобильной платформы), однако он намного сложнее.
Примеры применения стилей для ListBoxItem (не сочтите за рекламу, так проще было... нащелкал скринов для примера):
Везде - ListBox.
На последнем скрине - всплывающие сообщения на экране. Реализовано так же - прозрачная форма, ListBox и Item'ы со своим стилем В ВИДЕ ПАНЕЛЕК )
-
Равиль Зарипов (ZuBy) получил реакцию от Евгений Корепов в [Android] Как можно изменить стиль кнопки в TListViewItem?
ListView1.DeleteButtonText := 'Удалить'; // меняем текст ListView1.CanSwipeDelete := false; // отключить появление кнопки -
Равиль Зарипов (ZuBy) отреагировална Brovin Yaroslav в TEdit с автозавершением
Раньше нельзя было прикреплять 7z файлы. Я после вашего сообщения добавил эти файлы в список разрешенных к прикреплению.
-
Равиль Зарипов (ZuBy) получил реакцию от Kitty в [SSL] Как получить содержимое страницы по HTTPS с помощью INDY?
begin fSSL := TIdSSLIOHandlerSocketOpenSSL.Create(fHTTP); fHTTP.IOHandler := fSSL; fHTTP.AllowCookies := True; fHTTP.HandleRedirects := True; end; Указать НУЖНЫЙ тип SSL/TLS и его версию
и если это Windows программа, то надеюсь вы не забыли библиотеки ssl положить вместе с исполнительным файлом
ответ на запрос, проверьте id вашего приложения