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

Major

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

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

  • Посещение

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

  1. Like
    Major отреагировална kami в [ANDROID] Создание и удаление компонентов run-time   
    Поправка: это самый верный способ для FMX, вне зависимости от платформы.
    Емнип, у TCircle нет наследников. Ну и - для использования Release не обязательно приводить тип к истинному классу объекта.
    Поэтому сей код можно записать так (не проверял в IDE, но если скомпилируется - значит всё нормально):
    for k:=Layout1.ChildrenCount-1 downto 0 do if Layout1.Children[k] is TCircle then Layout1.Children[k].Release;  
  2. Like
    Major отреагировална kami в [Android] способ проверить утечки памяти?   
    As far as I know, это пока единственный способ (сам не пробовал). Буду рад узнать, если появились другие возможности.
  3. Like
    Major отреагировална kami в [ANDROID] Создание и удаление компонентов run-time   
    Нет, не правильнее.
    Объект может иметь ссылки не только в родителе (в списке его дочерних контролов), но и еще в куче мест, например - на которые он подписался (FreeNotification, к примеру) или на которые подписали его. Поэтому из родителя он исчезнет, Free - заNilит его текущую ссылку, но сам объект не удалится.
    Ссылка не на ту статью. В другой статье Ярослав упоминал Самый Правильный Метод - это вызвать myObject.Release. Это гарантированно удалит все ссылки на объект, присутствующие во внутренностях FMX. Понятное дело, что если объект присутствует где-то в списках (или просто отдельной переменной) в коде, созданном вами, то нужно заNilить эти ссылки (и удалить из списков) самостоятельно.
  4. Like
    Major отреагировална Равиль Зарипов (ZuBy) в Как заполнить эллипс?   
    var MyRect: TRectF; begin MyRect := RectF(10, 10, 30, 30); if Canvas.BeginScene then try Canvas.Fill.Color := TAlphaColorRec.Red; Canvas.Stroke.Color := TAlphaColorRec.Black; Canvas.FillEllipse(MyRect, 1); Canvas.DrawEllipse(MyRect, 1); finally Canvas.EndScene; end; end; FillEllipse - заливка
    DrawEllipse - обводка
  5. Like
    Major отреагировална Равиль Зарипов (ZuBy) в Как заполнить эллипс?   
    для заливки используется 
    Canvas.Fill.Color := цвет; Canvas.FillEllipse();  
  6. Like
    Major отреагировална Andrey Efimov в [Статья][Android] Как получить информацию о потреблении ОЗУ?   
    Так, ситуация такая. Приложение я отлаживал в Android Studio, не в RAD Studio, поэтому данную ошибку не встречал.
    Если хочется запускать с отладчиком RAD, то закомментируйте строчку
    Process._Release; Но, тогда будет происходить утечка памяти, которую можно будет увидеть в Android Studio и про которую я говорил в статье.
    Ошибка появляется только во время дебага через RAD Studio. Во время обычной работы приложения всё нормально.
    К сожалению, других решений для устранения утечки я не нашёл, а QC Embarcadero молчит...
    Более подробно, про утечку расскажу в след. статье.
    Исходники на гитхабе верные.
     
    p.s. Тему почистил. Спасибо, что сообщили об этом поведении.
    p.s.2. В статью добавил информацию по этому поводу.
  7. Like
    Major отреагировална Andrey Efimov в [Статья] Жизненный цикл объектов в Delphi. Часть 1. Windows, OSX. Что же использовать Destroy, Free, FreeAndNil или DisposeOf?   
    Например, вот так:
    Создаём фрейм
    FFrmSettings := TfrmSettings.Create(Self); FFrmSettings.Parent := Parent; Уничтожаем фрейм
    if FFrmSettings <> nil then begin FFrmSettings.Parent := nil; FFrmSettings.DisposeOf; FFrmSettings := nil; end;
  8. Like
    Major отреагировална Andrey Efimov в [Статья][Android] Как получить информацию о потреблении ОЗУ?   
    Ссылка: http://delphifmandroid.blogspot.ru/2017/03/blog-post.html
    Автор: Ефимов Андрей
    Описание:
  9. Like
    Major отреагировална ENERGY в Куда сохранять настройки и данные Android-приложения?   
    Major
    Под Android, iOS, MacOS - TIniFile это все тот же TMemIniFile:
    {$IFDEF MSWINDOWS}   { TIniFile - Encapsulates the Windows INI file interface (Get/SetPrivateProfileXXX functions) }   TIniFile = class(TCustomIniFile)   public     [...]   end; {$ELSE}   TIniFile = class(TMemIniFile)   public    [...]   end; {$ENDIF}
  10. Like
    Major отреагировална ENERGY в Куда сохранять настройки и данные Android-приложения?   
    Это спорный момент. При написании мултиплатформенной программы, в Windows -  GetDocumentsPath вернет  c:\Users\<username>\Documents\ . Пользователь может удалить оттуда данные случайно - т.к. это папка "Мои документы".
    Лучше TPath.GetHomePath\имя программы - напр. для Adobe в Windows это c:\Users\<username>\AppData\Roaming\Adobe\
    Для андроида GetHomePath и GetDocumentsPath вернут одинаковый путь. В MacOS, iOS и Windows - это разные пути.
    Здесь  описание всех путей.
    + Для андроида 
    GetDocumentsPath; - /data/data/com.myapp.app1/files GetDownloadsPath; - /storage/emulated/0/Android/data/com.myapp.app1/files/Download GetHomePath; - /data/data/com.myapp.app1/files GetSharedDocumentsPath; - /storage/emulated/0/Android/data/com.myapp.app1/files GetLibraryPath; - /data/data/com.myapp.app1/files GetPublicPath; - /storage/emulated/0/Android/data/com.myapp.app1/files GetPicturesPath; - /storage/emulated/0/Android/data/com.myapp.app1/files/Pictures Ну и кто еще не в курсе - сохранять удобней всего в TMemIniFile из юнита IniFiles. Реестра в Unix системах нет (а это MacOS, iOS и Android), там все на файлах.
  11. Like
    Major отреагировална Andrey Efimov в Остановить таймер, когда приложение сворачивается   
    Вот сделал таблицу с событиями. Добавил в статью Очередь событий Delphi приложения на Android
    И получилось, что отслеживать сворачивание можно по:
    OnSaveState
    aeWillBecomeInactive
    EnteredBackground
    Разворачивание:
    WillBecomeForeground

  12. Like
    Major отреагировална Andrey Efimov в Остановить таймер, когда приложение сворачивается   
    Не совсем, если отслеживать все возможные варианты сворачивания приложения (включая выход из приложения), то лучше использовать:
    TApplicationEvent.EnteredBackground
    Для отслеживания разворачивания приложения достаточно:
    TApplicationEvent.WillBecomeForeground
     
    aeBecameActive и aeWillBecomeInactive отрабатывают только в определённых случаях.
     
    p.s. Надо табличку оформить, чтобы было понятно, когда и для чего могут понадобится те или иные события.
  13. Like
    Major отреагировална Andrey Efimov в Остановить таймер, когда приложение сворачивается   
    Очередь событий Delphi приложения на Android Жизненный цикл мобильного приложения
  14. Like
    Major отреагировална krapotkin в Остановить таймер, когда приложение сворачивается   
    https://community.embarcadero.com/blogs/entry/handling-ios-application-events-39450
  15. Like
    Major отреагировална Andrey Efimov в Настройки IDE Delphi   
  16. Like
    Major отреагировална Равиль Зарипов (ZuBy) в TColorAnimation вообще работает с кнопками??   
    ну вот, я вам ответил в предыдущем сообщении почему так происходит
  17. Like
    Major отреагировална Равиль Зарипов (ZuBy) в TColorAnimation вообще работает с кнопками??   
    TintColor не во всех стилях есть, в дефалтном на Windows точно нету.
    на какой платформе тестите?
  18. Like
    Major отреагировална Andrey Efimov в Разные ориентации форм в одном проекте [Android]   
    Посмотрите пример по вашей задаче:
    C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\Multi-Device Samples\User Interface\Forms
  19. Like
    Major отреагировална Равиль Зарипов (ZuBy) в Что лучше: зашивать в ресурсы или Deployment? (Android)   
    мы в чатике провели небольшое расследование.
    получилось что ресурсы на мобильных (на андроиде точно) сделаны для совместимости кода, т.к. даже если вы добавите в ресурсы файл, он все равно окажется в деплойменте
    и доступ будет и через TResourceStream и по пути.
    тест был такой
    1) Новый проект
    2) Project - Resources and Images
    3) добавляем файл (camera_1x.png) 

     
     
     
     
     
     
     
     
     
     
    4) компилируем на андроид устройство
    5) проверяем оба варианта
    procedure TForm1.Button1Click(Sender: TObject); var ResourceStream: TResourceStream; begin ResourceStream := TResourceStream.Create(hInstance, 'camera', RT_RCDATA); try ResourceStream.Position := 0; Image1.Bitmap.LoadFromStream(ResourceStream); finally FreeAndNil(ResourceStream); end; end; procedure TForm1.Button2Click(Sender: TObject); begin Image1.Bitmap.LoadFromFile(TPath.Combine (TPath.GetDocumentsPath, 'camera_1x.png')); end; в deployment'е наш файлик

  20. Like
    Major отреагировална Равиль Зарипов (ZuBy) в System.StartUpCopy   
    из деплоймента вытаскивает файлы в нужные папки, не трогайте этот модуль
  21. Like
    Major отреагировална krapotkin в TTask опасен (Android)   
    вообще имхо плохой вариант делать анимацию через поток и sleep
    в данном случае я бы лучше наверное разделил анимацию на нужное кол-во ступеней и просто в таймере запускал их
    смысл абсолютно тот же ибо доп. поток будет работать только на Sleep, все остальное все равно происходит в главном
  22. Like
    Major отреагировална Andrey Efimov в TTask опасен (Android)   
    Правило: Обращение к любому визуальному компоненту в потоке только через
    TThread.Synchronize
  23. Like
    Major отреагировална kami в TTask опасен (Android)   
    А там что? Обращение к визуальным компонентам?
  24. Like
    Major отреагировална Равиль Зарипов (ZuBy) в Таскать TLayout по форме (Windows)   
    HitTest := true стоит?
  25. Like
    Major отреагировална rareMax в TNetHTTPClient, php и select   
    Целый раздел с примерчиками: http://fire-monkey.ru/forum/130-json/
×
×
  • Создать...