On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



Пост N: 43
Зарегистрирован: 04.12.07
ссылка на сообщение  Отправлено: 01.09.08 15:53. Заголовок: Печать текста с автопереносом


Привет всем !

Пробую делать отчеты в HMG-Ext библиотеке WinReport. Нужно реализовать часто востребованную печать текста в определённом прямоугольном месте так, чтобы этот текст, если не вмещается переносился на следующую строку в пределах определённого пространства. Вроде бы подходит DRAW TEXT, но она у меня вообще не работает в WinReport. Кроме того, в описаниях секций WinReport-отчета нужно указывать количество строк через дробь. А если не известно. Да и для разных шрифтов кол-во строк будет разным.
Кто занимался этой проблемой, будьте добры, подскажите мне, во-первых, почему у меня не работает DRAW TEXT и получу ли я с его помощью результат. А если нет - то как это можно решить.
Спасибо

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 2 [только новые]





Пост N: 74
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 03.09.08 04:58. Заголовок: В этой очень хорошей..


В этой очень хорошей (функциональной) библиотеке которой я сам пользуюсь
есть несколько касяков=авторская фича.
1. Не дает менять вертикальное выравнивание кроме как BASE_LINE
HB_FUNC (RR_SETTEXTALIGN)
{
hb_retni(SetTextAlign(hDC,TA_BASELINE|hb_parni(1)));
}
А это очень важно. Я долго шизел почему у меня DRAW TEXT рисует только хвостики букв.
Потому что начало зоны для вывода текста из DRAW TEXT совпадает с BASE_LINE первой строки текста.

Я об этом писал в свое время. Предлагал исправить авторскую версию библиотеки.
Но народ отказал ссылаясь на проблемы совместимости.

Для себя я внес следующие исправления

METHOD DrawText(row,col,torow,tocol,txt,style,defname) CLASS HBPrinter
local lhf:=::getobjbyname(defname,"F"), n:=0
if(torow==NIL,torow:=::maxrow,"")
if(tocol==NIL,tocol:=::maxcol,"")
n:=rr_drawtext(::Convert({row,col}),::Convert({torow,tocol}),txt,style,lhf)
return n //self
возвращает вертикальный размер текста (со всеми переносами)
можно узнать где реально закончился текст.
Мало того - можно узнать этот размер не рисуя текст реально чтобы оценить - поместится ли текст на остатке листа или полосы или ...

HB_FUNC (RR_STARTPAGE)
{
StartPage( hDC );
//SetTextAlign(::hDC,TA_BASELINE)
SetTextAlign(::hDC,TA_TOP);
}
тут все и так понятно - мне удобно отсчитывать положение строки от ее верхнего края
.....
//hb_retl(TextOut( hDC , hb_parni(2,2),hb_parni(2,1)+devcaps[16], hb_parc(1),hb_parclen(1)));
hb_retl(TextOut( hDC , hb_parni(2,2),hb_parni(2,1), hb_parc(1),hb_parclen(1)));
....

уже не помню что такое devcaps[16]

HB_FUNC (RR_CREATEMFILE)
{
RECT emfrect;
SetRect(&emfrect,0,0,GetDeviceCaps(hDCRef, HORZSIZE)*100,GetDeviceCaps(hDCRef, VERTSIZE)*100);
hDC=CreateEnhMetaFile(hDCRef,NULL,&emfrect,"hbprinter\0emf file\0\0");
//SetTextAlign(hDC,TA_BASELINE);
SetTextAlign(::hDC,TA_TOP);
preview=1;
hb_retnl((LONG) hDC);
}

HB_FUNC (RR_SETTEXTALIGN)
{
//hb_retni(SetTextAlign(hDC,TA_BASELINE|hb_parni(1)));
hb_retni(SetTextAlign(hDC,hb_parni(1)));
}


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 44
Зарегистрирован: 04.12.07
ссылка на сообщение  Отправлено: 03.09.08 09:24. Заголовок: Спасибо


Спасибо SADSTAR2. Попробую твои доработки

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 15
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет