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

Barbanel

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

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

  • Посещение

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

    36

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

  1. Like
    Barbanel отреагировална Евгений Корепов в Работа с атрибутами текста   
    Век живи, век учись. Спасибо, не знал о такой возможности. Поигрался в тестовом проекте - все действительно работает.
  2. Like
    Barbanel отреагировална slav_z в TMemo для вывода лога тормозит   
    да не...  я лучше выложу так..  пилите сами... там не долго все это добавить...
    класс от TFrame. там не TLayout а TText чтобы можно было настраивать шрифт в designtime.
    короче ничего сложного.
    LogViewSource.zip
  3. Like
    Barbanel отреагировална Nick Peterson в TMemo для вывода лога тормозит   
    специально же приписал в конце, зачем:))
    Вопрос конечно же не в том, "как сделать TMemo на 100 000 строк"
    Вопрос в том, почему TMemo на 100 000 строк так сильно лагает.
    TMemo на 1000 стрк тоже лагает, просто не так сильно, чтобы показать это наглядно на скрине, я не знаю как наглядно аргументировать пост на форуме "TMemo на 1000 строк лагает". В приложении это чувствуется по отзывчивости UI как микрофризы. Они частично лечатся выкидыванием кода как на скрине выше.
    Именно с этими микрофризами я пытаюсь бороться, при этом сохранив возможность видеть лог в виде текста (почему не в БД? потому что запись в БД ведется параллельно, она не лагает и с ней вопросов нет. Но нужно еще и дать пользователю видеть все последние события и иметь возможноть отмотать выше на N-Ное время для сравнения, и вот в этой части как раз вопросы есть).
    А вот мемо на 100 000 лагает так, что это прекрасно видно на графике загрузки ЦПУ, я считаю что это не нормально, поскольку такое же видновое мемо ведет себя совершенно иначе. Значит, это возможно , парням из майкрософта удалось это сделать!:)) Интересно, как...
  4. Like
    Barbanel отреагировална GASCHE в C наступающим Новым Годом!   
  5. Like
    Barbanel отреагировална Brovin Yaroslav в С днем рождения Андрей Ефимов ???   
    Хочу от всей души поздравить с днем рождения нашего модератора Андрея Ефимова @Andrey Efimov. Человек, на которого можно положиться и который всегда готов прийти на помощь. Из года в год помогает нашему форуму становиться лучше. 
    С днем рождения! Успехов тебе в работе, в личных делах. И не забывать про Делфи!
  6. Like
    Barbanel отреагировална d7d1cd в Компоненты вкладки с другой формы/фрейма   
    Применил программно стиль, используя код Ярослава, но не до (как советовал Barbanel), а после назначения родителя фрейму (иначе все равно тормозит). То есть, добавил вкладку в табконтрол (метод Add), создал динамически фрейм, назначил ему родителем созданную вкладку и применил стиль ко всем компонентам, начиная с фрейма. Если открыть приложение и выбрать из списка задачу, то теперь при открытии "окна" этой задачи наблюдается незначительная не плавность появления (гораздо меньше, чем до использования предварительной загрузки стиля). Возврат на "экран" со списком задач происходит плавно. И если снова выбрать задачу, то ее "окно" уже появляется без тормозов.
    То есть, первая смена вкладок с момента запуска приложения чуть-чуть подтормаживает. Затем все работает плавно. Пробовал заранее применять стиль ко всему табконтролу и его содержимому, но это не помогло.
  7. Like
    Barbanel получил реакцию от Равиль Зарипов (ZuBy) в Сервер с SSL на Android   
    Поправка.
    Indy из коробки не работает с SSL на андроиде выше 6.0
    Нужно скачать библиотеки (блин, не помню откуда, но они у меня есть или легко гуглятся) и подключить их к проекту.
    Но лучше инди не использовать, лучше использовать TNetHttp, он позволяет уйти от проблем в будущем (например проблема с ipv6 для Apple-девайсов).
  8. Like
    Barbanel получил реакцию от Anatoliy в Компоненты вкладки с другой формы/фрейма   
    У нас было аналогично, под Андроидом наблюдались микрофризы, а под Виндовс все выглядело гладко.
    Возможно производительности ПК под Виндовс с лихвой хватает, а под Аднроидом ощущается нехватка скорости/оптимизации.
    Я думаю тут Ярослав мог бы дать ответ.
  9. Like
    Barbanel получил реакцию от d7d1cd в Компоненты вкладки с другой формы/фрейма   
    Возможно: рывок происходит от того, что при смене владельца контролы отрисовываются первый раз (первый, это важно) на табконтроле.
    В момент первой отрисовки (емнип) компоненту создается и присваивается стиль, что ессно занимает некоторое время. При повтороной отрисовке стиль уже создан, потому все происходит быстро.
    Повторюсь, это мои догадки.
    Чтобы побороть именно этот случай, нужно компонентам заранее присваивать стиль программно, до первой отрисовки, т.е. до того как вы меняете родителя.
    Либо (я так не пробовал, не знаю сработает ли) отрисовать компоненты куданить в буффер, или в скриншот (или прямо на текущем родителе). Не уверен что это хороший вариант, пусть коллеги меня напинают).
    Мы в своем проекте все эти контролы расположили прямо на табах главной формы. Немного дольше длится первая загрузка, а потом все работает довольно плавно.
  10. Like
    Barbanel получил реакцию от d7d1cd в Компоненты вкладки с другой формы/фрейма   
    У нас было аналогично, под Андроидом наблюдались микрофризы, а под Виндовс все выглядело гладко.
    Возможно производительности ПК под Виндовс с лихвой хватает, а под Аднроидом ощущается нехватка скорости/оптимизации.
    Я думаю тут Ярослав мог бы дать ответ.
  11. Like
    Barbanel получил реакцию от dnekrasov в Компоненты вкладки с другой формы/фрейма   
    Возможно: рывок происходит от того, что при смене владельца контролы отрисовываются первый раз (первый, это важно) на табконтроле.
    В момент первой отрисовки (емнип) компоненту создается и присваивается стиль, что ессно занимает некоторое время. При повтороной отрисовке стиль уже создан, потому все происходит быстро.
    Повторюсь, это мои догадки.
    Чтобы побороть именно этот случай, нужно компонентам заранее присваивать стиль программно, до первой отрисовки, т.е. до того как вы меняете родителя.
    Либо (я так не пробовал, не знаю сработает ли) отрисовать компоненты куданить в буффер, или в скриншот (или прямо на текущем родителе). Не уверен что это хороший вариант, пусть коллеги меня напинают).
    Мы в своем проекте все эти контролы расположили прямо на табах главной формы. Немного дольше длится первая загрузка, а потом все работает довольно плавно.
  12. Like
    Barbanel получил реакцию от Anatoliy в Компоненты вкладки с другой формы/фрейма   
    Возможно: рывок происходит от того, что при смене владельца контролы отрисовываются первый раз (первый, это важно) на табконтроле.
    В момент первой отрисовки (емнип) компоненту создается и присваивается стиль, что ессно занимает некоторое время. При повтороной отрисовке стиль уже создан, потому все происходит быстро.
    Повторюсь, это мои догадки.
    Чтобы побороть именно этот случай, нужно компонентам заранее присваивать стиль программно, до первой отрисовки, т.е. до того как вы меняете родителя.
    Либо (я так не пробовал, не знаю сработает ли) отрисовать компоненты куданить в буффер, или в скриншот (или прямо на текущем родителе). Не уверен что это хороший вариант, пусть коллеги меня напинают).
    Мы в своем проекте все эти контролы расположили прямо на табах главной формы. Немного дольше длится первая загрузка, а потом все работает довольно плавно.
  13. Like
    Barbanel отреагировална Равиль Зарипов (ZuBy) в Сервер с SSL на Android   
    Indy не работает с SSL на андроиде выше 6.0, правда говорят есть библиотеки специальные, но не пробовал.
    А по существу, ВАМ необходимо создать idtcpserver, и на клиенте idtcpclient и оправить сообщение, вот собственно и ответ
  14. Like
    Barbanel отреагировална Евгений Корепов в Проигрывание стандартных звуковых эффектов Android   
    Задался вопросом, нашел ответ, может кому пригодится.
    uses Androidapi.JNI.Media, Androidapi.Helpers, Androidapi.JNIBridge, AndroidApi.Jni.JavaTypes, Androidapi.JNI.GraphicsContentViewText; .... procedure TFormMain.PlaySoundEffects(const ASoundID : Integer; AVolume : Single = 1.0); var AudioObj: JObject; Audio: JAudioManager; begin AudioObj:= TAndroidHelper.Context.getSystemService(TJContext.JavaClass.AUDIO_SERVICE); Audio:= TJAudioManager.Wrap((AudioObj as ILocalObject).GetObjectID); Audio.loadSoundEffects; Audio.playSoundEffect(ASoundID, AVolume); end; Константы звуковых эффектов тут https://developer.android.com/reference/android/view/SoundEffectConstants
    Правда у меня только звук "чпок" на всех константах. Но мне он и был нужен )
  15. Like
    Barbanel получил реакцию от Alex7wrt в Отправка кнопкой текущего приложения на задний фон в ios   
    Ну, по гайдам Эппла такая кнопка уже есть внизу по центру телефона, и ее не нужно изобретать заново.
    По гайдам, чтобы закрыть приложение нужно нажать на физическую кнопку "домой".
    Все.
    Все остальное делает ОС. Именно так, как вы описали.
    Мы тоже хотели сделать в приложении кнопку "выход", но посовещавшись отказались от нее.
     
    PS если же вам необходимо именно "выключить" приложение, чтобы оно не выполняло какие-либо действия в фоне - ловите событие перехода приложения в фон, и реагируйте соответственно.
     
  16. Like
    Barbanel получил реакцию от Dev в Изменение разрешения экрана   
    Вам нужны стили для каждого коэффициента масштабирования.
    Обычно по дефолту в стилях уже все готово (возможно вам нужно что-то настроить для своих кастомных элементов, или если ваш интерфейс в корне отличается от того что предлагают стили).
    Более ничего не нужно. Все происходит автоматически.
    Если "само" автоматически не происходит, то опишите что вам требуется и в чем именно проблема.
  17. Like
    Barbanel получил реакцию от Anatoliy в Отправка кнопкой текущего приложения на задний фон в ios   
    Ну, по гайдам Эппла такая кнопка уже есть внизу по центру телефона, и ее не нужно изобретать заново.
    По гайдам, чтобы закрыть приложение нужно нажать на физическую кнопку "домой".
    Все.
    Все остальное делает ОС. Именно так, как вы описали.
    Мы тоже хотели сделать в приложении кнопку "выход", но посовещавшись отказались от нее.
     
    PS если же вам необходимо именно "выключить" приложение, чтобы оно не выполняло какие-либо действия в фоне - ловите событие перехода приложения в фон, и реагируйте соответственно.
     
  18. Like
    Barbanel получил реакцию от Dev в Изменение разрешения экрана   
    Из-за логического масштабирования.
    Вот здесь описано про это подробнее.
  19. Like
    Barbanel отреагировална Dev в Анимированная смена форм   
    https://www.youtube.com/watch?v=YU7MlY58n9U&t=59s
  20. Like
    Barbanel получил реакцию от d7d1cd в Изменение разрешения экрана   
    Из-за логического масштабирования.
    Вот здесь описано про это подробнее.
  21. Like
    Barbanel получил реакцию от d7d1cd в Анимированная смена форм   
    Мы используем TTabControl с отключенным отображением вкладок.
    Каждая вкладка имитирует свое окно. Порядок следования вкладом можно менять на лету.
    Методы Next() и Previous() анимированно показывают следующую/предыдущую вкладку.
  22. Like
    Barbanel отреагировална dnekrasov в Перевод VCL приложения на FMX. Подводные камни, стоит ли?   
    Хм. Сорри. Проблема есть. Но только на дефолтном стиле. Если загрузить какой-то стиль - проблема исчезает. Так что проблема не в FMX а в дефолтном стиле.
  23. Like
    Barbanel отреагировална Slym в Артефакты на экране (Android)   
    Боролись как-то с артефактами отображения (мы их прозвали "крокодилами" из-за сходства на первом скриншоте с этим багом)...
    Могли отображаться также левые спрайты, или обрезки скролившихся контролов...
    Коллега выяснил что не надо трогать Form.Fill, из-за переключения в недрах FMX нативной и не нативной канвы: если нужен фон - брось Rect по контенту и в нем делай заливку...
  24. Like
    Barbanel отреагировална Nick Peterson в Перевод VCL приложения на FMX. Подводные камни, стоит ли?   
    По итогу месяца работы на FMX хочу сказать - это глюкодром адский!:)) Вернулся бы обратно на VCL, но жаль потраченного месяца работы :))
    Несколько моментов, может кому будет интересно, кто пойдет по этому пути перевода проекта с VCL:
    1) рисование в буфере перед выводом на PaintBox (знаю что не обязательно, но именно в моей проге нужно, разные куски картинки готовятся в разное время)
    Инфы в одном месте не найти. Даже на этом форуме она не полна и в одном месте ошибочна:)
    XScale := GetWndScale(FormToHWND(OwnerForm)); // только так! Другие методы получения Scale не работают при // перетаскивании проги на другой монитор. w:=trunc(XScale * Image.Width); h:=trunc(XScale * Image.Height); // при перетаскивании на второй мониторе с другим масштабом Image.Width и Image.Height могут станут неверными. // Помогает только пересоздание хэндла формы (баг) If (bm.Width<>w) or (bm.Height<>h) then bm.SetSize(w,h); bm.Canvas.BeginScene; bm.Canvas.SetMatrix(TMatrix.CreateScaling( XScale, XScale) * Matrix); 1.1) Как нарисовать линию толщиной 1 пиксель? Этот простой вопрос отнял у меня пол дня:) Пришлось править код FMX.Canvas.D2D, по-другому никак не отключить антиалиасинг в битмапе. На форме его можно отключить свойством Quality, вот только его значения перепутаны - HighQuality на самом деле означает худшее качество с размытой графикой.
    Даже после отключения AA нужна еще 1 хитрость - чтобы линия (горизонтальная или вертикальная) получилась толщиной ровно 1 пиксель,  у меня получился примерно такой код
    procedure TCanvasHelper.LineToPix(xFrom, yFrom, xTo, yTo, Opacity: single); var pFrom, pTO: TPointF; xs: single; begin xs := Max(1, Matrix.m11); If xs > 1.1 then begin pFrom := PointF(xFrom, yFrom).Round; pTO := PointF(xTo, yTo).Round; end else begin pFrom := PointF(round(xFrom) + 0.5, round(yFrom) + 0.5); pTO := PointF(round(xTo) + 0.5, round(yTo) + 0.5); end; Stroke.Thickness := 1/xs; DrawLine( pFrom, pTO, Opacity); end; 2) Шрифты. Это жуть!:) Впрочем об этом пишут везде.
    Заставить в D2D канве (винда) работать ClearType не удалось
    (хотя при рисовании в битмапе как написано выше он у меня заработал, путем очередной правки FMX.Canvas.D2D. Надо еще отметить, что править системные коды я никогда не любил, и на VCL приходилось всего 1 раз, тут же у меня исходники очень быстро лишились девственности:))
    2.2) Шрифты и так выглядят не очень, но еще круче их портит свойство TAlign.Scale, из-за которого позиции контролов принимают не целые значения. Просто киньте на форму пару Label'ов с TAlign.Scale , запустите и начните медленно растягивать, наблюдая как мерцают и размыливаются буковки:))
    Вообще по итогу шрифты оказались самым неприятным моментом, все остальное кое-как правится, кроме внешнего вида приложения с замыленными шрифтами... (отключать D2D канву не предлагать!)
    Почему не доделали SetTextRenderingParams в FMX.Canvas.D2D.pas, почему не работает SetTextAntialiasMode - для меня пока загадка.
    3) Сворачивание приложения кликом по таскбару. Оно не работает:) (Почему за столько лет существования FMX никто этого не заметил? всем плевать, или никто не пользуется?) Да, на форуме есть пара решений, но они не идеальны, если у вас внимательные юзеры, они обязательно заметят странное мелькание приложения при разворачивании. Очередная правка системных кодов.
    4) FMX.TrayIcon.Win - штатного нет, но код выложенный на этом форуме работает идеально. Респект его автору. С ужасом думаю, что буду делать на MacOS..:)
    5) Если в TEdit нажать CTRL-V при пустом буфере, вылезает AV:) Правится не сложно, но блин, очередной системный юнит легко лишился девственности:))
    6) Выделение дабл-кликом на TEdit не работает..... (10.3) Хорошо что FMX.Edit.pas уже лежит в папке с проектом, долго искать не пришлось:))
    7) А на этот с виду несложный вопрос я так и не нашел ответа..
     
  25. Like
    Barbanel получил реакцию от Anatoliy в Сеть и энергосбережение   
    Писать сервис.
    Примеры были кажется даже на этом форуме.
×
×
  • Создать...