expertcad/SRC/Main/U_CadNormsList.pas
2025-05-12 10:07:51 +03:00

732 lines
20 KiB
ObjectPascal
Raw Permalink Blame History

unit U_CadNormsList;
interface
uses
Windows, U_LNG, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, RzGrids, U_ESCadClasess, cxLookAndFeelPainters, StdCtrls,
cxButtons, Contnrs, U_SCSComponent, Menus, siComp, siLngLnk, Buttons,
U_Common_Classes, ComCtrls, ToolWin, cxGraphics, cxLookAndFeels;
type
TSelectedRow = class(TObject)
public
FSelected: Boolean;
end;
type
TF_CadNormsList = class(TForm)
slNorms: TRzStringGrid;
bOK: TcxButton;
bCancel: TcxButton;
pmNorms: TPopupMenu;
nAddRow: TMenuItem;
nAddColumn: TMenuItem;
nDeleteRow: TMenuItem;
nDeleteColumn: TMenuItem;
lng_Forms: TsiLangLinked;
tbButtons: TToolBar;
tbUp: TToolButton;
tbDown: TToolButton;
nMarkForJoin: TMenuItem;
ToolButton1: TToolButton;
tbJoin: TToolButton;
tbLeft: TToolButton;
tbRight: TToolButton;
ToolButton4: TToolButton;
procedure bCancelClick(Sender: TObject);
procedure slNormsSetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
procedure nAddRowClick(Sender: TObject);
procedure nAddColumnClick(Sender: TObject);
procedure nDeleteRowClick(Sender: TObject);
procedure nDeleteColumnClick(Sender: TObject);
procedure pmNormsPopup(Sender: TObject);
procedure slNormsMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure tbUpClick(Sender: TObject);
procedure tbDownClick(Sender: TObject);
procedure nMarkForJoinClick(Sender: TObject);
procedure slNormsDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure tbJoinClick(Sender: TObject);
procedure bOKClick(Sender: TObject);
procedure tbLeftClick(Sender: TObject);
procedure tbRightClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
FEdited: Boolean;
FEditedNormStruct: TCadNormStruct;
Procedure LoadTable(aCadNormsObject: TCadNorms);
Function SaveTable(aNormsList: TObjectList): TObjectList;
Function Execute(aCadNormsObject: TCadNorms): Boolean;
Procedure UnSelectAllRows;
function CheckStrExist(aCol, aRow: Integer; aStr: string): Boolean;
end;
var
F_CadNormsList: TF_CadNormsList;
implementation
uses U_BaseCommon, U_Common, USCS_Main, U_Constants;
{$R *.dfm}
{ TF_CadNormsList }
function TF_CadNormsList.Execute(aCadNormsObject: TCadNorms): Boolean;
var
i, j: integer;
SelRowObject: TSelectedRow;
begin
try
Result := False;
FEdited := False;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for i := 0 to slNorms.ColCount - 1 do
for j := 0 to slNorms.RowCount - 1 do
slNorms.Cells[i, j] := '';
LoadTable(aCadNormsObject);
// Selected
for i := 0 to slNorms.RowCount - 1 do
begin
SelRowObject := TSelectedRow.Create;
SelRowObject.FSelected := False;
slNorms.Objects[0, i] := SelRowObject;
end;
if ShowModal = mrOK then
begin
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if FEdited then
begin
aCadNormsObject.FNormsList := SaveTable(aCadNormsObject.FNormsList);
Result := True;
end;
end;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.Execute', E.Message);
end;
end;
procedure TF_CadNormsList.LoadTable(aCadNormsObject: TCadNorms);
var
i, j, k: Integer;
Pos: Integer;
Count: Integer;
CadNormStruct: TCadNormStruct;
CadNormColumn: TCadNormColumn;
StrField: string;
begin
try
slNorms.RowHeights[0] := 10;
slNorms.RowCount := aCadNormsObject.FNormsList.Count + 1;
Count := 4;
if aCadNormsObject.FNormsList.Count = 0 then
Exit;
CadNormStruct := TCadNormStruct(aCadNormsObject.FNormsList[0]);
FEditedNormStruct := CadNormStruct;
for i := 0 to CadNormStruct.NormColumns.Count - 1 do
begin
CadNormColumn := TCadNormColumn(CadNormStruct.NormColumns[i]);
Count := Count + CadNormColumn.Columns.Count;
end;
slNorms.ColCount := Count;
slNorms.ColWidths[0] := Round(aCadNormsObject.fNumberSize) * 5;
slNorms.ColWidths[1] := Round(aCadNormsObject.fNameSize) * 5;
slNorms.ColWidths[2] := Round(aCadNormsObject.fIzmSize) * 5;
slNorms.ColWidths[3] := Round(aCadNormsObject.fCountSize) * 5;
for i := 4 to slNorms.ColCount - 1 do
slNorms.ColWidths[i] := Round(aCadNormsObject.fColumnSize) * 5;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
StrField := CadNormStruct.Number;
slNorms.Cells[0, 1] := StrField;
StrField := CadNormStruct.Name;
slNorms.Cells[1, 1] := StrField;
StrField := CadNormStruct.Izm;
slNorms.Cells[2, 1] := StrField;
StrField := CadNormStruct.Count;
slNorms.Cells[3, 1] := StrField;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Pos := 4;
for i := 0 to CadNormStruct.NormColumns.Count - 1 do
begin
CadNormColumn := TCadNormColumn(CadNormStruct.NormColumns[i]);
for j := 0 to CadNormColumn.Columns.Count - 1 do
begin
StrField := CadNormColumn.Columns[j];
slNorms.Cells[Pos, 1] := StrField;
Pos := Pos + 1;
end;
end;
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
for i := 1 to aCadNormsObject.FNormsList.Count - 1 do
begin
CadNormStruct := TCadNormStruct(aCadNormsObject.FNormsList[i]);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
StrField := CadNormStruct.Number;
slNorms.Cells[0, i + 1] := StrField;
StrField := CadNormStruct.Name;
slNorms.Cells[1, i + 1] := StrField;
StrField := CadNormStruct.Izm;
slNorms.Cells[2, i + 1] := StrField;
StrField := CadNormStruct.Count;
slNorms.Cells[3, i + 1] := StrField;
Pos := 4;
for j := 0 to CadNormStruct.NormColumns.Count - 1 do
begin
CadNormColumn := TCadNormColumn(CadNormStruct.NormColumns[j]);
for k := 0 to CadNormColumn.Columns.Count - 1 do
begin
StrField := CadNormColumn.Columns[k];
slNorms.Cells[Pos, i + 1] := StrField;
Pos := Pos + 1;
end;
end;
end;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.LoadTable', E.Message);
end;
end;
function TF_CadNormsList.SaveTable(aNormsList: TObjectList): TObjectList;
var
i, j, k, ColPos: Integer;
StrField: string;
CadNormStruct: TCadNormStruct;
CadNormColumn: TCadNormColumn;
OldCadNormStruct: TCadNormStruct;
OldCadNormColumn: TCadNormColumn;
begin
try
Result := TObjectList.Create;
if FEditedNormStruct = nil then
FEditedNormStruct := TCADNormStruct.Create;
for i := 1 to slNorms.RowCount - 1 do
begin
OldCadNormStruct := FEditedNormStruct;
CadNormStruct := TCADNormStruct.Create;
CadNormStruct.Number := slNorms.Cells[0, i];
CadNormStruct.Name := slNorms.Cells[1, i];
CadNormStruct.Izm := slNorms.Cells[2, i];
CadNormStruct.Count := slNorms.Cells[3, i];
CadNormStruct.NormColumns := TObjectList.Create;
ColPos := 4;
for j := 0 to OldCadNormStruct.NormColumns.Count - 1 do
begin
OldCadNormColumn := TCadNormColumn(OldCadNormStruct.NormColumns[j]);
CadNormColumn := TCADNormColumn.Create;
CadNormColumn.CableName := OldCadNormColumn.CableName;
CadNormColumn.Columns := TStringList.Create;
for k := 0 to OldCadNormColumn.Columns.Count - 1 do
begin
CadNormColumn.Columns.Add(slNorms.Cells[ColPos, i]);
ColPos := ColPos + 1;
end;
CadNormStruct.NormColumns.Add(CadNormColumn);
end;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ColPos < slNorms.ColCount then
begin
CadNormColumn := TCADNormColumn.Create;
CadNormColumn.CableName := cCadNormsList_Mes1;
CadNormColumn.Columns := TStringList.Create;
for k := ColPos to slNorms.ColCount - 1 do
begin
CadNormColumn.Columns.Add(slNorms.Cells[k, i]);
end;
CadNormStruct.NormColumns.Add(CadNormColumn);
end;
Result.Add(CadNormStruct);
end;
aNormsList.Free;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.SaveTable', E.Message);
end;
end;
procedure TF_CadNormsList.bCancelClick(Sender: TObject);
begin
Close;
end;
procedure TF_CadNormsList.slNormsSetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
begin
FEdited := True;
end;
procedure TF_CadNormsList.nAddRowClick(Sender: TObject);
var
i: integer;
SelRowObject: TSelectedRow;
begin
try
slNorms.RowCount := slNorms.RowCount + 1;
for i := 0 to slNorms.ColCount - 1 do
slNorms.Cells[i, slNorms.RowCount - 1] := '';
SelRowObject := TSelectedRow.Create;
SelRowObject.FSelected := False;
slNorms.Objects[0, slNorms.RowCount - 1] := SelRowObject;
FEdited := True;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.nAddRowClick', E.Message);
end;
end;
procedure TF_CadNormsList.nAddColumnClick(Sender: TObject);
var
j: integer;
begin
try
slNorms.ColCount := slNorms.ColCount + 1;
slNorms.Cells[slNorms.ColCount - 1, 0] := '';
slNorms.Cells[slNorms.ColCount - 1, 1] := '';
for j := 0 to slNorms.RowCount - 1 do
slNorms.Cells[slNorms.ColCount - 1, j] := '';
FEdited := True;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.nAddColumnClick', E.Message);
end;
end;
procedure TF_CadNormsList.nDeleteRowClick(Sender: TObject);
var
i: integer;
vRow: Integer;
begin
try
vRow := slNorms.Row;
for i := vRow to slNorms.RowCount - 2 do
begin
slNorms.Rows[i] := slNorms.Rows[i + 1];
end;
slNorms.RowCount := slNorms.RowCount - 1;
FEdited := True;
UnSelectAllRows;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.nDeleteRowClick', E.Message);
end;
end;
procedure TF_CadNormsList.nDeleteColumnClick(Sender: TObject);
var
i, j: integer;
vCol: Integer;
Pos: Integer;
CadNormColumn: TCadNormColumn;
begin
try
vCol := slNorms.Col;
for i := vCol to slNorms.ColCount - 2 do
begin
slNorms.Cols[i] := slNorms.Cols[i + 1];
end;
slNorms.ColCount := slNorms.ColCount - 1;
FEdited := True;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Pos := 4;
for i := 0 to FEditedNormStruct.NormColumns.Count - 1 do
begin
CadNormColumn := TCadNormColumn(FEditedNormStruct.NormColumns[i]);
for j := 0 to CadNormColumn.Columns.Count - 1 do
begin
if vCol = Pos then
begin
CadNormColumn.Columns.Delete(j);
Pos := Pos + 1;
Break;
end
else
Pos := Pos + 1;
end;
end;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.nDeleteColumnClick', E.Message);
end;
end;
procedure TF_CadNormsList.pmNormsPopup(Sender: TObject);
begin
try
pmNorms.Items[0].Enabled := True;
pmNorms.Items[1].Enabled := True;
if (slNorms.Row >= 0) and (slNorms.Row <= 1) then
pmNorms.Items[2].Enabled := False
else
pmNorms.Items[2].Enabled := True;
if (slNorms.Col >= 0) and (slNorms.Col <= 3) then
pmNorms.Items[3].Enabled := False
else
pmNorms.Items[3].Enabled := True;
if slNorms.Row >= 2 then
begin
pmNorms.Items[4].Enabled := True;
if TSelectedRow(slNorms.Objects[0, slNorms.Row]).FSelected then
pmNorms.Items[4].Caption := cCadNormsList_Mes2
else
pmNorms.Items[4].Caption := cCadNormsList_Mes3;
end
else
pmNorms.Items[4].Enabled := False;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.pmNormsPopup', E.Message);
end;
end;
procedure TF_CadNormsList.slNormsMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
vCol, vRow: Integer;
begin
try
if Button = mbLeft then
begin
if ssShift in Shift then
begin
slNorms.MouseToCell(X, Y, vCol, vRow);
if vRow >= 2 then
begin
TSelectedRow(slNorms.Objects[0, vRow]).FSelected := not TSelectedRow(slNorms.Objects[0, vRow]).FSelected;
slNorms.Repaint;
end;
end;
end
else
if Button = mbRight then
begin
slNorms.MouseToCell(X, Y, vCol, vRow);
if vCol <> -1 then
slNorms.Col := vCol;
if vRow <> -1 then
slNorms.Row := vRow;
end;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.slNormsMouseDown', E.Message);
end;
end;
procedure TF_CadNormsList.tbUpClick(Sender: TObject);
var
i, j: Integer;
Row: Integer;
PrevRow: Integer;
RowList: TStringList;
PrevRowList: TStringList;
Str: string;
begin
try
Row := slNorms.Row;
PrevRow := Row - 1;
if Row >= 3 then
begin
RowList := TStringList.Create;
PrevRowList := TStringList.Create;
// Get
for i := 0 to slNorms.ColCount - 1 do
begin
Str := slNorms.Cells[i, Row];
RowList.Add(Str);
Str := slNorms.Cells[i, PrevRow];
PrevRowList.Add(Str);
end;
// Set
for i := 1 to slNorms.ColCount - 1 do
begin
Str := RowList.Strings[i];
slNorms.Cells[i, PrevRow] := Str;
Str := PrevRowList.Strings[i];
slNorms.Cells[i, Row] := Str;
end;
slNorms.Row := PrevRow;
FEdited := True;
FreeAndNil(RowList);
FreeAndNil(PrevRowList);
end;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.tbUpClick', E.Message);
end;
end;
procedure TF_CadNormsList.tbDownClick(Sender: TObject);
var
i: Integer;
Row: Integer;
NextRow: Integer;
RowList: TStringList;
NextRowList: TStringList;
Str: string;
begin
try
Row := slNorms.Row;
NextRow := Row + 1;
if (Row >= 2) and (Row <= slNorms.RowCount -2) then
begin
RowList := TStringList.Create;
NextRowList := TStringList.Create;
// Get
for i := 0 to slNorms.ColCount - 1 do
begin
Str := slNorms.Cells[i, Row];
RowList.Add(Str);
Str := slNorms.Cells[i, NextRow];
NextRowList.Add(Str);
end;
// Set
for i := 1 to slNorms.ColCount - 1 do
begin
Str := RowList.Strings[i];
slNorms.Cells[i, NextRow] := Str;
Str := NextRowList.Strings[i];
slNorms.Cells[i, Row] := Str;
end;
FEdited := True;
slNorms.Row := NextRow;
FreeAndNil(RowList);
FreeAndNil(NextRowList);
end;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.tbDownClick', E.Message);
end;
end;
procedure TF_CadNormsList.nMarkForJoinClick(Sender: TObject);
var
vRow: Integer;
begin
try
vRow := slNorms.Row;
if vRow >= 2 then
begin
TSelectedRow(slNorms.Objects[0, vRow]).FSelected := not TSelectedRow(slNorms.Objects[0, vRow]).FSelected;
slNorms.Repaint;
end;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.nJoinRowsClick', E.Message);
end;
end;
procedure TF_CadNormsList.UnSelectAllRows;
var
i: Integer;
begin
try
for i := 0 to slNorms.RowCount - 1 do
TSelectedRow(slNorms.Objects[0, i]).FSelected := False;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.UnSelectAllRows', E.Message);
end;
end;
procedure TF_CadNormsList.slNormsDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
try
if ARow >= 2 then
begin
if TSelectedRow(slNorms.Objects[0, ARow]).FSelected then
begin
slNorms.Canvas.Brush.Style := bsClear;
slNorms.Canvas.Pen.Color := clRed;
slNorms.Canvas.Rectangle(Rect);
end;
end;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.slNormsDrawCell', E.Message);
end;
end;
procedure TF_CadNormsList.tbJoinClick(Sender: TObject);
var
i, j, k: Integer;
vRow: Integer;
vCol: Integer;
BaseRow: Integer;
ServiceStr: string;
Str: string;
begin
try
ServiceStr := '; ';
// BaseRow
for i := 2 to slNorms.RowCount - 1 do
begin
if TSelectedRow(slNorms.Objects[0, i]).FSelected then
begin
BaseRow := i;
Break;
end;
end;
vRow := i + 1;
while vRow < slNorms.RowCount do
begin
if TSelectedRow(slNorms.Objects[0, vRow]).FSelected then
begin
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for vCol := 1 to slNorms.ColCount - 1 do
begin
Str := slNorms.Cells[vCol, vRow];
if Str <> '' then
begin
if not CheckStrExist(vCol, BaseRow, Str) then
begin
if slNorms.Cells[vCol, BaseRow] = '' then
slNorms.Cells[vCol, BaseRow] := Str
else
slNorms.Cells[vCol, BaseRow] := slNorms.Cells[vCol, BaseRow] + ServiceStr + Str;
end;
end;
end;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for k := vRow to slNorms.RowCount - 2 do
begin
slNorms.Rows[k] := slNorms.Rows[k + 1];
end;
slNorms.RowCount := slNorms.RowCount - 1;
end
else
vRow := vRow + 1;
end;
FEdited := True;
UnSelectAllRows;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.tbJoinClick', E.Message);
end;
end;
function TF_CadNormsList.CheckStrExist(aCol, aRow: Integer; aStr: string): Boolean;
var
RowStr: string;
begin
try
Result := False;
RowStr := slNorms.Cells[aCol, aRow];
if Pos(aStr, RowStr) > 0 then
Result := True;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.CheckStrExist', E.Message);
end;
end;
procedure TF_CadNormsList.bOKClick(Sender: TObject);
begin
try
if not GProjectChanged then // Tolik 28/08/2019 --
SetProjectChanged(True);
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.bOKClick', E.Message);
end;
end;
procedure TF_CadNormsList.tbLeftClick(Sender: TObject);
var
i, j: Integer;
Col: Integer;
PrevCol: Integer;
ColList: TStringList;
PrevColList: TStringList;
Str: string;
begin
try
Col := slNorms.Col;
PrevCol := Col - 1;
if Col >= 5 then
begin
ColList := TStringList.Create;
PrevColList := TStringList.Create;
// Get
for i := 0 to slNorms.RowCount - 1 do
begin
Str := slNorms.Cells[Col, i];
ColList.Add(Str);
Str := slNorms.Cells[PrevCol, i];
PrevColList.Add(Str);
end;
// Set
for i := 1 to slNorms.RowCount - 1 do
begin
Str := ColList.Strings[i];
slNorms.Cells[PrevCol, i] := Str;
Str := PrevColList.Strings[i];
slNorms.Cells[Col, i] := Str;
end;
slNorms.Col := PrevCol;
FEdited := True;
FreeAndNil(ColList);
FreeAndNil(PrevColList);
end;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.tbLeftClick', E.Message);
end;
end;
procedure TF_CadNormsList.tbRightClick(Sender: TObject);
var
i: Integer;
Col: Integer;
NextCol: Integer;
ColList: TStringList;
NextColList: TStringList;
Str: string;
begin
try
Col := slNorms.Col;
NextCol := Col + 1;
if (Col >= 4) and (Col <= slNorms.ColCount - 2) then
begin
ColList := TStringList.Create;
NextColList := TStringList.Create;
// Get
for i := 0 to slNorms.RowCount - 1 do
begin
Str := slNorms.Cells[Col, i];
ColList.Add(Str);
Str := slNorms.Cells[NextCol, i];
NextColList.Add(Str);
end;
// Set
for i := 1 to slNorms.RowCount - 1 do
begin
Str := ColList.Strings[i];
slNorms.Cells[NextCol, i] := Str;
Str := NextColList.Strings[i];
slNorms.Cells[Col, i] := Str;
end;
FEdited := True;
slNorms.Col := NextCol;
FreeAndNil(ColList);
FreeAndNil(NextColList);
end;
except
on E: Exception do AddExceptionToLogEx('TF_CadNormsList.tbDownClick', E.Message);
end;
end;
end.