|
<< Нажмите, чтобы показать Содержание >> Как сбросить форматирование текста |
Если используются шаблоны стиля, можно просто вызвать ApplyStyleTemplate(-1). Такая очистка текста выполняется как операция редактирования. Она не меняет маркеров абзаца.
Приведённый ниже код удаляет форматирование текста из всего документа.
Он заменяет номера всех стилей текста и абзацев на 0. При необходимости гиперссылки можно сохранить – они преобразуются в гипертекстовый стиль с наименьшим номером.
При необходимости также можно удалить маркеры списков.
Этот код изменяет текстовые элементы, табуляции и маркеры списков. Все остальные типы элементов остаются без изменений.
Примечание: Это не операция редактирования. При вызове для TRichViewEdit необходимо очистить буфер отмены.
procedure RemoveFormatting(RVData: TCustomRVData;
RemoveMarkers, KeepLinks: Boolean);
var
i, HypertextStyleNo: Integer;
{.............................................................}
procedure DoRemoveFormatting(RVData: TCustomRVData);
var
i, r, c, StyleNo, StyleNoTo: Integer;
PB: Boolean;
table: TRVTableItemInfo;
begin
for i := RVData.ItemCount-1 downto 0 do
begin
RVData.GetItem(i).ParaNo := 0;
StyleNo := RVData.GetItemStyle(i);
case StyleNo of
rvsTable:
begin
table := TRVTableItemInfo(RVData.GetItem(i));
for r := 0 to table.RowCount-1 do
for c := 0 to table.ColCount-1 do
if table.Cells[r,c]<>nil then
DoRemoveFormatting(table.Cells[r,c].GetRVData);
end;
rvsListMarker:
if RemoveMarkers then begin
PB := RVData.PageBreaksBeforeItems[i];
RVData.DeleteItems(i, 1);
if i<RVData.ItemCount then
begin
RVData.GetItem(i).SameAsPrev := False;
RVData.GetItem(i).PageBreakBefore := PB;
end;
end;
rvsTab:
if RVData.GetRVStyle.TextStyles[
TRVTabItemInfo(RVData.GetItem(i)).TextStyleNo].Jump and
KeepLinks then
TRVTabItemInfo(RVData.GetItem(i)).TextStyleNo :=
HypertextStyleNo
else
begin
TRVTabItemInfo(RVData.GetItem(i)).TextStyleNo := 0;
RVData.SetItemTag(i, '');
end;
1..MaxInt:
begin
if KeepLinks and
RVData.GetRVStyle.TextStyles[StyleNo].Jump then
StyleNoTo := HypertextStyleNo
else
begin
StyleNoTo := 0;
RVData.SetItemTag(i, '');
end;
RVData.GetItem(i).StyleNo := StyleNoTo;
end;
end;
end;
end;
{.............................................................}
begin
HypertextStyleNo := 0;
if KeepLinks then
for i := 0 to RVData.GetRVStyle.TextStyles.Count-1 do
if RVData.GetRVStyle.TextStyles[i].Jump then
begin
HypertextStyleNo := i;
break;
end;
DoRemoveFormatting(RVData);
end;
Как использовать:
RemoveFormatting(RichViewEdit1.RVData, True, True);
// из RVNormalize.pas, из Инструментов интерфейса ТРВ (RichViewActions)
NormalizeRichView(RichViewEdit1.RVData);
RichViewEdit1.DeleteUnusedStyles(True, True, True);
RichViewEdit1.ClearUndo;
RichViewEdit1.Format;