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]