Проблеми з розміром шрифтів
Шановні майстри. У мене до Вас невелике питання. У розділі "Властивості екрана/параметри/додатково" можна змінити масштаб шрифту. "Звичайний розмір 96dpi" або "Великий розмір 120dpi". Сам я пишу з установкою "Звичайний розмір 96dpi". На комп'ютері, де встановлено "Великий розмір 120dpi", природно всі написи попливли. Хто як вирішує цю проблему?
Чи можливо якось "зафіксувати" шрифт?
може спробувати Form.Scaled: = False; ?
І програма відправляється в Recycle Bin, де їй саме місце після подібних заяв.
На сайті globus vcl був спосіб вирішення цієї проблеми, використовуючи TrueType шрифти.
Ось у себе у факах знайшов. Десь узяв, не пам'ятаю. Спробуй.
Пропорційні шрифти незалежно від режиму екрану
Примітка: в інспекторі об'єктів потрібно поставити Scaled = False для тих Tform, в яких буде здійснюватися масштабування шрифтів.
type TFooClass = class(TControl);
procedure geAutoScale(MForm: TForm); const cScreenWidth :integer = 800; cScreenHeight:integer = 600; cPixelsPerInch:integer=96; cFontHeight:integer = -11; var i: integer; begin if (Screen.width &ct cScreenWidth)or(Screen.PixelsPerInch <> cPixelsPerInch) then begin MForm.scaled : = TRUE; MForm.height := MForm.height * screen.Height DIV cScreenHeight; MForm.width := MForm.width * screen.width DIV cScreenWidth; MForm.ScaleBy(screen.width, cScreenWidth); end; if (Screen.PixelsPerInch <> cPixelsPerInch) then begin for i := MForm.ControlCount - 1 downto 0 do TFooClass(MForm.Controls[i] ).Font.Height:=(MForm.Font.Height div cFontHeight)*TFooClass(MForm.Controls[i]).Font.Height; end; end;
І взагалі, це була помилкова весла мс.Деякі діалоги мс, також глючать при великих шрифтах. Вказувати на них зараз не хочу – треба перевантажуватись, щоб перейти у великі шрифти. Але ці місця є.
> просто треба писати програми, які дуже потрібні
Просто пам'ятайте, що програми пишуться для користувачів, а не користувачі існують для програм.
> І взагалі, це була помилкова весь мс.
> Аргументи ?Багато розробників (у тому числі й частково мс) забили на підтримку цього режиму.
> Багато розробників (у тому числі й частково мс) забили на > підтримку цього режиму
Не твоє імхо, а посилання.
І взагалі - в 1 я пожартував. Сам я, звичайно, підтримую роботу в різних розмірах шрифтів :))))), добре, що за мене це успішно робить дельфі.
Зауважу, що за > 120dpi (тобто більше, ніж великий шрифт) погано починають працювати і офісні програми - в діалогах іноді слівця наїжджають трохи один на одного.
А взагалі – пропоную на цю тему забити, як на безперспективну.
Також готовий визнати свою помилку: фразу "Багато розробників (у тому числі й частково мс) забили на підтримку цього режиму" замінюю на , "трапляється так, що при великих шрифтах видно рідкісні глюки в екранних формах коректно працюють у маленьких шрифтах" .
Коли буде більше часу, обіцяю надати солідні аргументи на доказ останньої фрази у лапках.
> Тимохів> І взагалі, це була помилкова весь мс.
Це одна з рідкісних дуже хороших і корисних "весів" "мс"
Вдома у мене раніше був 14" монітор. Я робив 1024/768 + великий шрифт - і чудово! Розміри - як у 800/600, а якість зображення покращується на 40%!
І програми пишу на великомушрифті, і не тільки на Delphi (справа не в Delphi, Windows треба вміти користуватися)
ПовторюКоли буде більше часу, обіцяю представити солідні аргументи на доказ фрази: трапляється так, що при великих шрифтах видно рідкісні глюки в екранних формах, що коректно працюють у маленьких шрифтах.
Це не глюки, а результат ракалізму програмістів, які їх робили.
А хто без гріха? Помилятися властиво всім, у тому числі і програмістам MS. Але робити далекосяжні висновки з помилок все-таки не слід, так як це вже трохи інакше називається.
та не роблю я. як ви сказали "твоє імхо". так, напевно, це суто моє імхо.
>Під "забили" я мав на увазі наступне - просто ігнорують цей >параметр. Зокрема, у мене за такою справою помічений Norton Antivirus - шрифти як були маленькі, так і залишилися. Також дрібні шрифти помічені в заставках офісних програм.
Даю конкретне посилання: http://cpr.biblio-globus.ru/small_font_defence.htm
Взагалі кажучи тут два рішення: 1. Забити на бажання користувача мати великі шрифти та виводити все одно в тих, яких хочеться (наприклад, як на цьому сайті – у мене ігнорується значення з меню Вид/Розмір шрифту). Якщо мені треба це зробити, то я цього завжди домагався тим, що встановлював runtime font.height, а не font.size. Можливо я недостатньо освічений і цього можна досягти іншими способами, але цього було достатньо, т.к. я в дизайн таймі нічого не створюю – тільки в рантаймі. Ігнорування бажання користувача имхо прийнятно, коли форма дуже навернена, тобто. збільшуватися нема куди.
2. Врахувати бажання користувача. Тут начебто взагалі все просто – дельфі про насподбав. Малює форму, scaled = true і все - все саме розсунеться і збільшиться. Зауважу, що важливо, копоненти не розташовувати впритул з точністю до точки - треба залишати пару точок. Якщо це робити (тобто. все ставити впритул), що буває, що з пропорційному збільшенні рядки налазять друг на друга. Я так розумію, що це через заокруглення при множенні на коефіцієнт.
Перепрошую, якщо сказав, щось не те - в дизайн таймі давно не працював. Написав же це для того, щоб обілити себе в очах Ігоря Шевченка :)))
Люди! Ось постійно на такі питання відповідь одна: треба робити правильно! Так, суперечці немає. Але особисто мені ще жодного разу не трапилася предметна відповідь на копит "а як саме це робити правильно"? 1>А чи є соотв. посібник від MS, де б ця методика описувалася? Щось ніколи мені не траплялося.
А може знайдеться сміливий, хто нормально розпише як? Або як завжди "нова хава"?
> А чи є соотв. керівництво від MS, де ця методика > описувалася?
> А може таки знайдеться сміливий, хто нормально розпише як?
А начебто в fido7.ru.delphi в розділі FAQ було написано? Я, знов-таки, давно не дивився, але можна пошукати в неті, цей FAQ у багатьох місцях продубльований, може, навіть на сайті Підгорецького.
> Але MS у своїх продуктах це якось явно інакше робить! >
Робить інакше, викликом MulDiv та GetDeviceCaps(. LOGPIXELSY) :)
re [21] Дякую за посилання. Розбиратимуся.
To Тимохов Варіант 3 - коли продукт пишеться під конкретного замовника простіше спочатку з'ясувати чи використовує він "збільшений" режим і чи збирається використовувати. У більшості випадків обидві відповіді "ні".
re [28] Тільки уконкретного замовника 50 комп'ютерів і стільки ж користувачів. Не будеш же кожен перевіряти. З.И. Просто у третього користувача, у якого я це перевіряв було 120dpi
re(29) Там написано - варіант.. У моїх поки що 4 компа макс. :).