-
Постов
222 -
Зарегистрирован
-
Посещение
-
Победитель дней
5
Сообщения, опубликованные Вадим Смоленский
-
-
2 часа назад, wamaco сказал:
Для мобильных платформ тоже на Delphi сделано?
Нет, на мобильные платформы портирует мой напарник, пишет на Си или чем-то подобном, я в его хозяйство особо не вникаю. Там есть мои паскалевские куски, он их вставляет туда как-то. Конечно, с переходом на FireMonkey велик соблазн всё это унифицировать, но уж слишком большие массивы кода наворочены за годы, поди их перелопать. С одной настольной-то версией уже год ковыряюсь...
Кстати, я еще не потерял надежды услышать Ваш комментарий к вопросу о сохранении стиля в разделе "Default". Очень обяжете, если прольете свет.
P.S. Отбой! С сохранением стиля помог dnekrasov. Ему мое спасибо. Но и вам тоже.
-
17 минут назад, dnekrasov сказал:
Про это можно почитать здесь
Благодарю за наводку. Наверняка это увлекательное чтение, даже картинки есть. Но, боюсь, если я в эти дебри занырну, то не вынырну и через месяц. Не хочется затягивать релиз, он и так уже затянулся. Написал сейчас на expert-exchange, может, там помогут. Не помогут - ну что ж, ограничу пользовательский выбор полудюжиной японских шрифтов, большой беды не будет.
Да, если у вашей дочки есть телефон с андроидом, то буду рад выписать ей бесплатную лицензию на полную андроидную версию ЯРКСИ. Все-таки вы мне помогли, в какой-то мере прояснили вопрос. Пишите на vsСОБАКАsusi.ru
-
35 минут назад, dnekrasov сказал:
Посмотрите раздел "Baseline to Baseline Distances".
Мало что можно понять из этого раздела. Вот, дают формулу для external leading:
MAX( 0, LineGap - ((usWinAscent + usWinDescent) - (Ascender - Descender)))
Что такое LineGap? Какая разница между usWinAscent и Ascender? Как они оба соотносятся с нашим Metrics.tmAscent?
Трудно поверить, что я один во всем интернете столкнулся с этой проблемой. Где-то все-таки должен быть готовый алгоритм.
-
1 час назад, dnekrasov сказал:
@Вадим Смоленский, а можно как-то увидеть Ваш проект - а то дочка японский учит - сказала, что хороший словарик всегда пригодится
Да, конечно. Это ЯРКСИ (японско-русский компьютерный словарь иероглифов). Если ваша дочка про него еще не слышала, то вот он где:
Там есть версии для мобильных платформ тоже. Версия 7.7 для Windows, которая вывешена, разрабатывалась еще в Delphi 6, которой я продолжал пользоваться до 2016 года. Сейчас перешел наконец в современную программную среду и целый год потратил на переделку интерфейса. Идет бета-тестирование; надеюсь через неделю-другую вывесить версию 8.0, которая будет несравнимо лучше. Так что есть смысл со скачиванием немножко подождать.
Документацию изучаю, но пока не смог понять, как именно нужно действовать...
-
Да, с этими коэффициентами на этих шрифтах выходит отлично! Что же тут за калькуляция?
-
Почти для всех вышеперечисленных шрифтов по этой формуле получается как раз значение tmInternalLeading. Единственное исключение - Yu Gothic, для него получилось 36, против прежнего 17. Было недостаточно, стало чересчур. Подход по-прежнему работает только для шрифта Tahoma.
-
Код самый простой:
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 (чересчур)За ссылку спасибо, заглянул - но там, как я понял, материал для разработчиков шрифтов. Мои амбиции так далеко не простираются.
-
Вот, кстати, tmInternalLeading больше похоже на то, что я ищу. Он недостаточно смещает, но пропорционально. Попробую подобрать коэффициент...
-
28 минут назад, dnekrasov сказал:
Как-то так:
Запускается, но tmExternalLeading на любом шрифте возвращает 0.
-
2 часа назад, dnekrasov сказал:
В модуле FMX.FontGlyphs.Win в методе TWinFontGlyphManager.LoadResource просто хорошо видно как с ней работать.
Изучив упомянутый метод в указанном модуле, сделал вывод, что код должен выглядеть примерно так:
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 для шрифта. Как же передать сюда шрифт?
-
4 минуты назад, dnekrasov сказал:
посмотрите FMX.FontGlyphs.Win.TWinFontGlyphManager.LoadResource
Простите мне мое невежество: это где нужно смотреть? В хелпах? На сайте Embarcadero? Где-нибудь еще?
-
48 минут назад, dnekrasov сказал:
Попробуйте сместить вверх на TTextMetric.tmExternalLeading
Компилятору не нравится, говорит: 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, я и вовсе понять не смог. В хелпах только обрывочная информация об этом, в Сети тоже мало что находится...
-
Некоторые юзеры (видимо, из близоруких) прибегают к масштабированию экрана и требуют, чтобы ваше приложение тоже масштабировалось. Когда мой проект был в VCL, я смотрел на параметр Screen.PixelsPerInch и учитывал его значение в своем коде. В FireMonkey этого нет. Я пытался понять, как это делать теперь, и окончательно запутался. Microsoft на официальном сайте упоминает функцию SystemParametersInfo с параметром SPI_GETLOGICALDPIOVERRIDE, но делает оговорку, что такую конфигурацию лучше не использовать - дескать, в новых версиях Windows она не будет работать. Взамен рекомендуют функцию GetScaleFactorForDevice, но тут же заявляют, что под Windows 8 и она работать не будет, а будет работать только GetScaleFactorForMonitor. Голова кругом. Нет ли у кого, случаем, готового решения, которое работало бы на любых Windows - хотя бы от семерки до десятки?
Еще один момент, который я не могу понять - в Windows 10 в настройках экрана, помимо масштаба в процентах, можно выбирать еще и разрешение в пикселях. По-моему, раньше такого разделения не было, хотя могу ошибаться. Связаны ли эти настройки друг с другом? И как они соотносятся со старым добрым DPI?
-
В 07/01/2018 в 20:57, wamaco сказал:
Ну разумеется!
Перенес все стили из списка "Windows 10 Desktop" туда, где написано "Default". Теперь "Windows 10 Desktop" пустой, все стили в Дефолте. Результат: все контролы отображаются без стилей. Выпадающий список в свойстве StyleLookup нигде моих стилей не показывает. Такое впечатление, что нужно дополнительно указать: мол, стили лежат в разделе "Default". Но где и как это указать?
-
В 07/01/2018 в 11:08, dnekrasov сказал:
Попробуйте в файле проекта добавить GlobalUseGDIPlusClearType := False
Помогло! Даже под XP теперь всё красиво.
Собственно, проблему я сам на себя навлек, когда по чьему-то совету вставил в файл проекта GlobalUseGDIPlusClearType := True для повышения быстродействия. Причем, нельзя сказать, чтобы быстродействие после этого ощутимо повысилось. Наверняка этот параметр принимает False по умолчанию, но пусть на всякий случай присвоение останется.
Спасибо!
-
А вот и нет! В этот раз для всех стилизуемых компонентов выбирал "Edit Default Style", работая при этом под Windows 10. Но тестеры, у которых Windows 7, прислали скриншоты, на которых все эти компоненты выглядят как должны выглядеть по умолчанию, безо всякого стиля.
Как быть? Я вот вижу в редакторе стилей выбор платформы. У меня сейчас выбран пункт "Windows 10 Desktop". Кроме него, есть только один пункт, под названием "Default". Его, что ли, нужно дополнительно выбирать всякий раз, когда вызываешь "Edit Default Style"?
-
Вынужден взять часть своей критики назад. Мне всего-то и нужно было, что выбрать не "Edit Custom Style", а "Edit Default Style" - тогда новый стиль не был бы привязан к платформе. Не разобрался сразу. Но, думаю, многие согласятся, что разобраться со стилями, как они поданы сейчас, бывает весьма непросто.
-
Думал, что вопрос закрыт, но вот еще один тестер прислал ровно такую же похабную картинку. А у этого тестера вовсе не XP, а вовсе даже Windows 7 SP1 x64. Говорит, что нормально запускается только в случае, если включен режим Windows Aero.
Никто не знает, как такие штуки лечатся?
-
Да, видимо, придется так и сделать. Но это все-таки недоработка. В идеале стиль не должен обнуляться при переходе на новую ОС. Ну, или хотя бы разработчик должен заранее знать о таких сюрпризах и изначально ориентироваться на собственные графические файлы.
-
В редакторе стилей панель 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 с этим файлом и всем его графическим содержимым! Но это содержимое не переносится в мое приложение, от красивого чекбокса остается только текст.
-
48 минут назад, krapotkin сказал:
так у вас кроме ваших кастомных добавок еще и стиль был загружен??
Я пока сильно плаваю в этих вопросах, строго не судите. Мне кажется, никаких специальных стилей я не загружал. Насколько помнится, при редактировании кастомных стилей файл Windows 7style.png предлагался по умолчанию; в некоторых случаях я не нашел там необходимого и нарисовал в отдельном png-файле, который тоже подгрузил. Вот этот новый файл сейчас скопировался в раздел WIndows 10, и всё, что в нем нарисовано, нормально отображается в приложении. А ссылки на файл Windows 7style.png я вижу сейчас только в Object Inspector редактора стилей. Судя по всему, эти ссылки стали нерабочими.
-
1 час назад, krapotkin сказал:
зайдите туда где стиль есть. Ctrl+C. добавьте windows 10 и Ctrl+V
Спасибо, помогло. Правда, пришлось копировать каждый элемент отдельно, все разом не получилось. Проблема остается одна: некоторые стилевые объекты у меня ссылаются на файл Windows 7style.png - а он, похоже, не перенесся. В редакторе стилей всё смотрится хорошо, но в запущенном приложении зияют пустоты. Например, у чекбоксов выводится только текст, а собственно чекбокс не отрисовывается. Где лежит Windows 7style.png, понять не смог. Как поступить?
Куда подевался сохраненный стиль?
в Стили
Опубликовано
Помогло! Надо же, такой простой ход - а вот поди догадайся... Хотя, конечно, нужно еще дождаться скриншотов от тестеров.
Никаких дополнительных вьюшек в дизайнере форм не наблюдаю, только Master.
Огромное спасибо за действенный совет!