📄 rvtable.pas
字号:
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 + -