⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rvtable.pas

📁 richview1.7 full.source
💻 PAS
📖 第 1 页 / 共 5 页
字号:
end;
{============================ TRVUndoCellSpitHorz =============================}
procedure TRVUndoCellSpitHorz.Undo(RVData: TRichViewRVData);
var ui: TRVUndoCellSpitHorz;
    table: TRVTableItemInfo;
begin
  table := RVData.GetItem(ItemNo) as TRVTableItemInfo;
  ui := TRVUndoCellSpitHorz(AddTableUndoInfo(RVData, TRVUndoCellSpitHorz,
                             ItemNo, True, False));
  if ui<>nil then begin
    ui.Flag         := not Flag;
    ui.Row          := Row;
    ui.Col          := Col;
    ui.Row2         := Row2;
    ui.OldBestHeight := OldBestHeight;
    ui.DecreaseHeight := DecreaseHeight;
  end;
  if Flag then
    table.Rows.Do_SplitCellHorz(Row,Col,Row2,DecreaseHeight)
  else
    table.Rows.Do_UnSplitCellHorz(Row,Col,Row2,OldBestHeight);
  table.Changed;
end;
{============================== TRVUndoCellSpitVert ===========================}
procedure TRVUndoCellSpitVert.Undo(RVData: TRichViewRVData);
var ui: TRVUndoCellSpitVert;
    table: TRVTableItemInfo;
begin
  table := RVData.GetItem(ItemNo) as TRVTableItemInfo;
  ui := TRVUndoCellSpitVert(AddTableUndoInfo(RVData, TRVUndoCellSpitVert,
                             ItemNo, True, True));
  if ui<>nil then begin
    ui.Flag         := not Flag;
    ui.Row          := Row;
    ui.Col          := Col;
    ui.Col2         := Col2;
    ui.OldBestWidth := OldBestWidth;
    ui.DecreaseWidth := DecreaseWidth;
  end;
  if Flag then
    table.Rows.Do_SplitCellVert(Row,Col,Col2,DecreaseWidth)
  else
    table.Rows.Do_UnSplitCellVert(Row,Col,Col2,OldBestWidth);
  table.Changed;
end;
{============================== TRVUndoDeleteRows =============================}
procedure TRVUndoDeleteRows.Undo(RVData: TRichViewRVData);
var ui: TRVUndoDeleteRows;
    table: TRVTableItemInfo;
    i: Integer;
begin
  table := RVData.GetItem(ItemNo) as TRVTableItemInfo;
  ui := TRVUndoDeleteRows(AddTableUndoInfo(RVData, TRVUndoDeleteRows,
                             ItemNo, True, True));
  if ui<>nil then begin
    ui.Flag         := not Flag;
    ui.Row          := Row;
    ui.Count        := Count;
    if Flag then begin
      ui.Rows := TList.Create;
      for i := 0 to Count-1 do
        ui.Rows.Add(table.Rows[Row+i]);
    end;
  end;
  if Flag then
    table.Rows.Do_DeleteRows(ItemNo, Row,Count,ui)
  else
    table.Rows.Do_UnDeleteRows(Row, Rows);
  table.Changed;
end;
{------------------------------------------------------------------------------}
destructor TRVUndoDeleteRows.Destroy;
var i: Integer;
begin
  if Rows<>nil then begin
    for i := 0 to Rows.Count-1 do
      TObject(Rows[i]).Free;
    Rows.Free;
  end;
  inherited Destroy;
