Delphi: Обработка предпочтения шрифта пользователя

Документы указывают один вариант использования для FileInputStream :

FileInputStream предназначен для чтения потоков необработанных байтов, таких как данные изображения. Для чтения потоков символов рассмотрите использование FileReader.

blockquote>

Так что для читателей применяется обратное.

A FileInputStream читает byte по byte, в то время как BufferedReader читает char по char.

Так что, если вы читаете что-то с символами, используйте Reader. Если вы читаете двоичные данные, используйте Stream.

10
задан Community 23 May 2017 в 11:48
поделиться

6 ответов

Я чувствую с Вами. Но во всей справедливости: Надлежащее расположение GUI просто не может быть создано с основанным на пикселе механизмом создания макета, как используется VCL. То, что необходимо, является динамическим механизмом расположения, который размечает средства управления только после

  1. надлежащий шрифт был установлен для каждого управления (это зависит от версии Windows, пользовательских настроек, и наконец, что не менее важно, от типа управления); и

  2. текст в управлении был переведен в текущую локаль, потому что это может уменьшить или увеличить пространство, необходимое для управления.

Так как это, все в зависимости от свойств времени выполнения, создающих диалоговые окна путем размещения средств управления, не может работать. Механизмы создания макета как те из GTK и QT или классификаторов в wxWidgets лучше подходят.

Я не знаю ни о какой такой вещи для программ Delphi. То, что я делаю в некоторых программах, является ручной калибровкой и расположением средств управления после параметра шрифта и перевода текста. Большая работа, но в зависимости от Вашей аудитории это может стоить того.

Вы могли также изучить код, который Jordan Russell написал для Установки Inno. Он не использует свойство Scaled форм, но написал код для пользовательского масштабирования средств управления. Возможно, это будет также работать на очень большие шрифты на высоких экранах DPI; я замечаю, что, по крайней мере, на моих 124 экранных диалоговых окнах установки ноутбука DPI выглядят довольно хорошими.

3
ответ дан 3 December 2019 в 20:44
поделиться

Во-первых, именно так мы ясны, Borland больше не владеет Delphi. Причал теперь владеет Delphi, и мы находимся в безопасных, безопасных руках теперь.

Хорошо, по Вашему вопросу.

Прием должен установить TForm. AutoScroll ко Лжи И удостоверяются, что Ваша машина разработки установлена на Мелкие шрифты. Отъезд TForm. Масштабированный один (это - значение по умолчанию, Верно).

Это - то, как мы делаем это внутренне здесь, и IDE обрабатывает все очень хорошо.

9
ответ дан 3 December 2019 в 20:44
поделиться

Чтобы сделать это правильно, я думаю, что Вы имели бы к:

1 - Загрузите предпочтение шрифта пользователя

2 - Примените его, как Вы описали

3 - Определите ширину и высоту всех подписей (в пикселях) и сравните это с шириной управления и высотой, и корректируйтесь соответственно.

К сожалению, "корректируют соответственно" часть, твердо. Вы могли расширить кнопку, но затем необходимо будет проверить, накладывается ли это с другим управлением.

Ваш лучший выбор мог бы состоять в том, чтобы создать средства управления немного увеличенного размера и надеяться, что пользователь не выбирает размер шрифта с 32 точками.

2
ответ дан 3 December 2019 в 20:44
поделиться

Kogus имел верное представление, но не учел функцию, которую необходимо использовать. Это была бы стандартная программа Windows GetTextExtentPoint32. Вы передаете его строка, и это вычисляет ширину и высоту строки с помощью в настоящее время выбранного шрифта. Вы найдете его в Windows.pas.

Вы могли бы хотеть вычислить заранее, в чем максимальном пространстве Вы будете нуждаться для шрифтов, которые Вы позволяете.

Или Вы могли бы использовать функцию для динамичной корректировки размера области, отображающей текст так, чтобы это соответствовало.

Это было бы хорошо для одних или двух средств управления, но любой метод будет большой работой, при попытке сделать это в своем целом пользовательском интерфейсе.

1
ответ дан 3 December 2019 в 20:44
поделиться

Мне нравится использовать эту функцию. Это основано на Графике. GetFontData

procedure SystemFont(Font: TFont);
var
  LogFont: TLogFont;
begin
  if SystemParametersInfo(SPI_GETICONTITLELOGFONT, SizeOf(TLogFont), @LogFont, 0) then
    begin
      Font.Height := LogFont.lfHeight;
      Font.Orientation := LogFont.lfOrientation;
      Font.Charset := TFontCharset(LogFont.lfCharSet);
      Font.Name := PChar(@LogFont.lfFaceName);

      Font.Style := [];

      if LogFont.lfWeight >= FW_BOLD then
        Font.Style := Font.Style + [fsBold];

      if LogFont.lfItalic = 1 then
        Font.Style := Font.Style + [fsItalic];

      if LogFont.lfUnderline = 1 then
        Font.Style := Font.Style + [fsUnderline];

      if LogFont.lfStrikeOut = 1 then
        Font.Style := Font.Style + [fsStrikeOut];

      case LogFont.lfPitchAndFamily and $F of
        VARIABLE_PITCH: Font.Pitch := fpVariable;
        FIXED_PITCH: Font.Pitch := fpFixed;
        else Font.Pitch := fpDefault;
      end;
    end;
end;

Вы просто используете его на всем TForm. События OnCreate. Альтернатива могла быть должна создать новый класс, который делает это на Экране создания или цикличного выполнения. Формы.

Если Вы измените некоторые свойства стандартного шрифта каких-либо из средств управления на форме, то они будут все еще использовать старый шрифт. Если Вы хотите пользовательские свойства на некоторых средствах управления, необходимо будет скорректировать их после вызова SystemFont.

Изменение Графики. DefFontData во времени выполнения мог помочь, если бы конструктор форм только записал измененные свойства в .dfm файлы.

3
ответ дан 3 December 2019 в 20:44
поделиться

Я сказал бы, что это было подобно переводу. В нашем приложении мы сделали кнопки, маркировки, редактирования, все, что немного больше так, чтобы более длительные слова, которые необходимы некоторым языкам, могли быть легко размещены. Это не повреждает дизайн немного.

0
ответ дан 3 December 2019 в 20:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: