Расчёт ширины строки

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Расчёт ширины строки

Сообщение Игорь Столяров »

Привет всем !

Существует ли какой-то алгоритм (или методика) расчёта ширины строки символов текущим шрифтом ?

Пример:
- В окне показана символьная строка, ширина (Width) строки известна.
- Строке присваиваются различные наименования из БД;
- Требуется на момент показа знать, отобразилось наименование полностью или оно
обрезано из-за недостатка места (ну и вывести предупреждение или поменять цвет строки и т.д.)

Для моноширинного шрифта (Courier, Consolas и т.д.), методом тыка можно подобрать коээфициент
связи кол-ва символов в строке и её ширины. Но что делать с "обычными" Arial, Times и т.д. шрифтами ?

Какой-то тупик. :( Буду благодарен за любую наводку.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Расчёт ширины строки

Сообщение Дед Пахом »

Вот здесь например: https://stackoverflow.com/questions/172 ... -in-pixels
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Расчёт ширины строки

Сообщение Игорь Столяров »

Как я понял, там та же методика, что в Clarion используется для определения размера картинки.
Т.е. вывести "как есть" и потом получить размер того что вывелось ...

Можно попробовать заюзать это со строкой с шириной Default ...
Даже не представляю, будет менять строка ширину в зависимости от текста или нет. :)
Буду пробовать. Спасибо ! :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Расчёт ширины строки

Сообщение Дед Пахом »

Кстати, можно без всякого API. Создаём строку CREATE(0, create:string), присваиваем ей шрифт и значение, получаем длину, делаем DESTROY.
С уважением, ДП
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Расчёт ширины строки

Сообщение finsoftrz »

Можно просто скрытую строку использовать...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Расчёт ширины строки

Сообщение Игорь Столяров »

Дед Пахом писал(а): 20 Декабрь 2017, 22:21Кстати, можно без всякого API. Создаём строку CREATE(0, create:string), присваиваем ей шрифт и значение, получаем длину, делаем DESTROY.
Спасибо - всё работает.
В моём случае - все параметры строки наследуются из родительского окна:

Код: Выделить всё

  i# = Create(0,Create:String)

  If i#
     i#{Prop:Text} = 'Маленькой ёлочке холодно зимой'
     Message(Len(Clip(i#{Prop:Text})) & ' -> ' & i#{Prop:Width})

     i#{Prop:Text} = 'ЖШЩЮШШШШWWWMMMMZZZUUUUUФФЫЫЫЫЫ'
     Message(Len(Clip(i#{Prop:Text})) & ' -> ' & i#{Prop:Width})
  end

  Destroy(i#)
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить