|
Example: table to text |
Top Previous Next |
|
This example "removes" the table at the caret position without removing its content. This is an editing operation, it can be undone by the user. procedure ConvertTableToText(RichViewEdit: TCustomRichViewEdit); var table: TRVTableItemInfo; rv: TRichView; rve: TCustomRichViewEdit; Stream: TMemoryStream; ItemNo,r,c: Integer; begin if not RichViewEdit.GetCurrentItemEx(TRVTableItemInfo, rve, TCustomRVItemInfo(table)) then exit; try rv.Visible := False; rv.Parent := RichViewEdit.Parent; rv.Style := RichViewEdit.Style; rv.RVFTextStylesReadMode := rvf_sIgnore; rv.RVFParaStylesReadMode := rvf_sIgnore; for r := 0 to table.RowCount-1 do for c := 0 to table.ColCount-1 do if table.Cells[r,c]<>nil then begin Stream := TMemoryStream.Create; try table.Cells[r,c].GetRVData.SaveRVFToStream(Stream, False, clNone, nil, nil); Stream.Position := 0; rv.InsertRVFFromStream(Stream, rv.ItemCount) finally Stream.Free; end; end; ItemNo := table.GetMyItemNo; // like rve.GetItemNo(table), but faster Stream := TMemoryStream.Create; try rv.SaveRVFToStream(Stream, False); Stream.Position := 0; rve.SetSelectionBounds(ItemNo, 0, ItemNo, 1); rve.InsertRVFFromStreamEd(Stream); finally Stream.Free; end; finally rv.Free; end; end; The same for C++Builder: void ConvertTableToText(TCustomRichViewEdit* RichViewEdit) { TCustomRVItemInfo *item; TCustomRichViewEdit *rve; if (! RichViewEdit->GetCurrentItemEx(__classid(TRVTableItemInfo), rve, item)) return; TRVTableItemInfo*table = (TRVTableItemInfo*)item; TRichView* rv = new TRichView((TComponent*)NULL); rv->Visible = false; rv->Parent = RichViewEdit->Parent; rv->Style = RichViewEdit->Style; rv->RVFTextStylesReadMode = rvf_sIgnore; rv->RVFParaStylesReadMode = rvf_sIgnore; for (int r=0; r<table->RowCount; r++) for (int c=0; c<table->ColCount; c++) if (table->Cells[r][c]) { TMemoryStream*Stream = new TMemoryStream; table->Cells[r][c]->GetRVData()->SaveRVFToStream(Stream, false, clNone, NULL, NULL); Stream->Position = 0; rv->InsertRVFFromStream(Stream, rv->ItemCount); delete Stream; } int ItemNo = table->GetMyItemNo(); TMemoryStream*Stream = new TMemoryStream; rv->SaveRVFToStream(Stream, false); Stream->Position = 0; rve->SetSelectionBounds(ItemNo, 0, ItemNo, 1); rve->InsertRVFFromStreamEd(Stream); delete Stream; delete rv; } |