Якщо коротко нагадати, то все можна описати досить просто:
<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 |
Звичайно, наведені функції не вміють робити таких речей, як, наприклад, об'єднання комірок. Але це лише шаблон, який можна використовувати для нарощення функціональності.
Немає коментарів :
Дописати коментар