Neues Thema zu meinem Umstiegsprojekt:
Auf Basis von WPTools4 wurden in unser Darstellungsformat auch Tabellenbegrenzungen übertragen.
Die Begrenzungen wurden mit WPTools4 zunächst wie folgt berechnet:
Code
procedure TStRtfToEntity.OutputTableGrid(aText: TWPRichText; aSaveBox: TSaveBox);
var
par: PTParagraph;
lin: PTLine;
Area: TRect;
r: integer;
c: integer;
begin
par := aText.FirstPar;
Area.Left := 0;
Area.top := 0;
while par <> nil do begin
if (paprIsTable in par^.prop) and (par^.celldef <> nil) then begin
aText.ActivePar := par;
//Area.Right := Area.Left+aText.TableCellWidth;
if (aText.TableRowCount > 0) and (aText.TableColCount > 0) then begin
lin := par^.line;
Area.top := lin^.y_start;
for r := 0 to aText.TableRowCount - 1 do begin
aText.TableRowNumber := r;
Area.Left := 0;
for c := 0 to aText.TableColCount - 1 do begin
aText.TableColNumber := c;
if aText.TableColNumber <> c then begin
//wptools-Fehler: TableColCount bei 1-spaltiger Tabelle ist 2!
continue;
end;
Area.Right := Area.Left + aText.TableCellWidth;
lin := aText.ActiveLine; // par^.line;
Area.bottom := {Area.Top+} lin^.y_start;
repeat
Area.bottom := Area.bottom + lin^.Height;
// Area.bottom := Area.bottom + lin^.b_xtra;
lin := lin^.next;
until lin = nil;
SaveRectangle(aText, Area, aSaveBox, par); //^.border);
Area.Left := Area.Right;
par := par^.next;
aText.ActivePar := par;
end;
Area.Top := Area.bottom;
end;
end
else begin
par := par^.next;
end;
end
else begin
par := par^.next;
end;
end;
end;
Alles anzeigen
Das hat so bisher für unsere RTF-Dateien funktioniert und müsste jetzt irgendwie wieder als Feature restauriert werden.
Soweit ich da sehe, hat sich da einiges geändert.
Ich habe bisher lediglich eine Codeskelet hinbekommen, um durch die Paragraphen der Tabelle zu traversieren. Bei
der Größe des Zellen-Rechtecks komme ich dann schon nicht mehr weiter...
Code
par := aText.FirstPar;
Area.Left := 0;
Area.top := 0;
while par <> nil do begin
if par.ParagraphType = WpIsTable then begin
par := par.next;
aText.ActiveParagraph := par;
while
Assigned(par)
and (par.ParagraphType = WpIsTableRow)
//and Assigned(par.ParentPar)
//and (par.ParentPar.ParagraphType = WpIsTable)
do begin
par := par.next;
while assigned(par) and (par.ParagraphType = WpIsStdPar)
and assigned(par.ParentPar) and (par.ParentPar.ParagraphType = WpIsTableRow) do begin
par := par.next;
end;
end;
end
else begin
par := par.next;
end;
end;
Alles anzeigen