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

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

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

  • Посещение

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

  1. Вертикальное смещение юникодных шрифтов

    В своем проекте (это японско-русский словарь) мне приходится выводить на TImage.Bitmap.Canvas хранящиеся в юникоде иероглифы, причем шрифт пользователь может выбрать сам. Столкнулся с неприятным явлением: разные шрифты располагают выводимый символ на разной высоте, в результате чего иероглиф часто не вписывается в предназначенную для него область. По умолчанию принят шрифт Tahoma, с ним всё хорошо: Но вот шрифт Yu Mincho: А вот, еще хлеще, Kozuka Gothic: Вопрос: что за параметр регулирует вертикальное смещение, можно ли его вынуть и с ним работать?
  2. Вертикальное смещение юникодных шрифтов

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

    Думаю, причина в том, что я создавал проект еще под Windows 7. Соответственно, создался стиль под семерку. А на днях, перейдя на десятку, я этот стиль удалил и руками добавил "Windows 10 Desktop". Поэтому дизайнер форм чистый.
  4. Куда подевался сохраненный стиль?

    Работая в Berlin, подправил стиль для одного компонента посредством вызова "Edit Custom Style" во всплывающем меню. Потом перешел на Tokyo; потом поменял компьютер и установил на него Tokyo заново. Сейчас вижу, что компонент отображается в стиле по умолчанию. Никаких сообщений по поводу пропавшего стиля не припомню. Где мне найти и как опять подключить мой отредактированный стиль?
  5. Куда подевался сохраненный стиль?

    Помогло! Надо же, такой простой ход - а вот поди догадайся... Хотя, конечно, нужно еще дождаться скриншотов от тестеров. Никаких дополнительных вьюшек в дизайнере форм не наблюдаю, только Master. Огромное спасибо за действенный совет!
  6. Вертикальное смещение юникодных шрифтов

    Нет, на мобильные платформы портирует мой напарник, пишет на Си или чем-то подобном, я в его хозяйство особо не вникаю. Там есть мои паскалевские куски, он их вставляет туда как-то. Конечно, с переходом на FireMonkey велик соблазн всё это унифицировать, но уж слишком большие массивы кода наворочены за годы, поди их перелопать. С одной настольной-то версией уже год ковыряюсь... Кстати, я еще не потерял надежды услышать Ваш комментарий к вопросу о сохранении стиля в разделе "Default". Очень обяжете, если прольете свет. P.S. Отбой! С сохранением стиля помог dnekrasov. Ему мое спасибо. Но и вам тоже.
  7. Вертикальное смещение юникодных шрифтов

    Благодарю за наводку. Наверняка это увлекательное чтение, даже картинки есть. Но, боюсь, если я в эти дебри занырну, то не вынырну и через месяц. Не хочется затягивать релиз, он и так уже затянулся. Написал сейчас на expert-exchange, может, там помогут. Не помогут - ну что ж, ограничу пользовательский выбор полудюжиной японских шрифтов, большой беды не будет. Да, если у вашей дочки есть телефон с андроидом, то буду рад выписать ей бесплатную лицензию на полную андроидную версию ЯРКСИ. Все-таки вы мне помогли, в какой-то мере прояснили вопрос. Пишите на vsСОБАКАsusi.ru
  8. Вертикальное смещение юникодных шрифтов

    Мало что можно понять из этого раздела. Вот, дают формулу для external leading: MAX( 0, LineGap - ((usWinAscent + usWinDescent) - (Ascender - Descender))) Что такое LineGap? Какая разница между usWinAscent и Ascender? Как они оба соотносятся с нашим Metrics.tmAscent? Трудно поверить, что я один во всем интернете столкнулся с этой проблемой. Где-то все-таки должен быть готовый алгоритм.
  9. Вертикальное смещение юникодных шрифтов

    Да, конечно. Это ЯРКСИ (японско-русский компьютерный словарь иероглифов). Если ваша дочка про него еще не слышала, то вот он где: http://www.susi.ru/yarxi Там есть версии для мобильных платформ тоже. Версия 7.7 для Windows, которая вывешена, разрабатывалась еще в Delphi 6, которой я продолжал пользоваться до 2016 года. Сейчас перешел наконец в современную программную среду и целый год потратил на переделку интерфейса. Идет бета-тестирование; надеюсь через неделю-другую вывесить версию 8.0, которая будет несравнимо лучше. Так что есть смысл со скачиванием немножко подождать. Документацию изучаю, но пока не смог понять, как именно нужно действовать...
  10. Вертикальное смещение юникодных шрифтов

    Да, с этими коэффициентами на этих шрифтах выходит отлично! Что же тут за калькуляция?
  11. Вертикальное смещение юникодных шрифтов

    Почти для всех вышеперечисленных шрифтов по этой формуле получается как раз значение tmInternalLeading. Единственное исключение - Yu Gothic, для него получилось 36, против прежнего 17. Было недостаточно, стало чересчур. Подход по-прежнему работает только для шрифта Tahoma.
  12. Вертикальное смещение юникодных шрифтов

    Код самый простой: 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 (чересчур) За ссылку спасибо, заглянул - но там, как я понял, материал для разработчиков шрифтов. Мои амбиции так далеко не простираются.
  13. Вертикальное смещение юникодных шрифтов

    Вот, кстати, tmInternalLeading больше похоже на то, что я ищу. Он недостаточно смещает, но пропорционально. Попробую подобрать коэффициент...
  14. Вертикальное смещение юникодных шрифтов

    Запускается, но tmExternalLeading на любом шрифте возвращает 0.
  15. Вертикальное смещение юникодных шрифтов

    Изучив упомянутый метод в указанном модуле, сделал вывод, что код должен выглядеть примерно так: 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 для шрифта. Как же передать сюда шрифт?
  16. Вертикальное смещение юникодных шрифтов

    Простите мне мое невежество: это где нужно смотреть? В хелпах? На сайте Embarcadero? Где-нибудь еще?
  17. Вертикальное смещение юникодных шрифтов

    Компилятору не нравится, говорит: method identifier expected.
  18. Как вытащить коэффициент масштабирования Windows?

    Некоторые юзеры (видимо, из близоруких) прибегают к масштабированию экрана и требуют, чтобы ваше приложение тоже масштабировалось. Когда мой проект был в VCL, я смотрел на параметр Screen.PixelsPerInch и учитывал его значение в своем коде. В FireMonkey этого нет. Я пытался понять, как это делать теперь, и окончательно запутался. Microsoft на официальном сайте упоминает функцию SystemParametersInfo с параметром SPI_GETLOGICALDPIOVERRIDE, но делает оговорку, что такую конфигурацию лучше не использовать - дескать, в новых версиях Windows она не будет работать. Взамен рекомендуют функцию GetScaleFactorForDevice, но тут же заявляют, что под Windows 8 и она работать не будет, а будет работать только GetScaleFactorForMonitor. Голова кругом. Нет ли у кого, случаем, готового решения, которое работало бы на любых Windows - хотя бы от семерки до десятки? Еще один момент, который я не могу понять - в Windows 10 в настройках экрана, помимо масштаба в процентах, можно выбирать еще и разрешение в пикселях. По-моему, раньше такого разделения не было, хотя могу ошибаться. Связаны ли эти настройки друг с другом? И как они соотносятся со старым добрым DPI?
  19. Как вытащить коэффициент масштабирования Windows?

    Спасибо! Но что все-таки предпочесть, GetWndScale или IFMXScreenService? Попробовал применить первое, но встал в тупик с константой Wnd. Раньше я получал ее следующим образом: Wnd := GetWindow(Application.Handle, gw_HWndFirst); Теперь Delphi ругается на Application.Handle, говорит, что такого свойства нет. Как быть? А как вставить в код IFMXScreenService с методом GetScreenScale, я и вовсе понять не смог. В хелпах только обрывочная информация об этом, в Сети тоже мало что находится...
  20. Полноэкранный режим редактора

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

    Перенес все стили из списка "Windows 10 Desktop" туда, где написано "Default". Теперь "Windows 10 Desktop" пустой, все стили в Дефолте. Результат: все контролы отображаются без стилей. Выпадающий список в свойстве StyleLookup нигде моих стилей не показывает. Такое впечатление, что нужно дополнительно указать: мол, стили лежат в разделе "Default". Но где и как это указать?
  22. Искажения текста на Canvas под Windows XP

    Помогло! Даже под XP теперь всё красиво. Собственно, проблему я сам на себя навлек, когда по чьему-то совету вставил в файл проекта GlobalUseGDIPlusClearType := True для повышения быстродействия. Причем, нельзя сказать, чтобы быстродействие после этого ощутимо повысилось. Наверняка этот параметр принимает False по умолчанию, но пусть на всякий случай присвоение останется. Спасибо!
  23. Искажения текста на Canvas под Windows XP

    В своем проекте (это японско-русский словарь) я часто вывожу текст на TImage методом TCanvas.FillText, и результат выглядит так: Один из тестеров, у которого установлена Windows XP, прислал скриншот того, что выводится у него: Ровно такую же безобразную картину я видел у себя, когда, экспериментируя с быстродействием, вставлял в файл dpr операторы FMX.Types.GlobalUseDX:=False или FMX.Types.GlobalUseDirect2D:=False То ли в XP эти установки приняты по умолчанию, то ли так сконфигурирована система у тестера. Первое, что приходит в голову - вставить в код присвоение обеим упомянутым переменным значения True. Но прежде, чем предпринять такую попытку, хотелось бы услышать мнение экспертов. В чем здесь корень зла?
  24. Куда подевался сохраненный стиль?

    А вот и нет! В этот раз для всех стилизуемых компонентов выбирал "Edit Default Style", работая при этом под Windows 10. Но тестеры, у которых Windows 7, прислали скриншоты, на которых все эти компоненты выглядят как должны выглядеть по умолчанию, безо всякого стиля. Как быть? Я вот вижу в редакторе стилей выбор платформы. У меня сейчас выбран пункт "Windows 10 Desktop". Кроме него, есть только один пункт, под названием "Default". Его, что ли, нужно дополнительно выбирать всякий раз, когда вызываешь "Edit Default Style"?
  25. Куда подевался сохраненный стиль?

    Вынужден взять часть своей критики назад. Мне всего-то и нужно было, что выбрать не "Edit Custom Style", а "Edit Default Style" - тогда новый стиль не был бы привязан к платформе. Не разобрался сразу. Но, думаю, многие согласятся, что разобраться со стилями, как они поданы сейчас, бывает весьма непросто.