-
Постов
222 -
Зарегистрирован
-
Посещение
-
Победитель дней
5
Весь контент Вадим Смоленский
-
Помогло! Надо же, такой простой ход - а вот поди догадайся... Хотя, конечно, нужно еще дождаться скриншотов от тестеров. Никаких дополнительных вьюшек в дизайнере форм не наблюдаю, только Master. Огромное спасибо за действенный совет!
-
windows Вертикальное смещение юникодных шрифтов
Вадим Смоленский ответил Вадим Смоленский вопрос в Текст
Нет, на мобильные платформы портирует мой напарник, пишет на Си или чем-то подобном, я в его хозяйство особо не вникаю. Там есть мои паскалевские куски, он их вставляет туда как-то. Конечно, с переходом на FireMonkey велик соблазн всё это унифицировать, но уж слишком большие массивы кода наворочены за годы, поди их перелопать. С одной настольной-то версией уже год ковыряюсь... Кстати, я еще не потерял надежды услышать Ваш комментарий к вопросу о сохранении стиля в разделе "Default". Очень обяжете, если прольете свет. P.S. Отбой! С сохранением стиля помог dnekrasov. Ему мое спасибо. Но и вам тоже. -
windows Вертикальное смещение юникодных шрифтов
Вадим Смоленский ответил Вадим Смоленский вопрос в Текст
Благодарю за наводку. Наверняка это увлекательное чтение, даже картинки есть. Но, боюсь, если я в эти дебри занырну, то не вынырну и через месяц. Не хочется затягивать релиз, он и так уже затянулся. Написал сейчас на expert-exchange, может, там помогут. Не помогут - ну что ж, ограничу пользовательский выбор полудюжиной японских шрифтов, большой беды не будет. Да, если у вашей дочки есть телефон с андроидом, то буду рад выписать ей бесплатную лицензию на полную андроидную версию ЯРКСИ. Все-таки вы мне помогли, в какой-то мере прояснили вопрос. Пишите на vsСОБАКАsusi.ru -
windows Вертикальное смещение юникодных шрифтов
Вадим Смоленский ответил Вадим Смоленский вопрос в Текст
Мало что можно понять из этого раздела. Вот, дают формулу для external leading: MAX( 0, LineGap - ((usWinAscent + usWinDescent) - (Ascender - Descender))) Что такое LineGap? Какая разница между usWinAscent и Ascender? Как они оба соотносятся с нашим Metrics.tmAscent? Трудно поверить, что я один во всем интернете столкнулся с этой проблемой. Где-то все-таки должен быть готовый алгоритм. -
windows Вертикальное смещение юникодных шрифтов
Вадим Смоленский ответил Вадим Смоленский вопрос в Текст
Да, конечно. Это ЯРКСИ (японско-русский компьютерный словарь иероглифов). Если ваша дочка про него еще не слышала, то вот он где: http://www.susi.ru/yarxi Там есть версии для мобильных платформ тоже. Версия 7.7 для Windows, которая вывешена, разрабатывалась еще в Delphi 6, которой я продолжал пользоваться до 2016 года. Сейчас перешел наконец в современную программную среду и целый год потратил на переделку интерфейса. Идет бета-тестирование; надеюсь через неделю-другую вывесить версию 8.0, которая будет несравнимо лучше. Так что есть смысл со скачиванием немножко подождать. Документацию изучаю, но пока не смог понять, как именно нужно действовать... -
windows Вертикальное смещение юникодных шрифтов
Вадим Смоленский ответил Вадим Смоленский вопрос в Текст
Да, с этими коэффициентами на этих шрифтах выходит отлично! Что же тут за калькуляция? -
windows Вертикальное смещение юникодных шрифтов
Вадим Смоленский ответил Вадим Смоленский вопрос в Текст
Почти для всех вышеперечисленных шрифтов по этой формуле получается как раз значение tmInternalLeading. Единственное исключение - Yu Gothic, для него получилось 36, против прежнего 17. Было недостаточно, стало чересчур. Подход по-прежнему работает только для шрифта Tahoma. -
windows Вертикальное смещение юникодных шрифтов
Вадим Смоленский ответил Вадим Смоленский вопрос в Текст
Код самый простой: 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 (чересчур) За ссылку спасибо, заглянул - но там, как я понял, материал для разработчиков шрифтов. Мои амбиции так далеко не простираются. -
windows Вертикальное смещение юникодных шрифтов
Вадим Смоленский ответил Вадим Смоленский вопрос в Текст
Вот, кстати, tmInternalLeading больше похоже на то, что я ищу. Он недостаточно смещает, но пропорционально. Попробую подобрать коэффициент... -
windows Вертикальное смещение юникодных шрифтов
Вадим Смоленский ответил Вадим Смоленский вопрос в Текст
Запускается, но tmExternalLeading на любом шрифте возвращает 0. -
windows Вертикальное смещение юникодных шрифтов
Вадим Смоленский ответил Вадим Смоленский вопрос в Текст
Изучив упомянутый метод в указанном модуле, сделал вывод, что код должен выглядеть примерно так: 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 для шрифта. Как же передать сюда шрифт? -
windows Вертикальное смещение юникодных шрифтов
Вадим Смоленский ответил Вадим Смоленский вопрос в Текст
Простите мне мое невежество: это где нужно смотреть? В хелпах? На сайте Embarcadero? Где-нибудь еще? -
windows Вертикальное смещение юникодных шрифтов
Вадим Смоленский ответил Вадим Смоленский вопрос в Текст
Компилятору не нравится, говорит: method identifier expected. -
В своем проекте (это японско-русский словарь) мне приходится выводить на TImage.Bitmap.Canvas хранящиеся в юникоде иероглифы, причем шрифт пользователь может выбрать сам. Столкнулся с неприятным явлением: разные шрифты располагают выводимый символ на разной высоте, в результате чего иероглиф часто не вписывается в предназначенную для него область. По умолчанию принят шрифт Tahoma, с ним всё хорошо: Но вот шрифт Yu Mincho: А вот, еще хлеще, Kozuka Gothic: Вопрос: что за параметр регулирует вертикальное смещение, можно ли его вынуть и с ним работать?
-
Спасибо! Но что все-таки предпочесть, GetWndScale или IFMXScreenService? Попробовал применить первое, но встал в тупик с константой Wnd. Раньше я получал ее следующим образом: Wnd := GetWindow(Application.Handle, gw_HWndFirst); Теперь Delphi ругается на Application.Handle, говорит, что такого свойства нет. Как быть? А как вставить в код IFMXScreenService с методом GetScreenScale, я и вовсе понять не смог. В хелпах только обрывочная информация об этом, в Сети тоже мало что находится...
-
windows Как вытащить коэффициент масштабирования Windows?
Вадим Смоленский опубликовал вопрос в Windows
Некоторые юзеры (видимо, из близоруких) прибегают к масштабированию экрана и требуют, чтобы ваше приложение тоже масштабировалось. Когда мой проект был в VCL, я смотрел на параметр Screen.PixelsPerInch и учитывал его значение в своем коде. В FireMonkey этого нет. Я пытался понять, как это делать теперь, и окончательно запутался. Microsoft на официальном сайте упоминает функцию SystemParametersInfo с параметром SPI_GETLOGICALDPIOVERRIDE, но делает оговорку, что такую конфигурацию лучше не использовать - дескать, в новых версиях Windows она не будет работать. Взамен рекомендуют функцию GetScaleFactorForDevice, но тут же заявляют, что под Windows 8 и она работать не будет, а будет работать только GetScaleFactorForMonitor. Голова кругом. Нет ли у кого, случаем, готового решения, которое работало бы на любых Windows - хотя бы от семерки до десятки? Еще один момент, который я не могу понять - в Windows 10 в настройках экрана, помимо масштаба в процентах, можно выбирать еще и разрешение в пикселях. По-моему, раньше такого разделения не было, хотя могу ошибаться. Связаны ли эти настройки друг с другом? И как они соотносятся со старым добрым DPI? -
Перенес все стили из списка "Windows 10 Desktop" туда, где написано "Default". Теперь "Windows 10 Desktop" пустой, все стили в Дефолте. Результат: все контролы отображаются без стилей. Выпадающий список в свойстве StyleLookup нигде моих стилей не показывает. Такое впечатление, что нужно дополнительно указать: мол, стили лежат в разделе "Default". Но где и как это указать?
-
Помогло! Даже под XP теперь всё красиво. Собственно, проблему я сам на себя навлек, когда по чьему-то совету вставил в файл проекта GlobalUseGDIPlusClearType := True для повышения быстродействия. Причем, нельзя сказать, чтобы быстродействие после этого ощутимо повысилось. Наверняка этот параметр принимает False по умолчанию, но пусть на всякий случай присвоение останется. Спасибо!
-
А вот и нет! В этот раз для всех стилизуемых компонентов выбирал "Edit Default Style", работая при этом под Windows 10. Но тестеры, у которых Windows 7, прислали скриншоты, на которых все эти компоненты выглядят как должны выглядеть по умолчанию, безо всякого стиля. Как быть? Я вот вижу в редакторе стилей выбор платформы. У меня сейчас выбран пункт "Windows 10 Desktop". Кроме него, есть только один пункт, под названием "Default". Его, что ли, нужно дополнительно выбирать всякий раз, когда вызываешь "Edit Default Style"?
-
Вынужден взять часть своей критики назад. Мне всего-то и нужно было, что выбрать не "Edit Custom Style", а "Edit Default Style" - тогда новый стиль не был бы привязан к платформе. Не разобрался сразу. Но, думаю, многие согласятся, что разобраться со стилями, как они поданы сейчас, бывает весьма непросто.
-
Да, видимо, придется так и сделать. Но это все-таки недоработка. В идеале стиль не должен обнуляться при переходе на новую ОС. Ну, или хотя бы разработчик должен заранее знать о таких сюрпризах и изначально ориентироваться на собственные графические файлы.
-
В редакторе стилей панель 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 с этим файлом и всем его графическим содержимым! Но это содержимое не переносится в мое приложение, от красивого чекбокса остается только текст.
-
Я пока сильно плаваю в этих вопросах, строго не судите. Мне кажется, никаких специальных стилей я не загружал. Насколько помнится, при редактировании кастомных стилей файл Windows 7style.png предлагался по умолчанию; в некоторых случаях я не нашел там необходимого и нарисовал в отдельном png-файле, который тоже подгрузил. Вот этот новый файл сейчас скопировался в раздел WIndows 10, и всё, что в нем нарисовано, нормально отображается в приложении. А ссылки на файл Windows 7style.png я вижу сейчас только в Object Inspector редактора стилей. Судя по всему, эти ссылки стали нерабочими.
-
Спасибо, помогло. Правда, пришлось копировать каждый элемент отдельно, все разом не получилось. Проблема остается одна: некоторые стилевые объекты у меня ссылаются на файл Windows 7style.png - а он, похоже, не перенесся. В редакторе стилей всё смотрится хорошо, но в запущенном приложении зияют пустоты. Например, у чекбоксов выводится только текст, а собственно чекбокс не отрисовывается. Где лежит Windows 7style.png, понять не смог. Как поступить?