![]() |
![]() |
![]() |
|
Как вычислить ширину текста с заданным шрифтом и размером? | ☑ | ||
---|---|---|---|---|
0
DJ Anthon
16.08.13
✎
16:44
|
Вот, рисую объявление на взнос наличными. Надо, чтобы после текста появились двойные полоски, делаю их объектами типа Рисунок, а куда их разместить - зависит от ширины текста в ячейке. Шрифт править не хочу. Придется использовать моноширинный шрифт?
|
|||
1
Torquader
16.08.13
✎
23:57
|
В данных Шрифта TrueType есть размеры каждого символа - просто каким-то образом нужно оттуда получить.
|
|||
2
DJ Anthon
17.08.13
✎
13:05
|
Вы будете смеяться, но я сделал ;)
//Anthon -< макет переписан! СП = СтрЗаменить(ЧислоПрописью(Цел(Выборка.СуммаДокумента), "Л=ru_RU; ДП=Ложь"), " 00", ""); СтруктураЗначенийПолей.Вставить("СуммаПрописью", СП); СтруктураЗначенийПолей.Вставить("Копейки", Прав(Выборка.СуммаДокумента, 2)); Жесть = 0; ЗапуститьПриложение(НСтр(СтрокаСоединенияИнформационнойБазы(), "File") + "\FontWidth.exe СуммаПрописью: " + СП, НСтр(СтрокаСоединенияИнформационнойБазы(), "File"), Истина, Жесть); ТабДокумент.Рисунки.D55.Ширина = ТабДокумент.Рисунки.D55.Ширина + ТабДокумент.Рисунки.D55.Лево - Жесть / 3.7; ТабДокумент.Рисунки.D55.Лево = Жесть / 3.7; //Anthon -> где FontWidth - быстро накатанная на билдере софтинко с одной формой под нужный шрифт с кодом void __fastcall TForm1::FormShow(TObject *Sender) { AnsiString S = ""; for (long i = 1; i < _argc; i++) S = S + _argv[i] + (i + 1 == _argc ? "" : " "); Application->Tag = Canvas -> TextWidth(S.c_str()); Close(); } WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { ... } return Application->Tag; } для разового применения сойдет (для файловой базы) вот результат: http://i46.fastpic.ru/big/2013/0817/6c/169100846f626dc39468b108241f726c.jpg |
|||
3
Torquader
17.08.13
✎
16:49
|
Можно было и напрямую получить данные из файла шрифта или из промежуточного файла, куда загрузить подготовленные по файлу шрифта данные.
P.S. поле html-документа позволяет через методы html получать данные о размере области с текстом. |
|||
4
DJ Anthon
18.08.13
✎
16:39
|
(3) буду знать, спасибо. какая функция за это отвечает, не подскажете?
|
|||
5
Torquader
18.08.13
✎
22:15
|
(4) Там несколько:
getBoundingRect потом offsetWidth и scrollWidth http://msdn.microsoft.com/en-us/library/ff976074(v=vs.85).aspx |
|||
6
DJ Anthon
21.08.13
✎
07:53
|
(5) спасибки )
П. С. а как вернуть фокус 1Ске после команды ЗапуститьПриложение? А то она сбрасывает на первую попавшуюся открытую программу, несмотря на то, что я сделал, чтобы запускаемая программа вообще не появлялась... |
|||
7
1Сергей
21.08.13
✎
08:06
|
||
такие полоски? = или такие? |
|||
8
Balabass
21.08.13
✎
08:16
|
(7) Скорее всего не так все просто ;0
|
|||
9
DJ Anthon
21.08.13
✎
08:19
|
(7) скрин видишь?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |