Имя: Пароль:
1C
1С v8
Как вычислить ширину текста с заданным шрифтом и размером?
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) скрин видишь?