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

Nick Peterson

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

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

  • Посещение

Весь контент Nick Peterson

  1. Всем привет! Как известно, FMX сама не может справится с ошибками dxgi Что я пытался сделать: 1) в FMX.Canvas.D2D ведем список Canvases: TList<TCanvasD2D>; 2) после получения ошибки пытаемся пересоздать ресурсы таким образом procedure ResetDxEngine; var c: TCanvasD2D; begin for c in Canvases do c.DisposeResources; TCanvasD2D.DestroySharedResources; TCanvasD2D.CreateSharedResources; for c in Canvases do c.CreateResources; end; Это не срабатывает, канва перестает что-либо рисовать. Что я упускаю? (Сознательно сократил коды чтобы передать максимально суть вопроса - как правильно пересоздать DirectX объекты и интерфейсы?)
  2. Несколько тем похожих, но ни в 1 нет ответа:) Как сделать скриншот формы в физическом разрешении? TForm.PaintTo к сожалению рисует в логическом
  3. Проблема в коде FMX, который не способен справится с нестандартным железом. P.S. Если только у вас масштаб в винде не 100%, тогда возможно у вас просто смещение неверно задано ( +1 не равно 1 физ. пикселю) Проверьте 3 варианта (просто напишите в dpr файле). Как минимум в одном из них у вас будут глюки, тогда зайдите на quality.embarcadero.com и опишите глюк, если не затруднит. Никто этого не делает, воз и ныне там, в новых релизах глюков только больше GlobalUseGPUCanvas := false; // true - проверить так и сяк GlobalUseDirect2D := true; // false - проверить так и сяк Application.Initialize;
  4. Можно, прикладываю. Поставьте в еврике (или FastMM или чем вы пользуетесь?) опцию "Fill released memory with non-zeroes" чтобы сразу увидеть баг. И этот баг - один из множества подобных. И не только подобных)) Если вам никогда не приходилось использовать эврику или другую систему отладки, для вас почти все будет хорошо. Проблемы не видно - значит ее нет:))) "Почти" - потому что, к счастью, FMX дарит и такие глюки, которые видно явно и сразу. Например, ELGridBug.zip
  5. Узнаю в Вас сотрудника Embacaderro, как раз такой подход им и нужен. Кейс заключается вот в этом коде procedure TStyledGrid.HideEditor(const Accept: Boolean); {....} if FInplaceEdit <> nil then FreeAndNil(FInplaceEdit); После которого работает TControl.DoDeactivate с уже удаленным объектом.... Ваш коллега действовал так: - Метод Release больше не используем - да шеф! CTRL-R, Release, Free. - а подумать? - а ну нафит. за подумать тут не платят
  6. Интересно, как вам удается не замечать очевидных багов. Например такой: киньте TStringGrid. Запусти, нажми в ячейку, смени фокус. Наблюдай AV:))) Не видите такого? (P.S. это один из многих, а именно около 25 примеров, известных мне, что там может глючить)
  7. Ошибаетесь в части "вместо действий" Действие тут возможно - зайти на quality.embarcadero.com и описать баг, что я и делаю по мере сил и возможностей. Некоторые баги сами по себе занимают тонну времени, чтобы их найти и описать минимальное демо, например ваш про пошаговое подвисание - у меня такое бывает в Win64 приложении тоже, примерно раз на 100 запусков. Помогает перезапуск студии, даже не представляю, как это отлаживать. А еще последнее время студия (10.2.3) сама собой вылетает, без AV без ничего, просто снимается процесс)) Обычно в начале работы бывает, если первые 10 минут не вылетела то дальше все норм.
  8. так о том и речь вопрос в том, как уволить из embarcadero сотрудников с таким подходом "у меня все гут, значит проблем нет, можно пускать в релиз"
  9. Да хоть два 1) см. первое сообщение этой темы 2) Прикладываю. Угадайте, что на скрине? (подсказка: это панель с TBevelEffect) BevelBug.zip
  10. С одной поправкой - только если железо такое же, как у разработчика FMX
  11. Так а что там читать, просто напишите в dpr файле GlobalUseGPUCanvas := false; GlobalUseDirect2D := true; Application.Initialize; Полагаю, что это не поможет, тогда попробуйте так GlobalUseGPUCanvas := false; GlobalUseDirect2D := false; Application.Initialize; Если это поможет, то дальше надо лезить в исходники FMX.Canvas.D2D.pas ...
  12. А не смущает заливка формы на Вашем скрине? Поздравляю, FMX на вашей системе нормально работать не будет (у моих пользователей так бывает, единственное решение которое я нашел - играть с GlobalUseDirect2D := false). Еще нужно обновить драйвера видяхи, но думаю Вы это и так сделали GlobalUseGPUCanvas тоже может помочь, но вызывает столько новых багов, что лучше не пробовать даже. А так, вообще, если у вас видяха такая же, как у разработчика FMX, то ничего не троит procedure TForm24.Timer1Timer(Sender: TObject); begin Circle1.Position.X := Circle1.Position.X + 1; Circle1.Position.Y := Circle1.Position.Y + 1; end;
  13. Теперь уже я удивляюсь Последний - ну настолько дикий, достаточно всего лишь иметь грид и эврику, и его сразу видно. Просто кинули грид, и вот тебе AV, без единой строчки кода. Существует в 10.2 , в 10.3 в одном месте пофиксили, в другом вылезло))) Платформу делали китайцы за еду натурально, так торопились сдать поскорее и получить паек. Для меня вывод однозначен - очень мало в серьёзных проектах FMX использует, настолько мало, что на quality.embarcadero.com их не видно. Для других, кто пойдет этим путем (перевод приложения с VCL) просьба-совет - Пожалуйста, репортите баги на quality.embarcadero.com, хоть небольшой шанс улучшения ситуации
  14. Что-то пошло не так:) Куда копать? (вдруг кто взглянет на картинку и поймет, мала вероятность конечно, но а вдруг?:)) Затрудняюсь придумать тест кейс для такого. Обычная менюшка, просто на машине одного юзера почему-то не работает. ))
  15. Да тут баг на баге сидит и погоняет Вот еще в духе этой темы: грид, лайвбиндинг.В Grid1HeaderClick выполняем обновление запроса (например, для сортировки). После этого форма перестает реагировать на мышь)) Уже впадлу багрепорты писать, штук 15 настрочил наверное а то и больше Решил пока через таймер...
  16. И как сделать теперь колонку с кнопками?:))
  17. Спасибо @slav_z за идею, чуть допилил выделение и контекстное меню, еще бы прикрутить CTRL-C грамотно:) Впрочем уже и так отлично FastMemo.zip
  18. Ну мое дело предложить:) Посмотрел, в первом приближении то что надо !,Ок, выделение по буквам не нужно, но нужно: 1) выделение при удержании мышки и движении вверх (скроллится должно выше и продолжать выделение) , и так же вниз 2) контекстное меню Copy и CTRL-C Это влезет в 100?)) компонент нужен как класс для рантайма
  19. Да только перечитайте эту тему, мне надо чтобы в компоненте можно было выделять и копировать текст. Т.е. по сути нужно Memo)) только быстрое
  20. метод Release создавал новый поток для каждого удаления, что как бы не очень правильно. Я сделал костыль через список объектов на удаление + таймер
  21. Затрудняюсь даже правильно сформулировать вопрос:)) Т.к. проблема приходит мне только в отчетах Эврики, повторить пока не удается. Вижу что основной поток (виндовое FMX приложение) виснет где-то в дебрях драйверов, callstack может начинаться на MouseClick (как в примере ниже, тут юзер вызвал контекстное меню) или WM_Paint (в таких случаях вообще ничего не понятно, в колстеке только системный код). На данном скрине приложение зависло. Намертво. Без всяких подозрительных действий со стороны юзера или подозрительных участков моего кода, т.е. похоже что все плохое случается просто при отрисовке формы. Собственно вопрос расплывчатый - куда рыть? кто-нибудь сталкивался? А тут скрин целиком не влезает, разбиваю на 2 В этих двух случаев одно общее - виснет намертво при получении виндового сообщения, различается только класс канвы (аппаратный и программный). Таких примеров полно, т.е. это не просто 2 случая, где-то в среднем на 100 пользователей 1-2 столкнутся с таким зависанием. Еще 1 пример:
  22. Благодарю! Осталось дописать выделение и копирование текста, и быстрое мемо готово. Странно только, что в Embarcadero еще не сделали этого, наверное слишком заняты новыми темными темами для IDE. P.S. Готов заплатить за такой компонент 100$
  23. Магия указателей?:))
  24. Позвольте не согласиться:) Виндовое мемо работает в 12 раз быстрее, что видно на моих скринах, используя так же только процессор (на виртуалке где я делаю тесты, видяхи нет). Ага, тоже об этом подумал уже:) Обычный файл + блокнот:) Оставлю это как запасной вариант, но все же тешу себя надеждой, что существует возможность сделать быстрое мемо в FMX, не прибегая к костылям!
  25. Очень редко, не у всех пользователей но все же появляется ошибка в этом месте function TCanvasD2D.DoBeginScene(const AClipRects: PClipRects; AContextHandle: THandle): Boolean; var Res: HResult; begin Res := SharedDevice.GetDeviceRemovedReason; if Res <> S_OK then begin LastDeviceRemovedReason := Res; // <-- 0x887A0006 HandleDeviceRemoved; Exit(False); end; Как мне кажется, это связано с использованием TBitmap.Map, но могу ошибаться. Повторить у себя не удается, вижу только в логах пользователей. После появления такой ошибки все контролы перестают нормально рисоваться, помогает только перезагрузка. Никто не сталкивался?
×
×
  • Создать...