Якщо коротко нагадати, то все можна описати досить просто:
<table> <tbody> <tr> <td>...</td> </tr> </tbody> <table>
Основна задача наведеної функції - спрощення створення та стандартизація оформлення таблиць у всьому проекті. Константа C_TABLE_TAG за допомогою атрибутів описує зовнішній вигляд, форматування елементів таблиці. В якості параметрів передається одне значення або варіантний масив назв стовпців. Функція VarIsArray визначає, передався масив чи одне значення. Ширина таблиці задана 100%, знак % замінено на еквівалент % для того, щоб функція Format коректно могла відпрацювати. Знову ж таки, оформлення таблиці - справа корпоративних стандартів та особистих смаків:
function GetTableTag(aColumns: Variant; aTableCaption: string = ''): string; const C_TABLE_TAG = '<TABLE width="100%" border="1" bordercolor="gray" cols="%d" cellspacing="0" cellpadding="2">'; var i : Integer; nArrayBound : Byte; sTableTag : string; sTrTag : string; begin if VarIsArray(aColumns) then begin nArrayBound := VarArrayHighBound(aColumns, 1); sTableTag := Format(C_TABLE_TAG, [nArrayBound]); if (aTableCaption <> '') then sTableTag := Concat(sTableTag, '<CAPTION>', aTableCaption, '</CAPTION>'); sTrTag := '<THEAD><TR bgcolor="#85ACE3">'; for i := VarArrayLowBound(aColumns, 1) to nArrayBound do sTrTag := Concat(sTrTag, '<TH>', VarToStr(aColumns[i]), '</TH>'); sTrTag := Concat(sTrTag, '</TR></THEAD>'); end else begin sTableTag := Format(C_TABLE_TAG, [1]); if (aTableCaption <> '') then sTableTag := Concat(sTableTag, '<CAPTION>', aTableCaption, '</CAPTION>'); sTrTag := Concat('<THEAD><TR bgcolor="#85ACE3"><TH>', VarToStr(aColumns), '</TH></TR></THEAD>') end; Result := Concat(sTableTag, sTrTag); end;
Наповнення таблиці можна реалізувати ще простіше:
class function TvmsHtmlLib.GetTableLineTag(aLineText: Variant): string; var i : Integer; sTrTag : string; begin if VarIsArray(aLineText) then begin sTrTag := '<TR>'; for i := VarArrayLowBound(aLineText, 1) to VarArrayHighBound(aLineText, 1) do sTrTag := Concat(sTrTag, '<TD valign="top">', VarToStr(aLineText[i]), '</TD>'); sTrTag := Concat(sTrTag, '</TR>'); end else sTrTag := Concat('<TR><TD>', VarToStr(aLineText), '</TD></TR>'); Result := sTrTag; end;
Приклад виклику функцій:
procedure TForm1.Button1Click(Sender: TObject); var i : Byte; begin Memo1.Text := GetTableTag(VarArrayOf(['Column1', 'Column2', 'Column3', 'Column4', 'Column5']), 'Some Caption'); for i := 0 to 4 do Memo1.Text := Concat(Memo1.Text, GetTableLineTag(VarArrayOf(['Value1', 'Value2', 'Value3', 'Value4', 'Value5']))); end;
Результат роботи функцій:
Column1 | Column2 | Column3 | Column4 | Column5 |
---|---|---|---|---|
Value1 | Value2 | Value3 | Value4 | Value5 |
Value1 | Value2 | Value3 | Value4 | Value5 |
Value1 | Value2 | Value3 | Value4 | Value5 |
Value1 | Value2 | Value3 | Value4 | Value5 |
Value1 | Value2 | Value3 | Value4 | Value5 |
Звичайно, наведені функції не вміють робити таких речей, як, наприклад, об'єднання комірок. Але це лише шаблон, який можна використовувати для нарощення функціональності.
Немає коментарів :
Дописати коментар