|
Как вычислить ширину текста с заданным шрифтом и размером? |
☑ |
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;
}
для разового применения сойдет (для файловой базы)
вот результат:
|
|
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
|
|
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) скрин видишь?
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший