Отчеты. Рамки

Автор:K0
Дата:19.02.2003
Просмотров:2785
Скачиваний:703
Оценка: - , Оценок - 0
Скачать (rar-файл; Размер - 5203)

Обсудить в форуме

Описание

Пример состоит из класса TcGrid, позволяющего получать любой символ рамки, и реализации TcGrid при выводе произвольного текста в рамке (TGrdText).

Класс TcGrid имеет один метод pv(Par[,Col][,Row]), где
Par - двоично-десятичный код символа рамки (число). Принцип кодирования - в зависимости от расположения частей символа рамки по сторонам света: запад-север-юг-восток, например
1111 - крест
1001 - горизонтальная линия
0110 - вертикальная линия
0000 - пробел;
Col,Row - флаги двойной линии символа рамки по вертикали и по горизонтали соответственно = 1 (по умолчанию(0) - одинарная линия).

В классе TGrdText метод pbR (text) оформляет строку текста в рамку (каждому слову - отдельную ячейку).

- Чтобы выполнить код, необходима версия RSL не ниже 893.
- Для серъёзного использования в отчетах вышеописанного кода требуется дальнейшая доработка.

Текст примера

 import "l_bxline";
macro pTestcGrid (o,c,r) 
  [Test TcGrid. DoubleCol=# DoubleRow=#](piVnU(c),piVnU(r));
[#](o.pv(11  ,c,r) + o.pv(1011,c,r) + o.pv(1010,c,r));
[#](o.pv(111 ,c,r) + o.pv(1111,c,r) + o.pv(1110,c,r));
[#](o.pv(101 ,c,r) + o.pv(1101,c,r) + o.pv(1100,c,r));
[#](o.pv(1001,c,r) + o.pv	    + o.pv(110 ,c,r));
[ ]
end;
macro pTestcGrAll 
	var o = TcGrid;
	pTestcGrid(o);
	pTestcGrid(o,1);
	pTestcGrid(o,0,1);
	pTestcGrid(o,1,1);
end;
class TGrdText (g,c)
	var aL, bF = True, oG = g, iC = c;
	macro paLen(a) var t=aL,i=a.Size; aL=pTA; 
		while (pvDec(i)+1) al(i)=StrLen(a(i))+1 end; 
	Return t end;
	macro pbR(s)
		var a = pasWord (s), b = paLen(a);
		if (bF) bF = False end;
		[#](psLineGr(oG,b,aL,ic));
		[#](TsLnTxtGr(oG,a,ic))
	end;
	macro Destructor if (not bF) [#](psLineGr(oG,aL,null,ic)) end end
end;
macro pTestGrTxt (c) 
	var o = TGrdText(TcGrid,c);
	o.pbR("жертвам рамок");
	o.pbR("привет от RSL");
end;

pTestcGrAll;
pTestGrTxt; 
pTestGrTxt(1);