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

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

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

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

  • Посещение

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

    5

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

  1. Помогло! Надо же, такой простой ход - а вот поди догадайся... Хотя, конечно, нужно еще дождаться скриншотов от тестеров. Никаких дополнительных вьюшек в дизайнере форм не наблюдаю, только Master. Огромное спасибо за действенный совет!
  2. Нет, на мобильные платформы портирует мой напарник, пишет на Си или чем-то подобном, я в его хозяйство особо не вникаю. Там есть мои паскалевские куски, он их вставляет туда как-то. Конечно, с переходом на FireMonkey велик соблазн всё это унифицировать, но уж слишком большие массивы кода наворочены за годы, поди их перелопать. С одной настольной-то версией уже год ковыряюсь... Кстати, я еще не потерял надежды услышать Ваш комментарий к вопросу о сохранении стиля в разделе "Default". Очень обяжете, если прольете свет. P.S. Отбой! С сохранением стиля помог dnekrasov. Ему мое спасибо. Но и вам тоже.
  3. Благодарю за наводку. Наверняка это увлекательное чтение, даже картинки есть. Но, боюсь, если я в эти дебри занырну, то не вынырну и через месяц. Не хочется затягивать релиз, он и так уже затянулся. Написал сейчас на expert-exchange, может, там помогут. Не помогут - ну что ж, ограничу пользовательский выбор полудюжиной японских шрифтов, большой беды не будет. Да, если у вашей дочки есть телефон с андроидом, то буду рад выписать ей бесплатную лицензию на полную андроидную версию ЯРКСИ. Все-таки вы мне помогли, в какой-то мере прояснили вопрос. Пишите на vsСОБАКАsusi.ru
  4. Мало что можно понять из этого раздела. Вот, дают формулу для external leading: MAX( 0, LineGap - ((usWinAscent + usWinDescent) - (Ascender - Descender))) Что такое LineGap? Какая разница между usWinAscent и Ascender? Как они оба соотносятся с нашим Metrics.tmAscent? Трудно поверить, что я один во всем интернете столкнулся с этой проблемой. Где-то все-таки должен быть готовый алгоритм.
  5. Да, конечно. Это ЯРКСИ (японско-русский компьютерный словарь иероглифов). Если ваша дочка про него еще не слышала, то вот он где: http://www.susi.ru/yarxi Там есть версии для мобильных платформ тоже. Версия 7.7 для Windows, которая вывешена, разрабатывалась еще в Delphi 6, которой я продолжал пользоваться до 2016 года. Сейчас перешел наконец в современную программную среду и целый год потратил на переделку интерфейса. Идет бета-тестирование; надеюсь через неделю-другую вывесить версию 8.0, которая будет несравнимо лучше. Так что есть смысл со скачиванием немножко подождать. Документацию изучаю, но пока не смог понять, как именно нужно действовать...
  6. Да, с этими коэффициентами на этих шрифтах выходит отлично! Что же тут за калькуляция?
  7. Почти для всех вышеперечисленных шрифтов по этой формуле получается как раз значение tmInternalLeading. Единственное исключение - Yu Gothic, для него получилось 36, против прежнего 17. Было недостаточно, стало чересчур. Подход по-прежнему работает только для шрифта Tahoma.
  8. Код самый простой: with MyImage.Bitmap.Canvas do begin BeginScene; Font.Family := 'Tahoma'; Font.Style := []; Font.Size := 60; FillText (RectF (0, 0-FontVertShift(Font), Width-1, Height-1), '字' , False , 1 , [] , TTextAlign.Leading, TTextAlign.Leading); EndScene; end; Код функции брал ваш, только tmExternalLeading заменил на tmInternalLeading. Шрифты пробовал такие (после названия - сначала значение tmInternalLeading, затем tmExternalLeading): MS Mincho: 0, 0 (проблемы нет) MS Gothic: 0, 0 (проблемы нет) Tahoma: 12, 0 (в самый раз) Yu Gothic: 17, 19 (недостаточно) Kozuka Gothic Pr6N B: 50,0 (недостаточно) Meiryo: 30, 0 (чересчур) За ссылку спасибо, заглянул - но там, как я понял, материал для разработчиков шрифтов. Мои амбиции так далеко не простираются.
  9. Вот, кстати, tmInternalLeading больше похоже на то, что я ищу. Он недостаточно смещает, но пропорционально. Попробую подобрать коэффициент...
  10. Запускается, но tmExternalLeading на любом шрифте возвращает 0.
  11. Изучив упомянутый метод в указанном модуле, сделал вывод, что код должен выглядеть примерно так: function FontVertShift (F: TFont): Single; var Metrics: TTextMetric; DC: HDC; HF: HFont; begin HF:=SelectObject(DC, F.Handle); SelectObject(DC, HF); GetTextMetrics(DC, Metrics); result := Metrics.tmExternalLeading end; Затык в том, что FireMonkey не предоставляет Handle для шрифта. Как же передать сюда шрифт?
  12. Простите мне мое невежество: это где нужно смотреть? В хелпах? На сайте Embarcadero? Где-нибудь еще?
  13. В своем проекте (это японско-русский словарь) мне приходится выводить на TImage.Bitmap.Canvas хранящиеся в юникоде иероглифы, причем шрифт пользователь может выбрать сам. Столкнулся с неприятным явлением: разные шрифты располагают выводимый символ на разной высоте, в результате чего иероглиф часто не вписывается в предназначенную для него область. По умолчанию принят шрифт Tahoma, с ним всё хорошо: Но вот шрифт Yu Mincho: А вот, еще хлеще, Kozuka Gothic: Вопрос: что за параметр регулирует вертикальное смещение, можно ли его вынуть и с ним работать?
  14. Спасибо! Но что все-таки предпочесть, GetWndScale или IFMXScreenService? Попробовал применить первое, но встал в тупик с константой Wnd. Раньше я получал ее следующим образом: Wnd := GetWindow(Application.Handle, gw_HWndFirst); Теперь Delphi ругается на Application.Handle, говорит, что такого свойства нет. Как быть? А как вставить в код IFMXScreenService с методом GetScreenScale, я и вовсе понять не смог. В хелпах только обрывочная информация об этом, в Сети тоже мало что находится...
  15. Некоторые юзеры (видимо, из близоруких) прибегают к масштабированию экрана и требуют, чтобы ваше приложение тоже масштабировалось. Когда мой проект был в VCL, я смотрел на параметр Screen.PixelsPerInch и учитывал его значение в своем коде. В FireMonkey этого нет. Я пытался понять, как это делать теперь, и окончательно запутался. Microsoft на официальном сайте упоминает функцию SystemParametersInfo с параметром SPI_GETLOGICALDPIOVERRIDE, но делает оговорку, что такую конфигурацию лучше не использовать - дескать, в новых версиях Windows она не будет работать. Взамен рекомендуют функцию GetScaleFactorForDevice, но тут же заявляют, что под Windows 8 и она работать не будет, а будет работать только GetScaleFactorForMonitor. Голова кругом. Нет ли у кого, случаем, готового решения, которое работало бы на любых Windows - хотя бы от семерки до десятки? Еще один момент, который я не могу понять - в Windows 10 в настройках экрана, помимо масштаба в процентах, можно выбирать еще и разрешение в пикселях. По-моему, раньше такого разделения не было, хотя могу ошибаться. Связаны ли эти настройки друг с другом? И как они соотносятся со старым добрым DPI?
  16. Перенес все стили из списка "Windows 10 Desktop" туда, где написано "Default". Теперь "Windows 10 Desktop" пустой, все стили в Дефолте. Результат: все контролы отображаются без стилей. Выпадающий список в свойстве StyleLookup нигде моих стилей не показывает. Такое впечатление, что нужно дополнительно указать: мол, стили лежат в разделе "Default". Но где и как это указать?
  17. Помогло! Даже под XP теперь всё красиво. Собственно, проблему я сам на себя навлек, когда по чьему-то совету вставил в файл проекта GlobalUseGDIPlusClearType := True для повышения быстродействия. Причем, нельзя сказать, чтобы быстродействие после этого ощутимо повысилось. Наверняка этот параметр принимает False по умолчанию, но пусть на всякий случай присвоение останется. Спасибо!
  18. А вот и нет! В этот раз для всех стилизуемых компонентов выбирал "Edit Default Style", работая при этом под Windows 10. Но тестеры, у которых Windows 7, прислали скриншоты, на которых все эти компоненты выглядят как должны выглядеть по умолчанию, безо всякого стиля. Как быть? Я вот вижу в редакторе стилей выбор платформы. У меня сейчас выбран пункт "Windows 10 Desktop". Кроме него, есть только один пункт, под названием "Default". Его, что ли, нужно дополнительно выбирать всякий раз, когда вызываешь "Edit Default Style"?
  19. Вынужден взять часть своей критики назад. Мне всего-то и нужно было, что выбрать не "Edit Custom Style", а "Edit Default Style" - тогда новый стиль не был бы привязан к платформе. Не разобрался сразу. Но, думаю, многие согласятся, что разобраться со стилями, как они поданы сейчас, бывает весьма непросто.
  20. Думал, что вопрос закрыт, но вот еще один тестер прислал ровно такую же похабную картинку. А у этого тестера вовсе не XP, а вовсе даже Windows 7 SP1 x64. Говорит, что нормально запускается только в случае, если включен режим Windows Aero. Никто не знает, как такие штуки лечатся?
  21. Да, видимо, придется так и сделать. Но это все-таки недоработка. В идеале стиль не должен обнуляться при переходе на новую ОС. Ну, или хотя бы разработчик должен заранее знать о таких сюрпризах и изначально ориентироваться на собственные графические файлы.
  22. В редакторе стилей панель Structure содержит список стилей, которые я в свое время редактировал под Windows 7 для некоторых компонентов, всякий раз вызывая "Edit Custom Style", и которые сегодня перенес в раздел Windows 10. В этом же списке - имя файла MyStyles.png, который я тогда же создал и в котором рисовал то, чего не находил в уже готовом файле Windows 7style.png. Некоторые из моих стилей - например, стиль для TEdit - ссылаются на MyStyles.png, эта ссылка прописана в поле SourceLookup объекта backround, ее видно в Object Inspector. С этими стилями полный порядок. Но некоторые мои стили - например, стиль для TCheckBox - по-прежнему ссылаются на файл Windows 7style.png, которого в списке нет. Причем, эти ссылки тоже видны в Object Inspector; более того: щелкнув по полю SourceLink, я могу увидеть BitmapLinks Editor с этим файлом и всем его графическим содержимым! Но это содержимое не переносится в мое приложение, от красивого чекбокса остается только текст.
  23. Я пока сильно плаваю в этих вопросах, строго не судите. Мне кажется, никаких специальных стилей я не загружал. Насколько помнится, при редактировании кастомных стилей файл Windows 7style.png предлагался по умолчанию; в некоторых случаях я не нашел там необходимого и нарисовал в отдельном png-файле, который тоже подгрузил. Вот этот новый файл сейчас скопировался в раздел WIndows 10, и всё, что в нем нарисовано, нормально отображается в приложении. А ссылки на файл Windows 7style.png я вижу сейчас только в Object Inspector редактора стилей. Судя по всему, эти ссылки стали нерабочими.
  24. Спасибо, помогло. Правда, пришлось копировать каждый элемент отдельно, все разом не получилось. Проблема остается одна: некоторые стилевые объекты у меня ссылаются на файл Windows 7style.png - а он, похоже, не перенесся. В редакторе стилей всё смотрится хорошо, но в запущенном приложении зияют пустоты. Например, у чекбоксов выводится только текст, а собственно чекбокс не отрисовывается. Где лежит Windows 7style.png, понять не смог. Как поступить?
×
×
  • Создать...