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

554 lines
21 KiB
ObjectPascal

unit U_MakeEditInterfNorm;
interface
uses
Windows, U_LNG, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxLookAndFeelPainters, StdCtrls, cxButtons, ExtCtrls, RzPanel,
U_BaseCommon, U_BaseConstants, cxDropDownEdit, cxLookupEdit, cxDBLookupEdit,
cxDBLookupComboBox, cxControls, cxContainer, cxEdit, cxTextEdit,
cxMaskEdit, cxSpinEdit, cxRadioGroup, RzLabel, Buttons,
kbmMemTable, siComp, siLngLnk, RzButton, RzCmboBx, Mask, RzEdit, RzSpnEdt,
RzRadChk, RzRadGrp, cxGraphics, cxLookAndFeels, Menus;
type
TF_MakeEditInterfNorm = class(TForm)
Panel_Main: TRzPanel;
Panel_OkCancel: TRzPanel;
Button_OK: TcxButton;
Button_Cancel: TcxButton;
SpinEdit_Expenses: TcxSpinEdit;
Label_Expense: TLabel;
RzGroupBox1: TRzGroupBox;
Button_ChoiceNorm: TcxButton;
Label_NormCypher: TLabel;
ComboBox_NormName: TcxComboBox;
ComboBox_NormCypher: TcxComboBox;
Label_NormName: TLabel;
lng_Forms: TsiLangLinked;
RzGroupBox3: TRzGroupBox;
Label1: TLabel;
cbComponentType: TRzComboBox;
btChoiceComponentType: TRzToolButton;
btInterfaceIsBusyInfo: TSpeedButton;
RzGroupBox2: TRzGroupBox;
rbInterfaceIsBusyYes: TcxRadioButton;
rbInterfaceIsBusyNo: TcxRadioButton;
RzGroupBox4: TRzGroupBox;
Label2: TLabel;
seKoefLengthForCompl: TRzSpinEdit;
Label3: TLabel;
edIzm: TcxTextEdit;
RzAppliance: TRzRadioGroup;
RzAll: TRzRadioButton;
RzFirst: TRzRadioButton;
RzNext: TRzRadioButton;
procedure Button_ChoiceNormClick(Sender: TObject);
procedure ComboBox_NormCypherPropertiesChange(Sender: TObject);
procedure ComboBox_NormNamePropertiesChange(Sender: TObject);
procedure Button_OKClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btInterfaceIsBusyInfoClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure rbInterfaceIsBusyNoClick(Sender: TObject);
procedure rbInterfaceIsBusyNoDblClick(Sender: TObject);
procedure rbInterfaceIsBusyYesClick(Sender: TObject);
procedure rbInterfaceIsBusyYesDblClick(Sender: TObject);
private
GForm: TForm;
FFormMode: TFormMode;
FComboHaveEmptyItem: Boolean;
FIzm: String;
FMemTableNorms: TkbmMemTable;
procedure DefineIzm(AIDNorm: Integer; AGUIDNorm: string);
public
constructor Create(AOwner: TComponent; AForm: TForm);
destructor Destroy; override;
procedure MakeEdit(AFormMode: TFormMode; ACurrInterfGUID: String; ACurrInterfID: Integer;
AMemTable, AMemTableNorms, AMemTableComponTypes: TkbmMemTable);
end;
//var
//F_MakeEditInterfNorm: TF_MakeEditInterfNorm;
implementation
Uses U_Main, Unit_DM_SCS, U_Common, DB;
{$R *.dfm}
constructor TF_MakeEditInterfNorm.Create(AOwner: TComponent;
AForm: TForm);
begin
GForm := AForm;
Inherited Create(AOwner);
end;
destructor TF_MakeEditInterfNorm.Destroy;
begin
inherited ;
end;
procedure TF_MakeEditInterfNorm.MakeEdit(AFormMode: TFormMode; ACurrInterfGUID: String; ACurrInterfID: Integer;
AMemTable, AMemTableNorms, AMemTableComponTypes: TkbmMemTable);
var
InterfNormID: Integer;
//InterfNormGUID: string;
InterfaceNormInfo: TInterfaceNormInfo;
MakeEdit: TMakeEdit;
RecNo: Integer;
IDComponentType: Integer;
IsNew: Boolean;
// Tolik 28/08/2019 --
//OldTick, CurrTick: Cardinal;
OldTick, CurrTick: DWord;
//
begin
try
FFormMode := AFormMode;
MakeEdit := GetMakeEditByFormMode(AFormMode);
InterfNormID := 0;
//InterfNormGUID := '';
FMemTableNorms := AMemTableNorms;
with TF_Main(GForm).DM do
begin
FComboHaveEmptyItem := false;
ComboBox_NormCypher.Properties.OnChange := nil;
ComboBox_NormName.Properties.OnChange := nil;
ComboBox_NormCypher.Properties.BeginUpdate;
ComboBox_NormName.Properties.BeginUpdate;
FIzm := '';
rbInterfaceIsBusyYes.Checked := false;
rbInterfaceIsBusyNo.Checked := false;
BeginProgress;
try
IsNew := AFormMode = fmMake;
OldTick := GetTickCount;
if AMemTableNorms <> nil then
begin
FillComboBoxFromMT(ComboBox_NormCypher, AMemTableNorms, IsNew, fnID, fnCypher, '', 0);
FillComboBoxFromMT(ComboBox_NormName, AMemTableNorms, IsNew, fnID, fnName, '', 0);
end
else
begin
FillComboBox(ComboBox_NormCypher, F_NormBase, IsNew, tnNBNorms, fnID, fnCypher, '', 0);
FillComboBox(ComboBox_NormName, F_NormBase, IsNew, tnNBNorms, fnID, fnName, '', 0);
end;
CurrTick := GetTickCount - OldTick;
CurrTick := GetTickCount - OldTick;
OldTick := GetTickCount;
if AMemTableComponTypes <> nil then
FillComboBoxRzFromMT(cbComponentType, AMemTableComponTypes, true, fnID, fnName, cAniType, 0)
else
FillComboBoxRz(cbComponentType, F_NormBase, true, tnComponentTypes, fnID, fnName, cAniType, 0);
CurrTick := GetTickCount - OldTick;
CurrTick := GetTickCount - OldTick;
case AFormMode of
fmMake:
begin
Caption := cMakeEditInterfNorm_Msg1_1;
FComboHaveEmptyItem := true;
ComboBox_NormCypher.ItemIndex := 0;
ComboBox_NormName.ItemIndex := 0;
SpinEdit_Expenses.Value := 1;
seKoefLengthForCompl.Value := 0;
edIzm.Text := '';
//rbInterfaceIsBusyYes.Check
end;
fmEdit:
begin
Caption := cMakeEditInterfNorm_Msg1_2;
FComboHaveEmptyItem := false;
if AMemTable <> nil then
begin
InterfNormID := AMemTable.FieldByName(fnID).AsInteger;
//InterfNormGUID := AMemTable.FieldByName(fnGUID).AsString;
//FillComboBox(ComboBox_NormCypher, F_NormBase, false, tnNBNorms, fnID, fnCypher, '', -1, AMemTable.FieldByName(fnGuidNBNorm).AsString);
//FillComboBox(ComboBox_NormName, F_NormBase, false, tnNBNorms, fnID, fnName, '', -1, AMemTable.FieldByName(fnGuidNBNorm).AsString);
//FillComboBoxRz(cbComponentType, F_NormBase, true, tnComponentTypes, fnID, fnName, cAniType, -1, AMemTable.FieldByName(fnGuidComponentType).AsString);
SelectItemByGUIDinCombo(ComboBox_NormCypher, AMemTable.FieldByName(fnGuidNBNorm).AsString);
SelectItemByGUIDinCombo(ComboBox_NormName, AMemTable.FieldByName(fnGuidNBNorm).AsString);
SelectItemByGUIDinComboRz(cbComponentType, AMemTable.FieldByName(fnGuidComponentType).AsString);
edIzm.Text := AMemTable.FieldByName(fnIzm).AsString;
if AMemTable.FieldByName(fnGuidComponentType).AsString = '' then
SelectItemByGUIDinComboRz(cbComponentType, '');
SpinEdit_Expenses.Value := RoundX(AMemTable.FieldByName(fnExpense).AsFloat, PrecisionNormKolvo);
// Tolik -- 14/06/2016 --
{ if AMemTable.FieldByName(fnInterfaceIsBusy).AsInteger = biTrue then
rbInterfaceIsBusyYes.Checked := true
else
rbInterfaceIsBusyNo.Checked := true;}
if AMemTable.FieldByName(fnInterfaceIsBusy).AsInteger = biFalse then
rbInterfaceIsBusyNo.Checked := true
else
begin
rbInterfaceIsBusyYes.Checked := true;
if AMemTable.FieldByName(fnInterfaceIsBusy).AsInteger = 1 then
RzAll.Checked := true
else
if AMemTable.FieldByName(fnInterfaceIsBusy).AsInteger = 2 then
RzFirst.Checked := True
else
if AMemTable.FieldByName(fnInterfaceIsBusy).AsInteger = 3 then
RzNext.Checked := True;
end;
//
seKoefLengthForCompl.Value := RoundCP(AMemTable.FieldByName(fnKoefLengthForCompl).AsFloat);
end
else
begin
InterfNormID := DataSet_Interface_Norms.FN(fnID).AsInteger;
//InterfNormGUID := DataSet_Interface_Norms.FN(fnID).AsString;
//FillComboBox(ComboBox_NormCypher, F_NormBase, false, tnNBNorms, fnID, fnCypher, '', DataSet_Interface_Norms.FN(fnIDNBNorm).AsInteger);
//FillComboBox(ComboBox_NormName, F_NormBase, false, tnNBNorms, fnID, fnName, '', DataSet_Interface_Norms.FN(fnIDNBNorm).AsInteger);
//FillComboBoxRz(cbComponentType, F_NormBase, true, tnComponentTypes, fnID, fnName, cAniType, DataSet_Interface_Norms.FN(fnIDComponentType).AsInteger);
SelectItemByIDinCombo(ComboBox_NormCypher, DataSet_Interface_Norms.FN(fnIDNBNorm).AsInteger);
SelectItemByIDinCombo(ComboBox_NormName, DataSet_Interface_Norms.FN(fnIDNBNorm).AsInteger);
SelectItemByIDinComboRz(cbComponentType, DataSet_Interface_Norms.FN(fnIDComponentType).AsInteger);
edIzm.Text := DataSet_Interface_Norms.FN(fnIzm).AsString;
SpinEdit_Expenses.Value := RoundX(DataSet_Interface_Norms.FN(fnExpense).AsFloat, PrecisionNormKolvo);
// Tolik -- 14/06/2016 --
if DataSet_Interface_Norms.FN(fnInterfaceIsBusy).AsInteger = biFalse then
rbInterfaceIsBusyNo.Checked := true
else
begin
rbInterfaceIsBusyYes.Checked := true;
if DataSet_Interface_Norms.FN(fnInterfaceIsBusy).AsInteger = 1 then
RzAll.Checked := true
else
if DataSet_Interface_Norms.FN(fnInterfaceIsBusy).AsInteger = 2 then
RzFirst.Checked := True
else
if DataSet_Interface_Norms.FN(fnInterfaceIsBusy).AsInteger = 3 then
RzNext.Checked := True;
end;
{if DataSet_Interface_Norms.FN(fnInterfaceIsBusy).AsInteger = biTrue then
rbInterfaceIsBusyYes.Checked := true
else
rbInterfaceIsBusyNo.Checked := true;}
//
seKoefLengthForCompl.Value := RoundCP(DataSet_Interface_Norms.FN(fnKoefLengthForCompl).AsFloat);
end;
end;
end;
Button_ChoiceNorm.Visible := AMemTableNorms = nil;
//btChoiceComponentType.Visible := AMemTableComponTypes = nil;
ComboBox_NormCypher.Properties.OnChange := ComboBox_NormCypherPropertiesChange;
ComboBox_NormName.Properties.OnChange := ComboBox_NormNamePropertiesChange;
finally
ComboBox_NormCypher.Properties.EndUpdate;
ComboBox_NormName.Properties.EndUpdate;
EndProgress;
end;
if ShowModal = mrOk then
begin
IDComponentType := GetIDFromComboBoxRZ(cbComponentType);
if AMemTable <> nil then
begin
if AFormMode = fmMake then
AMemTable.Append;
AMemTable.Edit;
AMemTable.FieldByName(fnGUID).AsString := CreateGUID;
AMemTable.FieldByName(fnGUIDInterface).AsString := ACurrInterfGUID;
AMemTable.FieldByName(fnGUIDNBNorm).AsString := GetGUIDFromComboBox(ComboBox_NormCypher);
AMemTable.FieldByName(fnGuidComponentType).AsString := GetGUIDFromComboBoxRZ(cbComponentType);
AMemTable.FieldByName(fnIDInterface).AsInteger := ACurrInterfID; //DataSet_INTERFACE.FN(fnID).AsInteger;
AMemTable.FieldByName(fnIDNBNorm).AsInteger := GetIDFromComboBox(ComboBox_NormCypher);
AMemTable.FieldByName(fnIDComponentType).AsInteger := IDComponentType;
AMemTable.FieldByName(fnExpense).AsFloat := SpinEdit_Expenses.Value;
// Tolik -- 14/06/2016 --
// AMemTable.FieldByName(fnInterfaceIsBusy).AsInteger := BoolToInt(rbInterfaceIsBusyYes.Checked);
if rbInterfaceIsBusyNo.Checked then
AMemTable.FieldByName(fnInterfaceIsBusy).AsInteger := 0
else
if rbInterfaceIsBusyYes.Checked then
begin
if RzAll.Checked then
AMemTable.FieldByName(fnInterfaceIsBusy).AsInteger := 1
else
if RzFirst.Checked then
AMemTable.FieldByName(fnInterfaceIsBusy).AsInteger := 2
else
if RzNext.Checked then
AMemTable.FieldByName(fnInterfaceIsBusy).AsInteger := 3;
end;
//
AMemTable.FieldByName(fnKoefLengthForCompl).AsFloat := seKoefLengthForCompl.Value;
AMemTable.FieldByName(fnCypher).AsString := ComboBox_NormCypher.Text;
AMemTable.FieldByName(fnName).AsString := ComboBox_NormName.Text;
AMemTable.FieldByName(fnIzm).AsString := FIzm;
AMemTable.FieldByName(fnIsModified).AsBoolean := true;
AMemTable.Post;
{if AFormMode = fmMake then
begin
RecNo := AMemTable.RecNo;
AMemTable.Close;
AMemTable.Open;
AMemTable.RecNo := RecNo;
end;}
end
else
begin
ZeroMemory(@InterfaceNormInfo, SizeOf(TInterfaceNormInfo));
InterfaceNormInfo.ID := InterfNormID;
InterfaceNormInfo.IDInterface := ACurrInterfID;
InterfaceNormInfo.IDNBNorm := GetIDFromComboBox(ComboBox_NormCypher);
InterfaceNormInfo.Expense := SpinEdit_Expenses.Value;
InterfaceNormInfo.IDComponentType := IDComponentType;
// Tolik -- 14/06/2016 --
//InterfaceNormInfo.InterfaceIsBusy := BoolToInt(rbInterfaceIsBusyYes.Checked);
if rbInterfaceIsBusyNo.Checked then
InterfaceNormInfo.InterfaceIsBusy := 0
else
begin
if RzAll.Checked then
InterfaceNormInfo.InterfaceIsBusy := 1;
if RzFirst.Checked then
InterfaceNormInfo.InterfaceIsBusy := 2;
if RzNext.Checked then
InterfaceNormInfo.InterfaceIsBusy := 3;
end;
//
InterfaceNormInfo.KoefLengthForCompl := seKoefLengthForCompl.Value;
SaveInterfaceNorm(MakeEdit, @InterfaceNormInfo);
DataSet_Interface_Norms.FullRefresh;
if AFormMode = fmMake then
DataSet_Interface_Norms.Locate(fnID, InterfaceNormInfo.ID, []);
{
if AFormMode = fmMake then
DataSet_Interface_Norms.Append;
DataSet_Interface_Norms.Edit;
DataSet_Interface_Norms.FN(fnIDInterface).AsInteger := ACurrInterfID; //DataSet_INTERFACE.FN(fnID).AsInteger;
DataSet_Interface_Norms.FN(fnIDNBNorm).AsInteger := GetIDFromComboBox(ComboBox_NormCypher);
DataSet_Interface_Norms.FN(fnExpense).AsFloat := SpinEdit_Expenses.Value;
if IDComponentType > 0 then
DataSet_Interface_Norms.FN(fnIDComponentType).AsInteger := IDComponentType
else
DataSet_Interface_Norms.FN(fnIDComponentType).Value := null;
DataSet_Interface_Norms.FN(fnInterfaceIsBusy).AsInteger := BoolToInt(rbInterfaceIsBusyYes.Checked);
DataSet_Interface_Norms.FN(fnKoefLengthForCompl).AsFloat := seKoefLengthForCompl.Value;
DataSet_Interface_Norms.Post;
if AFormMode = fmMake then
begin
RecNo := DataSet_Interface_Norms.RecNo;
DataSet_Interface_Norms.Close;
DataSet_Interface_Norms.Open;
DataSet_Interface_Norms.RecNo := RecNo;
end;}
end;
end;
end;
except
on E: Exception do AddExceptionToLog('TF_MakeEditInterfNorm.MakeEdit: '+E.Message);
end;
end;
procedure TF_MakeEditInterfNorm.Button_ChoiceNormClick(Sender: TObject);
var
CurrID: Integer;
NewID: Integer;
// Tolik 28/08/2019 --
//OldTick, CurrTick: Cardinal;
OldTick, CurrTick: DWord;
//
begin
CurrID := GetIDFromComboBox(ComboBox_NormCypher);
NewID := TF_Main(GForm).DM.GetNBNormIDFromGuide(CurrID, fmEdit); //TF_Main(GForm).DM.GetNBNormIDFromGuide(CurrID, FFormMode);
OldTick := GetTickCount;
ComboBox_NormCypher.Properties.OnChange := nil;
ComboBox_NormName.Properties.OnChange := nil;
ComboBox_NormCypher.Properties.BeginUpdate;
ComboBox_NormName.Properties.BeginUpdate;
try
FillComboBox(ComboBox_NormCypher, TF_Main(GForm).FNormBase, FComboHaveEmptyItem, tnNBNorms, fnID, fnCypher, '', NewID);
FillComboBox(ComboBox_NormName, TF_Main(GForm).FNormBase, FComboHaveEmptyItem, tnNBNorms, fnID, fnName, '', NewID);
finally
ComboBox_NormCypher.Properties.OnChange := ComboBox_NormCypherPropertiesChange;
ComboBox_NormName.Properties.OnChange := ComboBox_NormNamePropertiesChange;
ComboBox_NormCypher.Properties.EndUpdate;
ComboBox_NormName.Properties.EndUpdate;
end;
CurrTick := GetTickCount - OldTick;
CurrTick := GetTickCount - OldTick;
end;
procedure TF_MakeEditInterfNorm.ComboBox_NormCypherPropertiesChange(
Sender: TObject);
var
ComboID: Integer;
ComboGUID: string;
begin
try
ComboBox_NormName.Properties.OnChange := nil;
ComboID := GetIDFromComboBox(TcxComboBox(Sender));
ComboGUID := GetGUIDFromComboBox(TcxComboBox(Sender));
SelectItemByIDinCombo(ComboBox_NormName, ComboID);
DefineIzm(ComboID, ComboGUID);
finally
ComboBox_NormName.Properties.OnChange := ComboBox_NormNamePropertiesChange;
end;
end;
procedure TF_MakeEditInterfNorm.ComboBox_NormNamePropertiesChange(
Sender: TObject);
var
ComboID: Integer;
ComboGUID: string;
begin
try
ComboBox_NormCypher.Properties.OnChange := nil;
ComboID := GetIDFromComboBox(TcxComboBox(Sender));
ComboGUID := GetGUIDFromComboBox(TcxComboBox(Sender));
SelectItemByIDinCombo(ComboBox_NormCypher, ComboID);
DefineIzm(ComboID, ComboGUID);
finally
ComboBox_NormCypher.Properties.OnChange := ComboBox_NormCypherPropertiesChange;
end;
end;
procedure TF_MakeEditInterfNorm.Button_OKClick(Sender: TObject);
var strMessage: String;
procedure AddMessage(AMessg: String);
begin
strMessage := strMessage + #10+#13+ '-'+AMessg;
ModalResult := mrNone;
end;
begin
strMessage := cMakeEditInterfNorm_Msg2_1+':';
if ComboBox_NormCypher.Text = '' then
AddMessage(cMakeEditInterfNorm_Msg2_2);
if Not rbInterfaceIsBusyYes.Checked and Not rbInterfaceIsBusyNo.Checked then
AddMessage(cMakeEditInterfNorm_Msg2_3);
if ModalResult = mrNone then
ShowMessageByType(Self.Handle, smtDisplay, strMessage, Application.Title, MB_OK or MB_ICONINFORMATION);
end;
procedure TF_MakeEditInterfNorm.FormDestroy(Sender: TObject);
begin
ClearComboBox(ComboBox_NormCypher);
ClearComboBox(ComboBox_NormName);
end;
procedure TF_MakeEditInterfNorm.btInterfaceIsBusyInfoClick(
Sender: TObject);
begin
with TF_Main(GForm) do
begin
F_AnswerToQuast.ShowContextHelp(cMakeEditInterfNorm_Msg3_1, cMakeEditInterfNorm_Msg3_2);
end;
end;
procedure TF_MakeEditInterfNorm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
try
TF_Main(GForm).F_AnswerToQuast.Close;
except
end;
end;
procedure TF_MakeEditInterfNorm.DefineIzm(AIDNorm: Integer; AGUIDNorm: string);
var
//mtNormsBookMark: string;
mtNormsBookMark: TBookMark;
begin
FIzm := '';
if (FMemTableNorms <> nil) and FMemTableNorms.Active then
begin
//mtNormsBookMark := FMemTableNorms.Bookmark;
mtNormsBookMark := FMemTableNorms.GetBookmark;
try
if FMemTableNorms.Locate(fnGuid, AGUIDNorm, []) or
FMemTableNorms.Locate(fnID, AIDNorm, []) then
FIzm := FMemTableNorms.FieldByName(fnIzm).AsString;
finally
//FMemTableNorms.Bookmark := mtNormsBookMark;
FMemTableNorms.GotoBookmark(mtNormsBookMark);
FMemTableNorms.FreeBookmark(mtNormsBookMark);
end;
end
else
FIzm := TF_Main(GForm).FNormBase.DM.GetStringFromTableByID(tnNBNorms, fnIzm, AIDNorm, qmPhisical);
edIzm.Text := FIzm;
end;
procedure TF_MakeEditInterfNorm.FormCreate(Sender: TObject);
begin
// Tolik 01/11/2019 --
seKoefLengthForCompl.Min := 0;
seKoefLengthForCompl.Max :=0;
//
seKoefLengthForCompl.Decimals := FloatPrecision;
seKoefLengthForCompl.IntegersOnly := false;
seKoefLengthForCompl.Min := 0.000;
seKoefLengthForCompl.Max := 1E10;
end;
procedure TF_MakeEditInterfNorm.rbInterfaceIsBusyNoClick(Sender: TObject);
begin
RzAppliance.Enabled := False;
end;
procedure TF_MakeEditInterfNorm.rbInterfaceIsBusyNoDblClick(
Sender: TObject);
begin
RzAppliance.Enabled := False;
end;
procedure TF_MakeEditInterfNorm.rbInterfaceIsBusyYesClick(Sender: TObject);
begin
RzAppliance.Enabled := True;
end;
procedure TF_MakeEditInterfNorm.rbInterfaceIsBusyYesDblClick(
Sender: TObject);
begin
RzAppliance.Enabled := True;
end;
end.