Как сбросить форматирование текста

<< Нажмите, чтобы показать Содержание >>

Как сбросить форматирование текста

Если используются шаблоны стиля, можно просто вызвать 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