end;
{------------------------------------------------------------------------------}
{
//!!
procedure TRVUndoDeleteRows.ChangeRVData(ARVData: TRichViewRVData;
  Restoring: Boolean);
var r,c: Integer;
begin
  if Rows<>nil then
    for r := 0 to Rows.Count-1 do
      with TObject(Rows[r]) as TRVTableRow do begin
        for c := 0 to Count-1 do
          if Items[c]<>nil then begin
            Items[c].Inserted(ARVData, not Restoring);
            //Items[c].FReservedRVData := ARVData;
            Items[c].FList := nil;
          end;
      end;
end;
}
{================================= TCustomRVUndoWithCells =====================}
{
//!!
procedure TCustomRVUndoWithCells.ChangeRVData(ARVData: TRichViewRVData;
  Restoring: Boolean);
var i: Integer;
begin
  if CellsList<>nil then
    for i := 0 to CellsList.Count-1 do
      if CellsList[i]<>nil then begin
        TRVTableCellData(CellsList[i]).Inserted(ARVData, not Restoring);
        //TRVTableCellData(CellsList[i]).FReservedRVData := ARVData;
        TRVTableCellData(CellsList[i]).FList := nil;
      end;
end;
}
{------------------------------------------------------------------------------}
destructor TCustomRVUndoWithCells.Destroy;
var i: Integer;
begin
  if CellsList<>nil then begin
    for i := 0 to CellsList.Count-1 do
      TObject(CellsList[i]).Free;
    CellsList.Free;
  end;
  inherited Destroy;
end;
{=========================== TRVUndoDeleteCols ================================}
procedure TRVUndoDeleteCols.Undo(RVData: TRichViewRVData);
var ui: TRVUndoDeleteCols;
    table: TRVTableItemInfo;
    r,c: Integer;
begin
  table := RVData.GetItem(ItemNo) as TRVTableItemInfo;
  ui := TRVUndoDeleteCols(AddTableUndoInfo(RVData, TRVUndoDeleteCols,
                             ItemNo, True, True));
  if ui<>nil then begin
    ui.Flag         := not Flag;
    ui.Col          := Col;
    ui.Count        := Count;
    if Flag then begin
      ui.CellsList := TList.Create;
      for r := 0 to table.Rows.Count-1 do
        for c := Count-1 downto 0 do
          ui.CellsList.Add(table.Cells[r,Col+c]);
    end;
  end;
  if Flag then
    table.Rows.Do_DeleteCols(ItemNo, Col,Count, ui)
  else
    table.Rows.Do_UnDeleteCols(Col, CellsList);
  table.Changed;
end;
{================================= TRVUndoCellsClear ==========================}
destructor TRVUndoCellsClear.Destroy;
begin
  RowList.Free;
  ColList.Free;
  inherited Destroy;
end;
{------------------------------------------------------------------------------}
procedure TRVUndoCellsClear.Undo(RVData: TRichViewRVData);
var ui: TRVUndoCellsClear;
    table: TRVTableItemInfo;
    NewCellsList: TList;
begin
  table := RVData.GetItem(ItemNo) as TRVTableItemInfo;
  NewCellsList := nil;
  ui := TRVUndoCellsClear(AddTableUndoInfo(RVData, TRVUndoCellsClear,
                             ItemNo, True, True));
  if ui<>nil then begin
    ui.Flag         := not Flag;
    ui.RowList      := TRVIntegerList.CreateCopy(RowList);
    ui.ColList      := TRVIntegerList.CreateCopy(ColList);
    if Flag then begin
      ui.CellsList := TList.Create;
      NewCellsList := ui.CellsList;
    end;
  end;
  if Flag then
    table.Rows.Do_ClearCells(NewCellsList, RowList, ColList, ui)
  else
    table.Rows.Do_UnClearCells(CellsList, RowList, ColList);
  table.Changed;
end;
{=============================== TRVUndoMergeItem =============================}
constructor TRVUndoMergeItem.Create(Table: TRVTableItemInfo; ARow, ACol,
  AVampRow, AVampCol: Integer);
begin
  inherited Create;
  Row := ARow;
  Col := ACol;
  Cell := Table.Cells[Row,Col];
  if Cell.HasData(False) then
    ItemCount := Cell.Items.Count
  else
    ItemCount := 0;
end;
{============================== TRVUndoMerge ==================================}
procedure TRVUndoMerge.Undo(RVData: TRichViewRVData);
var ui: TRVUndoMerge;
    table: TRVTableItemInfo;
    r,c: Integer;
