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

Вадим Смоленский

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

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

  • Посещение

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

    5

Сообщения, опубликованные Вадим Смоленский

  1. Платформа Windows, это обозначено в теме, разве не видно? Сам работаю на семерке, если это важно.

    Пытался воспроизвести проблему в голом виде, убрав всё лишнее - отчего-то не получилось. Подумал, что проблема может быть известной, поэтому описал словами. Наверное, нужно все-таки постараться воспроизвести.

  2. Использую TWebBrowser для вывода контекстной справки в специальном окне. При этом размеры TWebBrowser и его расположение на окне могут меняться в зависимости от режима. Наблюдается следующая странность: размеры и координаты TWebBrowser при первом выводе где-то запоминаются, и при смене режима, наряду с исправно отрисованным на новом месте TWebBrowser, на старом месте красуется белый прямоугольник, закрывающий все прочие контролы.

    Я уже прочитал в других вопросах форума, что TWebBrowser, будучи нативным компонентом, рисуется поверх других. Это бы ладно. Но когда поверх других рисуется мертвый белый фантом - это уже как-то чересчур. Есть ли способ это явление забороть?

  3. Похоже, никто не знает, что с этим делать. Пришлось мне опять прибегнуть к лобовому решению - попиксельно менять черный цвет на синий. Не очень элегантно, но надежно.

    Отмечу, что в случаях, когда монохромный битмэп не задействован, ReplaceOpaqueColor работает исправно и очень выручает.

  4. Клавиша пробела в Windows по умолчанию работает как акселератор кнопки, на которой фокус. Я в своем проекте использую пробел для других целей, и эту фичу мне нужно подавить. В VCL я перехватывал нажатие пробела в обработчике события TForm.OnKeyDown - устанавливал там флаг, который потом блокировал запуск содержимого TButton.OnClick. В FireMonkey, однако, TButton.OnClick запускается по нажатию пробела, не дожидаясь TForm.OnKeyDown. Как теперь быть?

  5. В установках Berlin (Options -> Editor Options -> Display) есть опция "Zoom to full screen". В старых версиях Delphi она прекрасно работала и была удобной - я много лет работал на шестой, привык. Нужно тебе плотно поработать с кодом - ткнул в квадратик, и весь экран твой. Теперь же никакого квадратика в правом верхнем углу не наблюдаю, вижу лишь крестик и галочку. Не туда смотрю? Как развернуть редактор кода на весь экран?

    Или, может, эта опция теперь ограничена режимом Classic Undocked?

  6. У TBitmap есть метод ReplaceOpaqueColor, заменяющий все непрозрачные цвета на один новый, передаваемый параметром. Не могу до конца понять, как он определяет на изображении прозрачный цвет, который должен остаться прозрачным. У меня на форме хранится большой невидимый TImage с черно-белым битмэпом, из которого я беру отдельные фрагменты посредством DrawBitmap и вывожу их на маленькие TImage. Иногда мне нужно организовать цветовое выделение - то есть, например, заменить черный цвет на синий, а белый оставить белым. В этом случае как раз и помогает ReplaceOpaqueColor(claBlue): почему-то белый цвет в монохромном битмэпе он трактует как прозрачный, не меняя его. Но вот парадокс: если я предварительно заменю в исходном большом битмэпе все белые пиксели на $00000000 (то есть, как я понимаю, nil, полностью прозрачный цвет), то ReplaceOpaqueColor ведет себя противоположным образом: он меняет этот прозрачный на синий, а черный не трогает! Очень бы хотелось понять, отчего так происходит и как с этим можно бороться.

    И шире: не ломлюсь ли я в открытую дверь? Может, в FMX есть какие-то более простые и мощные способы динамично преобразовывать цвета на TImage, просто я их не обнаружил?

  7. Компонент TScrollBox в VCL имеет свойства VertScrollBar и HorzScrollBar, каждое из которых, в свою очередь, снабжено свойством Increment, определяющим количество пикселей, перемещаемых при нажатии на кнопку прокрутки. В FMX я ничего похожего найти не смог. Есть ли способ поменять принятые по умолчанию установки?

  8. Мобильных приложений я пока не делаю и едва ли буду. Только Windows, в ближней перспективе Mac.

    А что, лучше формы создавать динамически, по мере надобности, и уничтожать всякий раз, как пользователь их закрывает? Так это ведь, наверное, имеет смысл лишь для тех форм, которые заведомо будут открываться редко и ненадолго - окна настроек и т.п. Такие формы обычно не так уж и прожорливы в плане ресурсов.

  9. TSpeedButton в старых версиях Delphi можно было снабдить четырьмя иконками (все хранились как одно изображение в свойстве Glyph) для четырех состояний кнопки: 1) неактивна, 2) активна, 3) нажата, но не отпущена, 4) остается нажатой. Я активно пользовался этой функциональностью, но сейчас ее поддержки не вижу. Теперь, судя по всему, всё делается через TImageList. Возникает два вопроса.

    1. Как наилучшим образом реализовать описанную функциональность в FMX? Должен ли я расписать всё в коде через смену ImageIndex, или же существуют некие опции, которых я не разглядел? А может быть, появились какие-то новые способы (через эффекты, фильтры и т.д.) визуально подчеркнуть состояние кнопки? Мне всего-то и нужно, что менять цвет одноцветного символа на кнопке (серый, черный, фиолетовый, красный).

    2. Растровое изображение, подгруженное из TImageList, автоматически масштабируется по размерам контрола и выглядит слегка размытым. Мне же хотелось бы видеть на кнопке оригинальный битмэп в исходных размерах, с четкими линиями. Есть ли способ отключить масштабирование?

  10. А вот, придумался не очень элегантный, но надежный вариант. Процедуру FormShow переименовал в JustBeforeFormShow и вызываю ее не как обработчик события OnShow, а чуть раньше, из обработчика события OnCreate одной из мелких форм, которая создается самой последней. Всё теперь красиво.

    Спасибо коллегам за высказанные мысли. Полагаю, именно они меня и натолкнули на верное решение.

  11. а почему не подготовить все что нужно в FormCreate 

    Теоретически можно, конечно. Но слишком много чего придется перестраивать. Окон создается много, юниты ссылаются друг на друга, логичнее начинать рисование, когда всё создано. Вот и хотел узнать, нет ли какого-то простого решения.

    А показывать сплэш поверх всех элементов до момента полной отрисовки не вариант?

    Ну, наверное, один из вариантов. Разве что не очень изящный.

  12. Перевожу большой проект из VCL в FMX. В ходе запуска на главном окне много чего рисуется и выравнивается; соответствующий код записан в FormShow. Пока всё не отработало, показывается заставка, splash window. В конце, как и положено, запускается Application.Run, на экране появляется готовая главная форма, а заставка убивается Под VCL всё это выглядело именно так. Под FMX же главная форма выводится на экран в самом начале отрисовки, вместе с заставкой, и пользователь вынужден наблюдать всю отрисовку в режиме реального времени, с мельканиями и дерганиями. Как подавить этот преждевременный вывод?

  13. Похоже, изящного решения все-таки нет. Но ничего страшного. Я попробовал рисовать все линии попиксельно - получается и красиво, и быстро. Миллион операций SetPixel между Map и Unmap выполняются без сколько-нибудь ощутимой задержки.

  14. Пытаюсь провести на канве TImage тонкую черную линию методом DrawLine. Линия выходит размытая и скорее серая, чем черная. А мне она нужна четкой и черной, шириной ровно в один пиксель. Как этого добиться? Пробовал установить для формы Quality=HighPerformance - никакого эффекта. Да и не надо мне это для всей формы - на других TImage наоборот антиалиасинг понадобится. Нужно его заблокировать для одной-единственной канвы. Но как?

×
×
  • Создать...