mirror of
http://gitlab.expertsoft.com.ua/git/expertcad
synced 2026-01-11 18:25:40 +02:00
732 lines
20 KiB
ObjectPascal
732 lines
20 KiB
ObjectPascal
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.
|