begin
  table := RVData.GetItem(ItemNo) as TRVTableItemInfo;
  ui := TRVUndoMerge(AddTableUndoInfo(RVData, TRVUndoMerge,
                             ItemNo, True, True));
  if ui<>nil then begin
    ui.Flag         := not Flag;
    ui.Row          := Row;
    ui.Col          := Col;
    ui.OldColSpan   := OldColSpan;
    ui.OldRowSpan   := OldRowSpan;
    ui.NewColSpan   := NewColSpan;
    ui.NewRowSpan   := NewRowSpan;
    ui.OldBestWidth := OldBestWidth;
    if Flag then begin
      ui.MergedItemsList := TRVList.Create;
      for r := Row to Row+NewRowSpan-1 do
        for c := Col to Col+NewColSpan-1 do
          if (table.Cells[r,c]<>nil) and
             (table.Cells[r,c]<>table.Cells[Row,Col]) then
          ui.MergedItemsList.Add(TRVUndoMergeItem.Create(table,r,c,Row,Col));
    end;
  end;
  if Flag then
    table.Rows.Do_MergeCells(ItemNo, Row,Col, NewColSpan, NewRowSpan, ui, True)
  else
    table.Rows.Do_UndoMergeCells(ItemNo, Row,Col, OldColSpan, OldRowSpan, MergedItemsList,OldBestWidth);
  table.Changed;
end;
{------------------------------------------------------------------------------}
{
//!!
procedure TRVUndoMerge.ChangeRVData(ARVData: TRichViewRVData;
  Restoring: Boolean);
var i: Integer;
begin
  if MergedItemsList<>nil then
    for i := 0 to MergedItemsList.Count-1 do begin
      TRVUndoMergeItem(MergedItemsList[i]).Cell.Inserted(ARVData, not Restoring);
      //TRVUndoMergeItem(MergedItemsList[i]).Cell.FReservedRVData := ARVData;
      TRVUndoMergeItem(MergedItemsList[i]).Cell.FList := nil;
    end;
end;
}
{------------------------------------------------------------------------------}
destructor TRVUndoMerge.Destroy;
var i: Integer;
begin
  if MergedItemsList<>nil then begin
    for i := 0 to MergedItemsList.Count-1 do
      TRVUndoMergeItem(MergedItemsList[i]).Cell.Free;
    MergedItemsList.Free;
  end;
  inherited Destroy;
end;
{================================ TRVUndoUnmerge ==============================}
procedure TRVUndoUnmerge.Undo(RVData: TRichViewRVData);
var ui: TRVUndoUnmerge;
    table: TRVTableItemInfo;
begin
  table := RVData.GetItem(ItemNo) as TRVTableItemInfo;
  ui := TRVUndoUnmerge(AddTableUndoInfo(RVData, TRVUndoUnmerge,
                             ItemNo, True, True));
  if ui<>nil then begin
    ui.Flag         := not Flag;
    ui.Row          := Row;
    ui.Col          := Col;
    ui.OldColSpan   := OldColSpan;
    ui.OldRowSpan   := OldRowSpan;
    ui.UnmergeCols  := UnmergeCols;
    ui.UnmergeRows  := UnmergeRows;
    ui.OldBestWidth  := OldBestWidth;
    ui.OldBestHeight := OldBestHeight;
  end;
  if Flag then
    table.Rows.Do_UnmergeCell(ItemNo, Row,Col, UnmergeRows, UnmergeCols)
  else
    table.Rows.Do_UndoUnmergeCell(ItemNo, Row,Col, OldColSpan, OldRowSpan,
                              OldBestWidth, OldBestHeight);
  table.Changed;
end;
{============================= TRVUndoCellModify ==============================}
procedure TRVUndoCellModify.Undo(RVData: TRichViewRVData);
var
  table: TRVTableItemInfo;
  ERow,ECol,i: Integer;
  List: TRVUndoList;
begin
  table := RVData.GetItem(ItemNo) as TRVTableItemInfo;
  table.GetEditedCell(ERow,ECol);
  if (ERow<>Row) or (ECol<>Col) then
    table.EditCell_(Row,Col,True);
  if IsRedo then
    List := TRVEditRVData(table.FInpl

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -