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

Пользователи
  • Публикаций

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

  • Посещение

Информация о Вадим Смоленский

  • Звание
    Продвинутый пользователь
  1. Окно на весь экран и кнопка "Закрыть все окна"

    Наткнулся на странное поведение FMX-приложений под Windows. Если развернуть окно приложения на весь экран, потом воспользоваться системной кнопкой "Свернуть все окна" (в правом нижнем углу экрана) и после этого опять вызвать окно приложения, то оно выводится уже не развернутым, а обычным. Появились недовольные таким поведением пользователи. Можно ли их чем-нибудь утешить?
  2. Запуск под Linux в Wine

    Это в планах, но не в первоочередных - равно как и Mac. Я даже не подступался еще к этим вопросам. Но пользователи хотят запускать уже сейчас, хотя бы через эмулятор.
  3. Запуск под Linux в Wine

    Когда мое приложение для Windows компилировалось в Delphi 6, линуксоиды успешно запускали его в Wine. Рапортовали, что неидеально, но работать можно. Теперь, после перевода на FireMonkey, один тестировщик попробовал запустить его в Wine 3.0 и сообщает: "Результат неутешителен - программа в нём практически не работает. Интерфейс сломан, кнопки интерфейса не нажимаются (в большинстве; а если и нажимаются, то возникают всякие ошибки)." Не сталкивался ли кто-нибудь здесь с этой проблемой? Я тихо надеюсь, что существует некая волшебная кнопка, которая поможет всё наладить. Приложение использует FireDAC и SQLite. Сторонних компонентов никаких.
  4. Вертикальное смещение юникодных шрифтов

    Отвечаю сам себе: да, есть такой способ! У TPathData есть метод GetBounds: if TextToPath(PD,DestRect,TheKanjiString,False,TTextAlign.Leading,TTextAlign.Leading) then begin W:=(Width-PD.GetBounds.Width)/2; H:=(Height-PD.GetBounds.Height)/2; PD.Translate(X+W-PD.GetBounds.Left,Y+H-PD.GetBounds.Top); FillPath(PD,1); end; Теперь всё красиво:
  5. Вертикальное смещение юникодных шрифтов

    Впрочем, не всё так гладко. Вот, например, как теперь выводится иероглиф "Единица", состоящий из одного-единственного горизонтального штриха: А по идее, он должен быть всё-таки в середине. Так что, наверное, оставлю этот подход лишь для тех случаев, когда используется шрифт, которого нет в списке предусмотренных. Хотя, может, есть способ вытащить откуда-то из TPathData информацию о реальных размерах символа и, исходя из нее, смещать его туда-сюда? Было бы замечательно.
  6. Вертикальное смещение юникодных шрифтов

    FillText с Offset, к сожалению, не срабатывает, иероглиф смещается по вертикали. Стало быть, приму вариант с FillPath. Спасибо!
  7. Вертикальное смещение юникодных шрифтов

    Я и рад бы это опробовать но не понял, куда именно нужно вставлять такое смещение в случае FillText. А вставка PD.Translate помогла, теперь иероглиф надежно прилепляется к левому и верхнему краям. Хорошо бы еще научиться выравнивать его, чтобы он не лепился к этим краям, а вставал бы в середину указанного прямоугольника. Не приходит пока в голову, как это сделать.
  8. Вертикальное смещение юникодных шрифтов

    Спустя три недели все-таки решил опробовать ваш вариант с TPathData, а то тестировщики продолжают жаловаться. Сделал, не задействуя TPathLabel, вот так: with ThisImage.Bitmap.Canvas do begin PD:=TPathData.Create; BeginScene; try if TextToPath(PD,RectF(X,Y,Width-1,Height-1),TheText,False,TTextAlign.Leading,TTextAlign.Leading) then FillPath(PD,1); finally PD.Free; end; EndScene; end; Увы, результат ровно тот же, с нежелательными вертикальными смещениями.
  9. Как в Windows определить, что на компонент был опущен палец?

    Я буквально позавчера задался здесь этим вопросом, и меня просветили: в обработчиках таких событий, как OnMouseDown или OnMouseUp нужно проверять параметр Shift. При нажатии пальцем он приобретает значение [ssTouch].
  10. Aero-тема в Windows 7

    Один тестер моего проекта (один изо всей команды!) поставил меня в полный тупик. У него Windows 7, и он запускает приложение на разных компьютерах, выбирая разные темы - то с Aero, то без. Почему-то приложение выглядит у него прилично лишь при запуске с Aero; при запуске же с базовой темой наблюдаются искажения отрисовки и функциональные нарушения. А на одном компьютере с Aero-темой приложение может не запуститься вовсе: например, если установлено системное масштабирование шрифтов 135%. Тогда при запуске появляется сообщение об ошибке в модуле ntdll.dll. Не мог бы кто-нибудь разъяснить, как установка темы связана с параметрами Windows API? Можно ли как-то нивелировать эту разницу? На что вообще в таких случаях нужно обратить внимание?
  11. Windows на сенсорном экране и события мыши

    Ну, допустим, в обработчике OnMouseMove это можно сделать. Но что мне делать, например, с обработчиком события OnMouseEnter, по которому для некоторых контролов тоже выводится кастомизированная всплывающая подсказка? На планшете эту подсказку мне нужно подавить, но параметр Shift здесь не передается - следовательно, ваш совет уже не применим.
  12. Windows на сенсорном экране и события мыши

    Я наоборот перевел весь свой огромный многолетний проект с VCL на FMX, потому что хочу в перспективе портировать его на Мак и, может быть, на Линукс. Мобильных платформ не трогаю, для них уже есть версии. Что до системных функций, то предусмотрены ведь всякие {$IFDEF MSWINDOWS}, с ними, по идее, можно исхитряться. Хотя я, конечно, понимаю, что при реальном портировании всё будет гораздо сложнее, чем сейчас видится.
  13. Windows на сенсорном экране и события мыши

    В ходе дальнейших штудий и экспериментов пришел к следующему. Определить, что программа запущена на устройстве с сенсорным экраном, можно так: function IsTabletPC: Boolean; begin result:=(GetSystemMetrics(SM_TABLETPC)<>0); end; Когда это определено, нужно присвоить всем OnMouseMove:=nil (кроме тех, где это все-таки нужно - например, связанных с перетаскиванием или рисованием). В моем случае это подавило непрошенные всплывающие подсказки при нажатии пальцем. События OnMouseDown и OnMouseUp все-таки отрабатываются, но есть нюанс с параметром Shift. У меня в коде кое-где проверялось условие Shift=[]. На планшете это отчего-то не срабатывает, что-то там иное передается (что именно, не знаю, планшет был не у меня, а у тестера). Я переписал код, избегая этих проверок, и теперь всё прекрасно работает. Еще один момент был связан с проверкой Button=TMouseButton.mbLeft: на всякий случай я везде добавил or (IsTabletPC). Просто не был уверен, что палец целиком эквивалентен левой кнопке. Не знаю, как там на самом деле обстоит дело. В общем, обошелся без события OnTap. Плохо понимаю, для чего оно вообще нужно.
  14. Windows на сенсорном экране и события мыши

    Разрабатывая свою софтину, о сенсорных экранах я совсем не думал (отстал от прогресса). Но один тестер сейчас погонял текущую сборку на планшете. Оказалось, что почти всё работает хорошо, но в некоторых местах по нажатию пальцем отрабатывается не OnClick и не OnMouseUp, а почему-то OnMouseMove. Прежде чем изобретать велосипед, хочу спросить у знающих людей: а как вообще лучше организовывать работу с мышью/пальцем, чтобы она одинаково хорошо шла в обоих вариантах? Есть ли здесь четкие рекомендации? Вот, например, я вижу событие OnTap: стоит ли задействовать его? Или это только для мобильных платформ?
  15. Вертикальное смещение юникодных шрифтов

    В общем случае мне нужно выводить не просто одиночный иероглиф, а несколько японских символов, соседствующих на TCanvas с кириллицей и латиницей. Там это едва ли подойдет. Но на главную панель словарной статьи выводится именно одиночный иероглиф, крупным шрифтом (как показано на моих картинках). Именно там наиболее возможен выбор пользователем нестандартного шрифта. Так что вариант с TPathLabel я непременно опробую, спасибо!