StillZero писал(а):объяснили тут мне...наконец таки

... что ты хочешь - удобной записи

слава богу...
StillZero писал(а):задело меня конечно, что говорить, Mixer-а притянул... вообщем можно все сделать...
Код почти как у меня...

теперь зацените мой (100% рабочий)
Код: Выделить всё
!!!!!!!!!!!!!!!!!!!!!объявим это все безобразие!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
PropClass CLASS, TYPE ! класс с общими свойствами для элементов отчета
Txt ASTRING ! имя / заголовок / текст
! общие свойства для отчета
BGCOLOR LONG
HTMLCOLOR PROCEDURE(), STRING
FONT STRING(30) ! шрифт заголовков / текста
CFONT LONG ! цвет заголовков / текста
Bold BYTE
Italic BYTE
SIZEFONT BYTE ! размер шрифта
SetFont PROCEDURE(<STRING inFONT>, <BYTE inSIZEFONT>, <LONG inCFONT>, <BYTE inBold>, <BYTE inItalic>)
END
ReportContents CLASS(PropClass), TYPE
NTables BYTE ! число объектов
Construct PROCEDURE() ! констуктор
Destruct PROCEDURE()
TablesQ &TablesQUEUE
AddTable PROCEDURE(BYTE NRows, BYTE NCols)
GenHTML PROCEDURE()
Tables PROCEDURE(BYTE NTable)
END
TablesQUEUE QUEUE, TYPE
TableObj &TableClass
END
TableClass CLASS(PropClass), TYPE
NR BYTE
NC BYTE
bodrer_wid BYTE !width in pt
RowsQ &ROWQUEUE
Construct PROCEDURE()
Destruct PROCEDURE()
AddRow PROCEDURE(BYTE NCells)
MergeCells PROCEDURE(BYTE I, BYTE J, BYTE K, BYTE L) ! объединить ячейки (квадрат)
SetHeight PROCEDURE(BYTE I, LONG Hei) ! высота I-ой строки
SetWidth PROCEDURE(BYTE J, LONG Wid) ! ширина I-ого столбца
Cells PROCEDURE(BYTE I, BYTE J)
GenHtmlTable PROCEDURE()
END
ROWQUEUE QUEUE, TYPE
Height LONG
CellsQ &CellQUEUE
END
CellQUEUE QUEUE, TYPE
Width LONG
Cell &CellClass
END
CellClass CLASS(TableClass), TYPE
skip BYTE
vert_merge BYTE
hor_merge BYTE
END
CurRep &ReportContents
CurTable &TableClass
CurCell &CellClass
S STRING(20)
!!!!!!!!!!!!!!методы(правда не все :))!!!!!!!!!
ReportContents.Construct PROCEDURE()
CODE
Self.SetFont('Arial', 16, 'color:black', True)
Self.BGCOLOR = 'color:white'
self.TablesQ &= new TablesQUEUE
ReportContents.Destruct PROCEDURE()
CODE
LOOP I#=1 TO RECORDS(self.TablesQ)
GET(self.TablesQ, I#)
dispose(self.TablesQ.TableObj)
END
dispose(self.TablesQ)
ReportContents.AddTable PROCEDURE(BYTE NRows, BYTE NCols)
CODE
IF NRows AND NCols THEN
self.TablesQ.TableObj &= new TableClass
ADD(self.TablesQ)
self.TablesQ.TableObj.NR=NRows
self.TablesQ.TableObj.NC=NCols
LOOP NR#=1 TO NRows
self.TablesQ.TableObj.AddRow(NCols)
END
self.NTables+=1
ELSE
Message('Не верно заданы параметры таблицы!')
END
ReportContents.Tables PROCEDURE(BYTE NTable)
CODE
GET(self.TablesQ, NTable)
CurTable&=self.TablesQ.TableObj
TableClass.Construct PROCEDURE()
CODE
Self.SetFont('Arial', 12, 'color:black', True, True)
Self.BGCOLOR = 'color:white'
self.ROWSQ &= new ROWQUEUE
TableClass.Destruct PROCEDURE()
CODE
LOOP I#=1 TO RECORDS(self.ROWSQ)
GET(self.ROWSQ, I#)
LOOP J#=1 TO RECORDS(self.ROWSQ.CellsQ)
GET(self.ROWSQ.CellsQ, J#)
dispose(self.ROWSQ.CellsQ.Cell)
END
dispose(self.ROWSQ.CellsQ)
END
dispose(self.ROWSQ)
TableClass.AddRow PROCEDURE(BYTE NCells)
CODE
self.ROWSQ.CellsQ &= new CellQUEUE
ADD(self.ROWSQ)
LOOP NC#=1 TO NCells
self.RowsQ.CellsQ.Cell &= new CellClass
self.RowsQ.CellsQ.Cell.skip = 0
ADD(self.ROWSQ.CellsQ)
END
TableClass.MergeCells PROCEDURE(BYTE I, BYTE J, BYTE K, BYTE L)
CODE
LOOP NR#=I TO K
LOOP NC#=J TO L
GET(self.Rowsq, NR#)
GET(self.Rowsq.CellsQ, NC#)
IF NR#=I AND NC#=J THEN
self.RowsQ.CellsQ.Cell.vert_merge=K-NR#
self.RowsQ.CellsQ.Cell.hor_merge=L-NC#
ELSE
self.RowsQ.CellsQ.Cell.skip = 1
END
END
END
TableClass.SetHeight PROCEDURE(BYTE I, LONG Hei)
CODE
GET(self.RowsQ, I)
self.RowsQ.Height=Hei
TableClass.SetWidth PROCEDURE(BYTE J, LONG Wid)
CODE
GET(self.RowsQ, 1)
GET(self.RowsQ.CellsQ,J)
self.RowsQ.CellsQ.Width=Wid
TableClass.Cells PROCEDURE(BYTE I, BYTE J)
CODE
GET(self.RowsQ, I)
GET(self.RowsQ.CellsQ,J)
CurCell&=self.RowsQ.CellsQ.Cell
А вот так я с ним работаю...
Код: Выделить всё
RC &ReportContents
N SHORT
CODE
RC&=NEW(ReportContents)
RC.Txt='Заголовок отчета'
LOOP N=1 TO 100 ! напечатаем 100 таблиц
RC.AddTable(8,10) ! создадим таблицу 8*10
RC.Tables(N)
CurTable.Txt='Заголовок таблицы '&N
Message(CurTable.Txt)
CurTable.MergeCells(1,1,1,2) ! объединение 2 по горизонтали
CurTable.MergeCells(1,3,2,4) ! объединение 4-ех
LOOP I#=5 TO 10
CurTable.MergeCells(1,I#,2,I#) ! объединение 2 по вертикали
END
LOOP I#=1 TO 8
LOOP J#=1 TO 10
CurTable.Cells(I#,J#)
CurCell.Txt='Текст '&I#&'.'&J#
IF I#<=2 THEN
CurCell.Bold=True
CurCell.BGCOLOR=0EFEFEFH
END
END
END
END
RC.GenHTML()
dispose(RC)
по моему вполне читаемо... однако проблема остается...
StillZero писал(а):
если реализуешь пиши, интересно
удачи

на счет вывода в одну строку у самого большие сомнения...
Кларион позволяет возвращать лишь указатель на класс, т.е. например метод Tables можно записать так:
Код: Выделить всё
Tables PROCEDURE(BYTE NTable), *TableClass
ReportContents.Tables PROCEDURE(BYTE NTable)
CODE
GET(self.TablesQ, NTable)
RETURN(self.TablesQ.TableObj)
но, что дальше...

address(RC.Tables(i))
.Txt так например не дает...
ЗЫ спасибо за внимание

[/b]