procedure TDiscussionPanel.CreateTable(MLeft, MWidth: integer; DText: string);
const
border = 8;
var
tblData: TTableData;
i, j, TotalWidth: integer;
begin
tblData := ParseMarkdownTable(DText);
FTable := TStringGrid.Create(Parent);
FTable.Parent := Self;
FTable.ScrollBars:=ssNone;
FTable.Font.Size := 12;
FTable.DefaultRowHeight := (FTable.Font.Size + 1) * 2;
Self.Height := FTable.DefaultRowHeight * tblData.RowCount;
FTable.FixedRows:=0;
FTable.RowCount := tblData.RowCount;
FTable.ColCount := tblData.ColCount;
FTable.Flat := TRUE;
FTable.ParentColor:=TRUE;
FTable.BorderColor := clBlueSilver;
FTable.Options:=[goFixedHorzLine, goFixedVertLine, goHorzLine, goRangeSelect, goVertLine];
FTable.FixedCols:=0;
if tblData.Header then begin
FTable.FixedRows:=1;
FTable.FixedGridLineColor := clBlueSilver;
FTable.OnPrepareCanvas := @TablePrepareCanvas;
end;
FTable.GridLineColor := clBlueSilver;
FTable.TitleFont.Color := clBlueSilver;
FTable.Font.Color := clBlueSilver;
TotalWidth := 0;
for J := 0 to tblData.RowCount - 1 do begin
for i := 0 to FTable.ColCount - 1 do begin
FTable.Cells[i, j] := tblData.ColRow[i, j];
if j = FTable.RowCount - 1 then begin
FTable.AutoSizeColumn(i);
TotalWidth := TotalWidth + FTable.ColWidths[i];
end;
end;
end;
FTable.Width := TotalWidth + 1;
FTable.Height:= (FTable.DefaultRowHeight + 1) * (FTable.RowCount + 2);
FTable.Anchors:=[akTop, akBottom];
FTable.AnchorSide[akTop].Control := FTable.Parent;
FTable.AnchorSide[akTop].Side := asrTop;
FTable.AnchorHorizontalCenterTo(Parent);
FTable.AnchorSideBottom.Control := FTable.Parent;
FTable.AnchorSideBottom.Side := asrBottom;
FTable.BorderSpacing.Left := border;
FTable.BorderSpacing.Right:= border;
FTable.BorderSpacing.Bottom:= border;
FTable.BorderSpacing.Top:=border;
FLeft := MLeft;
FWidth:= MWidth;
FTable.Left := FLeft + (FWidth - FTable.Width) div 2;
end;