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

ENERGY

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

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

  • Посещение

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

    57

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

  1. Like
    ENERGY отреагировална Евгений Корепов в [Статья] PHP сервер для рассылки Push на Android и iOS   
    Можно и удалять. Но тогда не будут работать мои аналитические инструменты - частота запусков приложения, периоды активности и многое другое.
    У Равиля запрос добавления токена в базу вот такой:
    INSERT INTO PushTokens (`deviceToken`, `deviceID`, `platform`) VALUE ('$deviceToken', '$deviceID', '$platform') ON DUPLICATE KEY UPDATE `deviceToken` = '$deviceToken'"; У меня же он чуть сложнее:
    INSERT INTO gcm (`DeviceID`, `DeviceToken`, `City`, `last_update`, `add_date`, `RequestCount`, `Active`) VALUES ('$DeviceID','$DeviceToken','$City',NOW(),NOW(), 1, 1) ON DUPLICATE KEY UPDATE `DeviceToken` = '$DeviceToken', `City` = '$City', `last_update` = NOW(), `RequestCount` = `RequestCount` + 1, `Active` = 1 Таблица выглядит вот так
    CREATE TABLE `gcm` ( `id` int(11) NOT NULL AUTO_INCREMENT, `DeviceID` char(32) DEFAULT NULL, `DeviceToken` varchar(255) DEFAULT NULL, `City` varchar(100) DEFAULT NULL, `last_update` datetime DEFAULT NULL, `add_date` datetime DEFAULT NULL, `RequestCount` int(11) DEFAULT '1', `Active` bit(1) DEFAULT b'1', PRIMARY KEY (`id`), UNIQUE KEY `DeviceID_index` (`DeviceID`) USING BTREE ) ENGINE=MyISAM AUTO_INCREMENT=40337 DEFAULT CHARSET=utf8; Т.е. кроме всего прочего я вижу:
    Дату-время первого запуска приложения Дату-время последнего запуска приложения Количество запусков приложения Стоит ли еще приложение на этом устройстве (Active) На поле City не обращайте внимание...
  2. Like
    ENERGY отреагировална krapotkin в Опять про потоки и картинки   
    потому что мобильная связь это не провод с интернетом. дикие задержки и все время рвется
    протоколы обмена с сервером не предусматривают постоянных переподключений
    а вот HTTP специально разработан для такого режима
  3. Like
    ENERGY отреагировална Равиль Зарипов (ZuBy) в [Статья] PHP сервер для рассылки Push на Android и iOS   
    Лучше каждый раз, потому что не известно из каких данных он генерируется и при этом у него есть срок действия, но хз какой
  4. Like
    ENERGY отреагировална Kitty в Отправка пуша из консоли firebase   
    Спасибо получилось.
    Для таких не умных как я, которые не понимают, что в консоли FCM надо писать самой:
    1. Откройте дополнительные параметры в консоли FCM .
    2. В первом поле КЛЮЧ принудительно самостоятельно напечатайте "mеssage" без ошибок в первом поле. В поле напротив напишите текст сообщения.
    3. При этом появиться дополнительные поля ввода ниже.
    4. В первом новом поле ниже напишите принудительно title без ошибок и напротив в значении ваш текст...
     
     
  5. Like
    ENERGY отреагировална Rusland в Запуск приложения от 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;  
  6. Like
    ENERGY отреагировална Равиль Зарипов (ZuBy) в TCombobox как изменить цвет прямоугольника выделения и цвет RadioButton в его же popup списке   
    Это нативный пикер, он не стилизуется из FMX. Нужно использовать xml стили для кастомизации, но это не точно
  7. Like
    ENERGY получил реакцию от Равиль Зарипов (ZuBy) в DisposeOf или Free?   
    @RoschinSpb
    Ну нет же.
    В не ARC (Auto reference counter), классическом компиляторе (Windows и Mac)  Free всегда вызывает деструктор и освобождает память выделенную под класс и его поля. Т.е. если обратиться потом к такому классу произойдет исключение AV.
    А вот в ARC компиляторах, DisposeOf вызовет деструктор, но память выделенная под класс и его поля, останется занятой, и не освободиться. Т,е. если после DisposeOf обратится к полям класса, не будет исключения AV, но поля уже будут очищены.  При этом в деструкторе можно освободить свои данные и уничтожить инкапсулированные классы.
    Такие объекты называют зомби-объекты - т.к. они остаются висеть в памяти до конца работы программы, и даже если ссылка позже на него уменьшиться до 0, память не освободиться и деструктор не будет вызван повторно.  Чтобы узнать находится ли объект в зомби состоянии, есть метод Disposed - это аналог Assign.
    Повторюсь всем рекомендую статью GunSmoker, там эта тема хорошо освещена.
     
  8. Like
    ENERGY получил реакцию от #WAMACO в DisposeOf или Free?   
    @RoschinSpb
    Ну нет же.
    В не ARC (Auto reference counter), классическом компиляторе (Windows и Mac)  Free всегда вызывает деструктор и освобождает память выделенную под класс и его поля. Т.е. если обратиться потом к такому классу произойдет исключение AV.
    А вот в ARC компиляторах, DisposeOf вызовет деструктор, но память выделенная под класс и его поля, останется занятой, и не освободиться. Т,е. если после DisposeOf обратится к полям класса, не будет исключения AV, но поля уже будут очищены.  При этом в деструкторе можно освободить свои данные и уничтожить инкапсулированные классы.
    Такие объекты называют зомби-объекты - т.к. они остаются висеть в памяти до конца работы программы, и даже если ссылка позже на него уменьшиться до 0, память не освободиться и деструктор не будет вызван повторно.  Чтобы узнать находится ли объект в зомби состоянии, есть метод Disposed - это аналог Assign.
    Повторюсь всем рекомендую статью GunSmoker, там эта тема хорошо освещена.
     
  9. Like
    ENERGY получил реакцию от RoschinSpb в DisposeOf или Free?   
    @RoschinSpb
    Ну нет же.
    В не ARC (Auto reference counter), классическом компиляторе (Windows и Mac)  Free всегда вызывает деструктор и освобождает память выделенную под класс и его поля. Т.е. если обратиться потом к такому классу произойдет исключение AV.
    А вот в ARC компиляторах, DisposeOf вызовет деструктор, но память выделенная под класс и его поля, останется занятой, и не освободиться. Т,е. если после DisposeOf обратится к полям класса, не будет исключения AV, но поля уже будут очищены.  При этом в деструкторе можно освободить свои данные и уничтожить инкапсулированные классы.
    Такие объекты называют зомби-объекты - т.к. они остаются висеть в памяти до конца работы программы, и даже если ссылка позже на него уменьшиться до 0, память не освободиться и деструктор не будет вызван повторно.  Чтобы узнать находится ли объект в зомби состоянии, есть метод Disposed - это аналог Assign.
    Повторюсь всем рекомендую статью GunSmoker, там эта тема хорошо освещена.
     
  10. Like
    ENERGY получил реакцию от Anatoliy в TColorAnimation вообще работает с кнопками??   
    Чтобы помигать кнопкой или любым другим контролом, для привлечения внимания я делаю так: 
    Добавить на кнопку TGlowEffect, установить нужный цвет. Внутрь TGlowEffect добавляю TFloatAnimation . В нем выбираю PropertyName = Opacity. Дальше устанавливаю Start и Stop 0 и 1. AutoReverse := true; Loop := true; Duration (0.3)
    Все.
    В коде включаем :
    GlowEffect.Enable := true и FloatAnimation.Enable := true - заставит пульсировать кнопку. 
    Например так:
    procedure TfrmMain.PulseEMRGButton; begin   GlowBtnEMRGNum.Enabled := true;   animGlowBtn.Enabled := true;   TThread.CreateAnonymousThread(procedure   begin     Sleep(1250);  // general duration     TThread.Queue(nil, procedure     begin       animGlowBtn.Enabled := false;       GlowBtnEMRGNum.Enabled := false;     end);   end).Start; end;  
    Ксати Major переименуйте тему в "Пульсирующая кнопка".
  11. Like
    ENERGY отреагировална krapotkin в Поочередная загрузка изображений в TImage   
    с учетом Thread и Synchronize  тут по сути написано
    ListView.Items[id].Bitmap.LoadFromFile(Cache + code + '.png');
     
  12. Like
    ENERGY получил реакцию от Andrey Efimov в Простая проверка подключения к интернету перед выполнением IdHTTP1.get   
    В правой панели выберите платформу Android, а не Windows.
  13. Like
    ENERGY получил реакцию от Sashar333 в Простая проверка подключения к интернету перед выполнением IdHTTP1.get   
    В правой панели выберите платформу Android, а не Windows.
  14. Like
    ENERGY получил реакцию от Brovin Yaroslav в Как получить hwnd контрола ?   
    В VCL TPanel - это было окно (Window) со своим холстом (DC Canvas). И многие компоненты VCL это обертка над WinAPI - т.е. окна с определенным стилем который предлагает система.
    В FMX все отрисовывается собственным фреймворком (мультиплатформа ведь!), собственный рендер,  и теперь это не Window, соответственно у него нет дескриптора, как и у всех остальных визуальных компонентов FMX, кроме формы.  
    Расскажите лучше что вам нужно сделать.
  15. Like
    ENERGY отреагировална AliZairov в Native Android VideoView   
    Привет, Готовы,
     
    unit VideoView; interface uses System.SysUtils, FMX.Types, FMX.Helpers.Android, Androidapi.Helpers, Androidapi.JNI.App, Androidapi.JNI.Net, Androidapi.JNI.VideoView, Androidapi.JNI.Widget; type TVideoView = class(TObject) private FDialog: JDialog; FVideoView: JVideoView; public procedure Play(Source: string); end; implementation { TVideoView } procedure TVideoView.Play(Source: string); begin CallInUIThread( procedure begin FDialog := TJDialog.JavaClass.init(TAndroidHelper.Activity, -1); FDialog.setCancelable(True); FVideoView := TJVideoView.JavaClass.init(TAndroidHelper.Activity); FVideoView.setVideoURI(StrToJURI(Source)); FVideoView.start; FDialog.setContentView(FVideoView); FDialog.show; end); end; end.
  16. Like
    ENERGY получил реакцию от #WAMACO в DisposeOf или Free?   
    Вот эту еще почитайте статью, мне она больше понравилась.
    http://www.gunsmoker.ru/2013/05/modern-delphi.html
    Проблема DisposeOf в том, что он не освобождает память, а просто вызывает деструктор (к классу потом можно обратиться, и не будет Access Violation).
    На моб. платоформах я обычно иcпользую Free как и раньше, иногда FreeAndNil (если необходимо) т.к. на моб. платформах в отличии от десктопных платформ, вызов Free работает по другому . Если зайти в тело метода там будет комментарий: 
    // under ARC, this method isn't actually called since the compiler translates // the call to be a mere nil assignment to the instance variable, which then calls _InstClear В случае моб. платформ - Free обнуляет переменную, уменьшает ARC на единицу, затем проверяет счетчик ARC и если он = 0 - то вызывает деструктор. 
    Если объект где то присваивался, в какую либо еще переменную, и переменная не была обнулена, то его счетчик ссылок ARC > 0, то он не освободиться с вызовом Free, на эту тему есть баг (фича?) с reference procedure, который вроде уже исправили в Токио (я не проверял, т.к. пока токио нормально не работает под Android).
    А вот в случае с визуальными контролами, если нужно убрать контрол, надо использовать DisposeOf  иначе он останется на форме (может кто знает как его убрать при помощи Free, что и где обнулить? ).
  17. Like
    ENERGY отреагировална Mars M в 2D<>3D координаты   
    В общем свой вопрос решил. Вышеописанные функции удобны для работы с координатами.
    И подошли бы мне если бы нужно было перемещать саму модель, но в моем случае нужно работать только с камерой, а это значит что нужно постоянно учитывать ее положение. Короче слишком много математики для фичи которая будет только для того что бы была
    Но к счастью есть свойство ScreenBounds, которое все сделает за меня.
    Вот обновленный пример, по правой кнопке куб вписывается в окно, что мне и нужно.
    https://yadi.sk/d/KVJFHajd3J9ALD
     
    Projects.rar
  18. Like
    ENERGY получил реакцию от Astghik в Проверить состояние сети   
    Вот вариант предложенный Равилем (я его немного изменил):
    Кстати на Android есть методы ОС для этого, они гораздо быстрее.
    uses System.Net.HttpClient
    function CheckInternet: boolean; begin   Result := false; with THTTPClient.Create do   try     try       Result := Head('http://google.com').StatusCode < 400;     except     end;   finally     Free;   end; end;      
  19. Like
    ENERGY получил реакцию от Anatoliy в Печать с планшета   
    А это читали? Google CloudPrint
    https://community.embarcadero.com/blogs/entry/printing-from-an-android-device-using-firemonkey-272
  20. Like
    ENERGY получил реакцию от Rusland в 2D<>3D координаты   
    Кстати на гитхабе есть ветка с примерами программ, которых нет в  Samples в последних версиях Delphi (часть примеров удалили в новых версиях), и там встречаются интересные примеры, втч. и связанные с 3D.
    Может это вам поможет. https://github.com/FMXExpress/Firemonkey/tree/master/Embarcadero
     
    Я бы на вашем месте скачал все примеры, распаковал их, а затем в Total Commander запустил бы поиск по тексту в *.pas файлах, например 'TViewport3D'
  21. Like
    ENERGY получил реакцию от #WAMACO в Кнопка изменяющая размеры относительно текста   
    Имхо BeginUpdate\EndUpdate тут лишние. Здесь одна операция, а не несколько.
    И лучше это будет сделать в OnResize кнопки.
  22. Like
    ENERGY получил реакцию от Kitty в Автоматизация работы со стилями   
    Вы бы рассказали что там происходит в ролике, а то не у всех есть лишние 40 минут.
    Offtop 
    Есть один отличный прием, о котором мало кто знает.
    Если вам нужно поработать со стилем от моб. платформы на Windows (так гораздо быстрее программировать и отлаживать GUI) - можно просто открыть в текстовом редакторе style файл, найти в нем строку platform и заменить ее с напр. ANDROID на MSWINDOWS, сохранить, а затем загрузить в текущий Default стиль.
     
     
  23. Like
    ENERGY получил реакцию от Kitty в Сортировка TListViewItems   
    Что то я не понял в чем проблема у автора. 
    Стандартный метод сортировки работает (Delphi Berlin).
     
    uses System.Generics.Defaults; ... procedure TForm1.ButtonSortClick(Sender: TObject); var   Comparer: IComparer<TListViewItem>; begin   Comparer := TDelegatedComparer<TListViewItem>.Create(     function(const LeftItm, RightItm: TListViewItem): Integer     begin       Result := CompareText(LeftItm.Text, RightItm.Text);     end);   ListView1.Items.Sort(Comparer); end; А также можно по Data 
     
    procedure TForm1.ButtonSortClick(Sender: TObject); var Comparer: IComparer<TListViewItem>; begin Comparer := TDelegatedComparer<TListViewItem>.Create( function(const LeftItm, RightItm: TListViewItem): Integer begin Result := 0; //no change if LeftItm.Data['number'] > RightItm.Data['number'] then Result := 1 //depend on sort order asc/desc else if LeftItm.Data['number'] < RightItm.Data['number'] then Result := -1; //depend on sort order asc/desc end);   ListView1.Items.Sort(Comparer); end;  
    Не забудьте BeginUpdate - EndUpdate. 
    Напомню что к объектам ListViewItem можно обращаться не через Data['name'], а напрямую через индексы, что гораздо быстрее, т.к. не нужно сравнивать все строки в цикле, это важно при большом количестве Objects per Item (напр. больше 5 в режиме DynamicAppearance).
  24. Like
    ENERGY отреагировална Andrey Efimov в Исключить устройства с Intel Atom как не поддерживаемые   
    Оф. справка: Workaround for Android 4.0/Kindle Fire Message: "Application does not support this device"
  25. Like
    ENERGY отреагировална krapotkin в Исключить устройства с Intel Atom как не поддерживаемые   
    там стоит заглушка, которая выводит надпись "ваша платформа не поддерживается, до свидания"
    но факт в том, что на большом кол-ве интел стоит библиотека houdini которая поддерживает запуск программ, написанных для ARM
    в результате и ваша программа тоже имеет шанс запуститься. поэтому, убрав эту птицу, вы можете "без программирования", как это принято в RAD Studio ))) получить хороший результат )))
×
×
  • Создать...