This commit is contained in:
ShevaIV 2025-05-12 10:21:16 +03:00
parent 00e2ad8635
commit 5d5efaee01
17 changed files with 6047 additions and 4648 deletions

View File

@ -203,7 +203,10 @@ uses
U_ExpXlsX in 'SCSNormBase\U_ExpXlsX.pas' {/},
U_PortsReIndex in 'SCSNormBase\U_PortsReIndex.pas' {F_PortsReIndex},
U_ELCommon in 'Main\U_ELCommon.pas' {/U_SetWallTransparency in 'Main\U_SetWallTransparency.pas' {F_SetWallTransparency},
U_ShieldConfig in 'Main\U_ShieldConfig.pas'; // Tolik 16/03/2023 ôîðìàò ùèòêà äëÿ ìîíòàæíîé ñõåìû;
U_ShieldConfig in 'Main\U_ShieldConfig.pas' {/ Tolik 16/03/2023 ôîðìàò ùèòêà äëÿ ìîíòàæíîé ñõåìû;},
U_Reserv in 'Main\U_Reserv.pas' {F_Reserv};
// Tolik 16/03/2023 ôîðìàò ùèòêà äëÿ ìîíòàæíîé ñõåìû;
//U_SetWallTransparency in 'Main\U_SetWallTransparency.pas' {F_SetWallTransparency};
//
@ -1195,7 +1198,9 @@ To enable the UAC again, simply change back the value of EnableLUA to 1.
Application.CreateForm(TFSCS_Main, FSCS_Main);
Application.CreateForm(TF_MasterNewListLite, F_MasterNewListLite);
Application.CreateForm(TF_ShieldConfig, F_ShieldConfig); // Tolik 16/03/2023
Application.CreateForm(TF_ShieldConfig, F_ShieldConfig);
Application.CreateForm(TF_Reserv, F_Reserv);
// Tolik 16/03/2023
//Application.CreateForm(TF_PortsReIndex, F_PortsReIndex);
FSCS_Main.Left := Screen.WorkAreaRect.Left;
FSCS_Main.Top := Screen.WorkAreaRect.Top;

View File

@ -705,6 +705,9 @@
<DCCReference Include="Main\U_ShieldConfig.pas">
<Form>/ Tolik 16/03/2023 формат щитка для монтажной схемы;</Form>
</DCCReference>
<DCCReference Include="Main\U_Reserv.pas">
<Form>F_Reserv</Form>
</DCCReference>
<BuildConfiguration Include="Release Telecom UKR Trial">
<Key>Cfg_10</Key>
<CfgParent>Base</CfgParent>

File diff suppressed because it is too large Load Diff

View File

@ -1182,6 +1182,8 @@ type
aInstRaspredBox: TAction;
mnuShieldAssemblySH: TMenuItem;
aShieldAssemblyScheme: TAction;
TimerTracingInterval: TTimer;
mnuReserv: TMenuItem;
// ACTIONs
// ñîçäàòü íîâûé ïðîåêò
@ -1994,6 +1996,8 @@ type
ARect: TRect; State: TOwnerDrawState);
procedure aInstRaspredBoxExecute(Sender: TObject);
procedure aShieldAssemblySchemeExecute(Sender: TObject);
procedure TimerTracingIntervalTimer(Sender: TObject);
procedure mnuReservClick(Sender: TObject);
{ procedure SelectAllLineObjsHint(var HintStr: String;
var CanShow: Boolean);
@ -2184,7 +2188,8 @@ uses
, U_SCSClasses
// Tolik 28/03/2017 --
, U_Master_compl
, U_PortsReIndex, U_PEGetBox;
, U_PortsReIndex, U_PEGetBox,
U_Reserv; //Tolik 11/12/2024 --óïðàâëåíèå ðåçåðâíûìè êîïèÿìè
{$R *.dfm}
{$R Cursors.res}
@ -2713,7 +2718,8 @@ begin
aCreateNormsOnCad.Visible := False;
aManual_Interfaces.Visible := False;
end;
GFtpConnectStr := ReadSetting(fnSCSIniFile, dtString, scReservFtp, idtConnectString, '');
mnuReserv.Enabled := GFtpConnectStr <> '';
//#From Oleg#
//XPMenu.Active := false;
@ -14291,6 +14297,10 @@ var
is_flash: boolean;
s: string;
begin
//Tolik 03/01/2025 --
GFtpConnectStr := ReadSetting(fnSCSIniFile, dtString, scReservFtp, idtConnectString, '');
mnuReserv.Enabled := GFtpConnectStr <> '';
//
// Tolik 06/11/2019 --
WindowState := wsMaximized;
Width := Screen.Width;
@ -14484,6 +14494,13 @@ begin
end
end;
procedure TFSCS_Main.TimerTracingIntervalTimer(Sender: TObject);
begin
GDropTracing := true;
FSCS_Main.TimerTracingInterval.Enabled := false;
//showmessage('TracingTimer');
end;
procedure TFSCS_Main.FOnAppActivate(Sender: TObject);
begin
if not GAppMinim then
@ -19939,6 +19956,11 @@ begin
ShowConnDisconnComponsForList(GCadForm.FCADListID, cdConnlineCompons);
end;
procedure TFSCS_Main.mnuReservClick(Sender: TObject);
begin
F_Reserv.ShowModal;
end;
procedure TFSCS_Main.pmConnectedPointsPopup(Sender: TObject);
begin
miShowConnectedConnCompons.Caption := F_ProjMan.Act_ConnectedConCompons.Caption;

View File

@ -29,6 +29,7 @@ object F_CAD: TF_CAD
OldCreateOrder = False
Position = poDefault
Visible = True
WindowState = wsMinimized
OnActivate = FormActivate
OnCanResize = FormCanResize
OnClose = FormClose

View File

@ -1366,7 +1366,9 @@ const
//VersionEXE = '3.0.3'; //27.12.2011 '1.5.7';
// VersionEXE = '3.0.4'; //30.05.2022
// VersionEXE = '3.0.5'; //09.12.2022
VersionEXE = '3.0.6'; //08.12.2023
//VersionEXE = '3.0.6'; //08.12.2023
VersionEXE = '3.0.7'; //09.01.2025
{$ifend}
{$IF Defined(SCS_RF) or Defined(SCS_PE) or Defined(SCS_SPA)}
@ -1647,6 +1649,10 @@ var
GAllowExternalListCoordZ: Boolean = true; //22.08.2012 false - ïîçâîëÿòü èñïîëüçîâàòü ðàçíûå âûñîòû îáúåêòîâ íà ðàñïðåäåëèòåëüíîì ëèñòå
GRaizeDownKoeff: Double = 4;
GFtpConnectStr: string = ''; // Tolik 23/12/2024 - ñòðîêà ïîäêëþ÷åíèÿ ê FTP ñåðâåðó äëÿ ðåçåðâíîãî êîïèðîâàíèÿ
GFtpFromDisk: Boolean = True; // Tolik 23/12/2024
GFtpToDisk: Boolean = True; // Tolik 23/12/2024
//************* Hot Keys *********************
hkCtrlN,
hkCtrlL,
@ -5963,6 +5969,7 @@ end;
// ÏÎËÓ×ÈÒÜ ÂÑÞ ÒÐÀÑÑÓ
function GetAllTraceInCAD(AFigureServer, AFigureWS: TFigure): TList;
var
StartTick, CurrTick: Cardinal;
CurrLength: Double;
LastLength: Double;
IDAutoTracingPropertyStr: String;
@ -5980,6 +5987,7 @@ var
ResultList: TList;
loopCounter: integer; // Tolik 22/07/2024
AllCadTraceCount: integer; // Tolik 05/11/2024
//////////////////////////////////////////////////////////////////////////////
Procedure GetStepInCAD(ASourceWS: TFigure; AInOrder: TList; ATraveledIndex: Integer);
@ -5990,6 +5998,16 @@ var
ConnectedIDList: TList;
InOrder: TList; //New
begin
if GDropTracing then
exit;
CurrTick := GetTickCount;
if ((CurrTick - StartTick) > 5000) then
begin
GDropTracing := true;
//showmessage('Tracing dropped');
end;
if GDropTracing then // Tolik 11/11/2024 ñáðîñ ïî òàéìåðó (3 ñåê)
exit;
loopCounter := loopCounter + 1;
ComponLength := 0;
if CheckFigureByClassName(ASourceWS, cTConnectorObject) then
@ -6086,19 +6104,270 @@ var
CurrIDPathList.Delete(ATraveledIndex);
end;
//////////////////////////////////////////////////////////////////////////////
//Tolik 04/11/2024
function CheckNoTraceConnected(aObject: TFigure): Boolean;
var i, j: integer;
begin
Result := True;
if aObject is TConnectorObject then
begin
if TConnectorObject(aObject).ConnectorType = ct_Clear then
begin
Result := (TConnectorObject(aObject).JoinedOrtholinesList.Count = 0);
exit;
end
else
begin
for i := 0 to TConnectorObject(aObject).JoinedConnectorsList.Count - 1 do
begin
if TConnectorObject(TConnectorObject(aObject).JoinedConnectorsList[i]).JoinedOrtholinesList.Count > 0 then
begin
Result := False;
exit;
end;
end;
end;
end
else
begin
Result := false;
end;
end;
function getCadTracesCount: integer;
var i: integer;
begin
result := 0;
if Assigned(GCadForm) then
begin
for i := 0 to GCadForm.FSCSFigures.Count - 1 do
begin
if TFigure(GCadForm.FSCSFigures[i]) is TOrthoLine then
inc(Result);
end;
end;
end;
Procedure GetStepInCADShort(aConn: TConnectorObject; aList: TList);
var i, j, k, listIndex: integer;
PassedList, NextPathList, NextConnsList, LinesList : TList;
PathLength: double;
JoinedConn, NextConn: TConnectorObject;
currLine: TOrthoLine;
function NoCheckConnInPathList: boolean;
var i: Integer;
begin
Result := True;
for i := 0 to PassedList.Count - 1 do
begin
if TFigure(PassedList[i]).ID = NextConn.ID then
begin
Result := False;
exit;
end;
end;
end;
function getNextListIndex: integer;
var i: integer;
dist, currDist: Double;
conn: TConnectorObject;
begin
Result := 0;
if NextConnsList.Count > 1 then
begin
Conn := TConnectorObject(NextConnsList[0]);
if TOrthoLine(LinesList[0]).FIsVertical then
currDist := sqrt(sqr(Conn.ap1.x - AFigureWS.ap1.x)+ sqr(Conn.ap1.y - AFigureWS.ap1.y)+sqr(Conn.ActualZOrder[1] - TConnectorObject(AFigureWS).ActualZOrder[1]))
else
currDist := sqrt(sqr(Conn.ap1.x - AFigureWS.ap1.x)+ sqr(Conn.ap1.y - AFigureWS.ap1.y));
for i := 1 to NextConnsList.Count - 1 do
begin
Conn := TConnectorObject(NextConnsList[i]);
if TOrthoLine(LinesList[i]).FIsVertical then
dist := sqrt(sqr(Conn.ap1.x - AFigureWS.ap1.x)+ sqr(Conn.ap1.y - AFigureWS.ap1.y)+sqr(Conn.ActualZOrder[1] - TConnectorObject(AFigureWS).ActualZOrder[1]))
else
dist := sqrt(sqr(Conn.ap1.x - AFigureWS.ap1.x)+ sqr(Conn.ap1.y - AFigureWS.ap1.y));
if comparevalue(dist, currdist) = -1 then
begin
currDist := dist;
Result := i;
end;
end;
end;
end;
begin
loopCounter := loopCounter + 1;
if loopCounter > 8000 then
begin
exit;
end;
PassedList := TList.Create;
if aList <> nil then
PassedList.Assign(aList, laCopy) //passed Way
else
PassedList.Add(aConn); // StartPoint
NextConnsList := TList.Create;
NextPathList := nil;
PathLength := 0;
LinesList := TList.Create;
if aConn.ConnectorType = ct_Clear then // clear connector
begin
JoinedConn := aConn;
for i := 0 to JoinedConn.JoinedOrthoLinesList.Count - 1 do
begin
if TOrthoLine(JoinedConn.JoinedOrthoLinesList[i]).JoinConnector1.ID = JoinedConn.Id then
NextConn := TConnectorObject(TOrthoLine(JoinedConn.JoinedOrthoLinesList[i]).JoinConnector2)
else
NextConn := TConnectorObject(TOrthoLine(JoinedConn.JoinedOrthoLinesList[i]).JoinConnector1);
if NextConn.JoinedConnectorsList.Count > 0 then
NextConn := TConnectorObject(NextConn.JoinedConnectorsList[0]);
if NoCheckConnInPathList then
begin
if NextConn.ID = AFigureWS.ID then // Founded path
begin
PassedList.Add(TOrthoLine(JoinedConn.JoinedOrthoLinesList[i])); // ïîñëåäíÿÿ òðàññà
PassedList.Add(AFigureWS);
for j := 0 to PassedList.Count - 1 do // calc Length
begin
if TFigure(PassedList[j]) is TOrthoLine then
PathLength := PathLength + TOrthoLine(PassedList[j]).LineLength;
end;
if (PathLength < LastLength) or (LastLength = 0) then
begin
LastLength := PathLength;
LastIDPathList.Clear;
LastIDPathList.Assign(PassedList, laCopy);
end;
PassedList.Free;
NextConnsList.Free;
LinesList.Free;
exit; // path is founded, exit
end
else
begin
NextConnsList.Add(NextConn);
LinesList.Add(TOrthoLine(JoinedConn.JoinedOrthoLinesList[i]));
end;
end;
end;
end
else //ct_NB
begin
for k := 0 to aConn.JoinedConnectorsList.Count - 1 do
begin
JoinedConn := TConnectorObject(aConn.JoinedConnectorsList[k]);
for i := 0 to JoinedConn.JoinedOrthoLinesList.Count - 1 do
begin
if TOrthoLine(JoinedConn.JoinedOrthoLinesList[i]).JoinConnector1.ID = JoinedConn.Id then
NextConn := TConnectorObject(TOrthoLine(JoinedConn.JoinedOrthoLinesList[i]).JoinConnector2)
else
NextConn := TConnectorObject(TOrthoLine(JoinedConn.JoinedOrthoLinesList[i]).JoinConnector1);
if NextConn.JoinedConnectorsList.Count > 0 then
NextConn := TConnectorObject(NextConn.JoinedConnectorsList[0]);
if NoCheckConnInPathList then
begin
if NextConn.ID = AFigureWS.ID then // Founded path
begin
PassedList.Add(TOrthoLine(JoinedConn.JoinedOrthoLinesList[i])); // ïîñëåäíÿÿ òðàññà
PassedList.Add(AFigureWS);
for j := 0 to PassedList.Count - 1 do // calc Length
begin
if TFigure(PassedList[j]) is TOrthoLine then
PathLength := PathLength + TOrthoLine(PassedList[j]).LineLength;
end;
if (PathLength < LastLength) or (LastLength = 0) then
begin
LastLength := PathLength;
LastIDPathList.Clear;
LastIDPathList.Assign(PassedList, laCopy);
end;
PassedList.Free;
NextConnsList.free;
LinesList.Free;
exit; // path is founded, exit
end
else
begin
NextConnsList.Add(NextConn);
LinesList.Add(TOrthoLine(JoinedConn.JoinedOrthoLinesList[i]));
end;
end;
end;
end;
end;
if NextConnsList.Count > 0 then
begin
NextPathList := TList.Create;
While NextConnsList.Count > 0 do // next steps
begin
NextPathList.Clear;
NextPathList.Assign(PassedList, laCopy);
ListIndex := getNextListIndex;
NextConn := TConnectorObject(NextConnsList[ListIndex]);
NextPathList.Add(LinesList[ListIndex]);
NextPathList.Add(NextConn);
LinesList.Delete(ListIndex);
NextConnsList.Delete(ListIndex);
GetStepInCADShort(NextConn, NextPathList);
if LastIDPathList.Count > 0 then
begin
NextPathList.Free;
PassedList.Free;
NextConnsList.Free;
LinesList.Free;
exit;
end;
end;
NextPathList.Free;
end;
PassedList.Free;
NextConnsList.Free;
LinesList.Free;
end;
//
begin
Result := nil;
loopCounter := 0;
//Tolik 04/11/2024
if (AFigureServer = nil) or (AFigureWS = nil) then
exit;
if CheckNoTraceConnected(AFigureServer) then
exit;
if CheckNoTraceConnected(AFigureWS) then
exit;
//
try
CurrIDPathList := Tlist.Create;
CurrLength := 0;
LastIDPathList := Tlist.Create;
LastLength := 0;
//Tolik 05/11/2024
FSCS_Main.TimerTracingInterval.Enabled := true; // 11/11/2024 ñòàðò òàéìåðà äëÿ óñòàíîâêè ôëàæêà ñáðîñà àëãîðèòìà ïîèñêà ïóòè
StartTick := GetTickCount; // 11/11/2024 --
GetStepInCAD(AFigureServer, nil, 0);
if GDropTracing then
begin
//GDropTracing := false;
GetStepInCADShort(TConnectorObject(AFigureServer), nil);
end;
//else
// GetStepInCAD(AFigureServer, nil, 0);
GetStepInCAD(AFigureServer, nil, 0);
AllCadTraceCount := getCadTracesCount;
//GetStepInCADShort(TConnectorObject(AFigureServer), nil);
//GetStepInCADShort(TConnectorObject(AFigureWS), nil);
//
begin
ResultList := TList.Create;
@ -6624,8 +6893,7 @@ var
Exit;
end;
(* {$IF Defined(FINAL_SCS) } // Tolik 26/05/2021 --*)
{$IF Defined(FINAL_SCS) } // Tolik 26/05/2021 --*
CurrTick := Now - OldTick;
if CurrTick > 0.00009 then
begin
@ -6661,7 +6929,7 @@ var
end;
end;
(* {$IFEND} // Tolik 26/05/2021 --*)
{$IFEND} // Tolik 26/05/2021 --
CurrIDPathList.Add(ASourceWS);
if (ASourceWS = AFigureWS) then
@ -29321,6 +29589,7 @@ begin
// ***
if CurrentServer <> nil then
begin
GDropTracing := false;
for i := 0 to ObjectsList.Count - 1 do
begin
CurrentWA := TConnectorObject(ObjectsList[i]);

423
SRC/Main/U_Reserv.dfm Normal file
View File

@ -0,0 +1,423 @@
object F_Reserv: TF_Reserv
Left = 380
Top = 178
BorderIcons = [biSystemMenu]
Caption = #1059#1087#1088#1072#1074#1083#1077#1085#1080#1077' '#1088#1077#1079#1077#1088#1074#1085#1099#1084#1080' '#1082#1086#1087#1080#1103#1084#1080' '#1085#1072' '#1091#1076#1072#1083#1077#1085#1085#1086#1084' '#1089#1077#1088#1074#1077#1088#1077
ClientHeight = 311
ClientWidth = 532
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 32
Top = 4
Width = 180
Height = 16
Caption = #1057#1087#1080#1089#1086#1082' '#1092#1072#1081#1083#1086#1074' '#1085#1072' '#1089#1077#1088#1074#1077#1088#1077
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label2: TLabel
Left = 32
Top = 256
Width = 286
Height = 13
Caption = #1047#1072#1085#1103#1090#1086' '#1076#1080#1089#1082#1086#1074#1086#1075#1086' '#1087#1088#1086#1089#1090#1088#1072#1085#1089#1090#1074#1072' '#1085#1072' '#1089#1077#1088#1074#1077#1088#1077', '#1052#1073' '
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label3: TLabel
Left = 32
Top = 280
Width = 279
Height = 13
Caption = #1051#1080#1084#1080#1090' '#1076#1080#1089#1082#1086#1074#1086#1075#1086' '#1087#1088#1086#1089#1090#1088#1072#1085#1089#1090#1074#1072' '#1085#1072' '#1089#1077#1088#1074#1077#1088#1077', '#1052#1073' '
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object lbAllowedSpace: TLabel
Left = 320
Top = 280
Width = 3
Height = 13
Caption = ' '
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object lbUsedSpace: TLabel
Left = 320
Top = 256
Width = 3
Height = 13
Caption = ' '
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Button1: TButton
Left = 437
Top = 278
Width = 75
Height = 25
Caption = #1047#1072#1082#1088#1099#1090#1100
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
OnClick = Button1Click
end
object ListBox1: TListBox
Left = 32
Top = 24
Width = 345
Height = 226
ItemHeight = 13
TabOrder = 1
end
object btnSave: TBitBtn
Left = 389
Top = 24
Width = 135
Height = 41
Caption = 'btnSave'
DoubleBuffered = True
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000808
0800A59CA500A59CA500A59CA500A59CA500A59CA500A59CA500181818000808
080000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00181818000808
0800C6C6C60029292900424242009C9C9C00C6C6C600CECECE00181818000808
080008080800FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00101010000808
0800C6C6C60018181800292929009C9C9C00BDBDBD00C6C6C600181818000808
0800080808000808080000000000FF00FF00FF00FF00FF00FF00101010000808
0800CECECE00C6C6C600C6C6C600C6C6C600BDBDBD00BDBDBD00181818000808
0800101010000808080008080800FF00FF00FF00FF00FF00FF00101010000808
0800080808000808080008080800080808000808080008080800080808000808
08001010100008080800080808000808080000000000FF00FF00212121000808
0800FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700FFF7F7000808
08001818180008080800101010000808080008080800FF00FF00212121000808
0800FFF7F700C6C6C6009C9C9C009C9C9C009C9C9C00E7E7E700FFF7F7000808
08002929290008080800101010000808080008080800FF00FF00292929000808
0800FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700FFF7F7000808
08002929290008080800181818000808080010101000FF00FF00292929000808
0800FFF7F700C6C6C6009C9C9C009C9C9C009C9C9C00E7E7E700FFF7F7000808
08002929290008080800292929000808080010101000FF00FF00292929000808
0800FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700FFF7F7000808
08002929290008080800292929000808080018181800FF00FF00292929000808
0800DE842100DE7B2100D67B1800D6731800CE731800CE6B1000CE6B10000808
08002929290008080800292929000808080029292900FF00FF00FF00FF00FF00
FF002929290008080800FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700FFF7
F700FFF7F70008080800292929000808080029292900FF00FF00FF00FF00FF00
FF002929290008080800DE842100DE7B2100D67B1800D6731800CE731800CE6B
1000CE6B100008080800292929000808080029292900FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF002929290008080800FFF7F700FFF7F700FFF7F700FFF7
F700FFF7F700FFF7F700FFF7F7000808080029292900FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF002929290008080800DE842100DE7B2100D67B1800D673
1800CE731800CE6B1000CE6B10000808080029292900FF00FF00}
ParentDoubleBuffered = False
ParentFont = False
TabOrder = 2
OnClick = btnSaveClick
end
object btnLoad: TBitBtn
Left = 389
Top = 96
Width = 135
Height = 41
Caption = 'btnLoad'
DoubleBuffered = True
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00944A
0000E7DEB500E7DEB500E7DEB500E7DEB500E7DEB500E7DEB500AD5A0800944A
000084420000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00A55A0800944A
0000DEDED600C66B1000DE8C3100EFDEB500DEDED600E7E7DE00AD5A0800944A
00008C420000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00A5520800944A
0000DEDED600AD5A0800C66B1000EFDEB500DEDECE00DEDED600AD5A0800944A
0000944A0000944A000084420000FF00FF00FF00FF00FF00FF00A5520800944A
0000E7E7D600DEDED600DEDED600DEDECE00DEDECE00DEDECE00AD5A0800944A
00009C520000944A00008C420000FF00FF00FF00FF00FF00FF00A5520800944A
0000944A0000944A0000944A0000944A0000944A0000944A0000944A0000944A
0000A5520800944A0000944A0000944A000084420000FF00FF00B5630800944A
0000FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700944A
0000AD5A0800944A00009C520000944A00008C420000FF00FF00BD631000944A
0000FFF7F700E7E7D600EFDEB500EFDEB500EFDEB500EFEFEF00FFF7F700944A
0000C66B1800944A0000A5520800944A0000944A0000FF00FF00BD6B1000944A
0000FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700944A
0000C6731800944A0000AD5A0800944A00009C520000FF00FF00BD6B1000944A
0000FFF7F700E7E7D600EFDEB500EFDEB500EFDEB500EFEFEF00FFF7F700944A
0000C6731800944A0000C66B1800944A0000A5520800FF00FF00C66B1000944A
0000FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700944A
0000C6731800944A0000C6731800944A0000AD5A0800FF00FF00C66B1000944A
0000E79C2900E7942900E7942100DE8C2100DE8C2100DE8C1800DE841800944A
0000C6731800944A0000C6731800944A0000C66B1800FF00FF00FF00FF00FF00
FF00C66B1800944A0000FFF7F700FFF7F700FFF7F700FFF7F700FFF7F700FFF7
F700FFF7F700944A0000C6731800944A0000C6731800FF00FF00FF00FF00FF00
FF00C66B1000944A0000E79C2900E7942900E7942100DE8C2100DE8C2100DE8C
1800DE841800944A0000C6731800944A0000C6731800FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00C66B1800944A0000FFF7F700FFF7F700FFF7F700FFF7
F700FFF7F700FFF7F700FFF7F700944A0000C6731800FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00C66B1000944A0000E79C2900E7942900E7942100DE8C
2100DE8C2100DE8C1800DE841800944A0000C66B1000FF00FF00}
ParentDoubleBuffered = False
ParentFont = False
TabOrder = 3
OnClick = btnLoadClick
end
object btnDelete: TBitBtn
Left = 389
Top = 168
Width = 135
Height = 41
Caption = 'btnDelete'
DoubleBuffered = True
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
Glyph.Data = {
36060000424D3606000000000000360400002800000020000000100000000100
08000000000000020000630E0000630E00000001000000000000000000003300
00006600000099000000CC000000FF0000000033000033330000663300009933
0000CC330000FF33000000660000336600006666000099660000CC660000FF66
000000990000339900006699000099990000CC990000FF99000000CC000033CC
000066CC000099CC0000CCCC0000FFCC000000FF000033FF000066FF000099FF
0000CCFF0000FFFF000000003300330033006600330099003300CC003300FF00
330000333300333333006633330099333300CC333300FF333300006633003366
33006666330099663300CC663300FF6633000099330033993300669933009999
3300CC993300FF99330000CC330033CC330066CC330099CC3300CCCC3300FFCC
330000FF330033FF330066FF330099FF3300CCFF3300FFFF3300000066003300
66006600660099006600CC006600FF0066000033660033336600663366009933
6600CC336600FF33660000666600336666006666660099666600CC666600FF66
660000996600339966006699660099996600CC996600FF99660000CC660033CC
660066CC660099CC6600CCCC6600FFCC660000FF660033FF660066FF660099FF
6600CCFF6600FFFF660000009900330099006600990099009900CC009900FF00
990000339900333399006633990099339900CC339900FF339900006699003366
99006666990099669900CC669900FF6699000099990033999900669999009999
9900CC999900FF99990000CC990033CC990066CC990099CC9900CCCC9900FFCC
990000FF990033FF990066FF990099FF9900CCFF9900FFFF99000000CC003300
CC006600CC009900CC00CC00CC00FF00CC000033CC003333CC006633CC009933
CC00CC33CC00FF33CC000066CC003366CC006666CC009966CC00CC66CC00FF66
CC000099CC003399CC006699CC009999CC00CC99CC00FF99CC0000CCCC0033CC
CC0066CCCC0099CCCC00CCCCCC00FFCCCC0000FFCC0033FFCC0066FFCC0099FF
CC00CCFFCC00FFFFCC000000FF003300FF006600FF009900FF00CC00FF00FF00
FF000033FF003333FF006633FF009933FF00CC33FF00FF33FF000066FF003366
FF006666FF009966FF00CC66FF00FF66FF000099FF003399FF006699FF009999
FF00CC99FF00FF99FF0000CCFF0033CCFF0066CCFF0099CCFF00CCCCFF00FFCC
FF0000FFFF0033FFFF0066FFFF0099FFFF00CCFFFF00FFFFFF00000080000080
000000808000800000008000800080800000C0C0C00080808000191919004C4C
4C00B2B2B200E5E5E500C8AC2800E0CC6600F2EABF00B59B2400D8E9EC009933
6600D075A300ECC6D900646F710099A8AC00E2EFF10000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000E8E8E8E8E8E8
E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E86CE8E8
E8E8E8E8E8E8E8E8B4E8E8E8E881E8E8E8E8E8E8E8E8E8E8ACE8E8E897B46CE8
E8E8E8E8E8E8E8E8E8E8E8E881AC81E8E8E8E8E8E8E8E8E8E8E8E8E897C7B46C
E8E8E8E8E8E8E8B4E8E8E8E881E3AC81E8E8E8E8E8E8E8ACE8E8E8E8E897C090
E8E8E8E8E8E8B4E8E8E8E8E8E881E381E8E8E8E8E8E8ACE8E8E8E8E8E8E890B4
6CE8E8E8E8B46CE8E8E8E8E8E8E881AC81E8E8E8E8AC81E8E8E8E8E8E8E8E890
B46CE8E8B46CE8E8E8E8E8E8E8E8E881AC81E8E8AC81E8E8E8E8E8E8E8E8E8E8
90B46CB46CE8E8E8E8E8E8E8E8E8E8E881AC81AC81E8E8E8E8E8E8E8E8E8E8E8
E890B46CE8E8E8E8E8E8E8E8E8E8E8E8E881AC81E8E8E8E8E8E8E8E8E8E8E8E8
90B46C906CE8E8E8E8E8E8E8E8E8E8E881AC818181E8E8E8E8E8E8E8E8E8E890
B46CE8E8906CE8E8E8E8E8E8E8E8E881AC81E8E88181E8E8E8E8E8E8E890B4B4
6CE8E8E8E8906CE8E8E8E8E8E881ACAC81E8E8E8E88181E8E8E8E8E890C7B46C
E8E8E8E8E8E8906CE8E8E8E881E3AC81E8E8E8E8E8E88181E8E8E8E87A907AE8
E8E8E8E8E8E8E8E890E8E8E8AC81ACE8E8E8E8E8E8E8E8E881E8E8E8E8E8E8E8
E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8}
NumGlyphs = 2
ParentDoubleBuffered = False
ParentFont = False
TabOrder = 4
OnClick = btnDeleteClick
end
object siLangLinked1: TsiLangLinked
Version = '6.5.2'
StringsTypes.Strings = (
'TIB_STRINGLIST'
'TSTRINGLIST')
UseDefaultLanguage = True
NumOfLanguages = 7
LangDispatcher = F_LNG.siLangDisp
LangDelim = 1
LangNames.Strings = (
'RUS'
'UKR'
'ENG'
'GER'
'FRA'
'SPA'
'RUS_ARH')
Language = 'RUS'
ExcludedProperties.Strings = (
'Category'
'SecondaryShortCuts'
'HelpKeyword'
'InitialDir'
'HelpKeyword'
'ActivePage'
'ImeName'
'DefaultExt'
'FileName'
'FieldName'
'PickList'
'DisplayFormat'
'EditMask'
'KeyList'
'LookupDisplayFields'
'DropDownSpecRow'
'TableName'
'DatabaseName'
'IndexName'
'MasterFields'
'SQL'
'DeleteSQL'
'UpdateSQL'
'ModifySQL'
'KeyFields'
'LookupKeyFields'
'LookupResultField'
'DataField'
'KeyField'
'ListField')
Left = 64
Top = 200
TranslationData = {
73007400430061007000740069006F006E0073005F0055006E00690063006F00
640065000D000A00540046005F00520065007300650072007600010023043F04
4004300432043B0435043D043804350420004004350437043504400432043D04
4B043C04380420003A043E043F0438044F043C04380420003D04300420004304
340430043B0435043D043D043E043C0420004104350440043204350440043504
01001A04350440044304320430043D043D044F04200040043504370435044004
32043D0438043C04380420003A043E043F0456044F043C04380420003D043004
2000320456043404340430043B0435043D043E043C0443042000410435044004
320435044004560401004D0061006E006100670069006E006700200062006100
63006B0075007000730020006F006E00200061002000720065006D006F007400
65002000730065007200760065007200010001000100010001000D000A004C00
6100620065006C003100010021043F04380441043E043A042000440430043904
3B043E04320420003D0430042000410435044004320435044004350401002104
3F04380441043E043A0420004404300439043B045604320420003D0430042000
410435044004320435044004560401004C0069007300740020006F0066002000
660069006C006500730020006F006E0020007400680065002000730065007200
760065007200010001000100010001000D000A004C006100620065006C003200
0100170430043D044F0442043E0420003404380441043A043E0432043E043304
3E0420003F0440043E0441044204400430043D04410442043204300420003D04
3004200041043504400432043504400435042C0020001C043104200001001704
300439043D044F0442043E0420003404380441043A043E0432043E0433043E04
20003F0440043E04410442043E044004430420003D0430042000410435044004
32043504400456042C0020001C04310401004400690073006B00200073007000
61006300650020006F00630063007500700069006500640020006F006E002000
74006800650020007300650072007600650072002C0020004D00420001000100
0100010001000D000A004C006100620065006C00330001001B0438043C043804
420420003404380441043A043E0432043E0433043E0420003F0440043E044104
4204400430043D04410442043204300420003D04300420004104350440043204
3504400435042C0020001C043104200001001B0456043C045604420420003404
380441043A043E0432043E0433043E0420003F0440043E04410442043E044004
430420003D043004200041043504400432043504400456042C0020001C043104
010053006500720076006500720020006400690073006B002000730070006100
6300650020006C0069006D00690074002C0020004D0042000100010001000100
01000D000A006C00620041006C006C006F007700650064005300700061006300
65000100200001000100010001000100010001000D000A006C00620055007300
6500640053007000610063006500010020000100010001000100010001000100
0D000A0042007500740074006F006E0031000100170430043A0440044B044204
4C040100170430043A044004380442043804010043006C006F00730065000100
01000100010001000D000A00620074006E005300610076006500010062007400
6E00530061007600650001000100010001000100010001000D000A0062007400
6E004C006F00610064000100620074006E004C006F0061006400010001000100
01000100010001000D000A00620074006E00440065006C006500740065000100
620074006E00440065006C006500740065000100010001000100010001000100
0D000A0073007400480069006E00740073005F0055006E00690063006F006400
65000D000A007300740044006900730070006C00610079004C00610062006500
6C0073005F0055006E00690063006F00640065000D000A007300740046006F00
6E00740073005F0055006E00690063006F00640065000D000A00540046005F00
52006500730065007200760001005400610068006F006D006100010001000100
01000100010001000D000A004C006100620065006C0031000100540061006800
6F006D00610001000100010001000100010001000D000A004C00610062006500
6C00320001005400610068006F006D0061000100010001000100010001000100
0D000A004C006100620065006C00330001005400610068006F006D0061000100
0100010001000100010001000D000A006C00620041006C006C006F0077006500
64005300700061006300650001005400610068006F006D006100010001000100
01000100010001000D000A006C00620055007300650064005300700061006300
650001005400610068006F006D00610001000100010001000100010001000D00
0A0042007500740074006F006E00310001005400610068006F006D0061000100
0100010001000100010001000D000A00620074006E0053006100760065000100
5400610068006F006D00610001000100010001000100010001000D000A006200
74006E004C006F006100640001005400610068006F006D006100010001000100
01000100010001000D000A00620074006E00440065006C006500740065000100
5400610068006F006D00610001000100010001000100010001000D000A007300
74004D0075006C00740069004C0069006E00650073005F0055006E0069006300
6F00640065000D000A007300740053007400720069006E00670073005F005500
6E00690063006F00640065000D000A00730074004F0074006800650072005300
7400720069006E00670073005F0055006E00690063006F00640065000D000A00
7300740043006F006C006C0065006300740069006F006E0073005F0055006E00
690063006F00640065000D000A00730074004300680061007200530065007400
73005F0055006E00690063006F00640065000D000A00540046005F0052006500
73006500720076000100440045004600410055004C0054005F00430048004100
520053004500540001000100010001000100010001000D000A004C0061006200
65006C0031000100440045004600410055004C0054005F004300480041005200
53004500540001000100010001000100010001000D000A004C00610062006500
6C0032000100440045004600410055004C0054005F0043004800410052005300
4500540001000100010001000100010001000D000A004C006100620065006C00
33000100440045004600410055004C0054005F00430048004100520053004500
540001000100010001000100010001000D000A006C00620041006C006C006F00
770065006400530070006100630065000100440045004600410055004C005400
5F00430048004100520053004500540001000100010001000100010001000D00
0A006C0062005500730065006400530070006100630065000100440045004600
410055004C0054005F0043004800410052005300450054000100010001000100
0100010001000D000A0042007500740074006F006E0031000100440045004600
410055004C0054005F0043004800410052005300450054000100010001000100
0100010001000D000A00620074006E0053006100760065000100440045004600
410055004C0054005F0043004800410052005300450054000100010001000100
0100010001000D000A00620074006E004C006F00610064000100440045004600
410055004C0054005F0043004800410052005300450054000100010001000100
0100010001000D000A00620074006E00440065006C0065007400650001004400
45004600410055004C0054005F00430048004100520053004500540001000100
010001000100010001000D000A00}
end
end

512
SRC/Main/U_Reserv.pas Normal file
View File

@ -0,0 +1,512 @@
unit U_Reserv;
interface
uses
Windows, U_LNG, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdExplicitTLSClientServerBase, IdFTP, idUri, idFTPCommon,idFTPLIST, IdAllFTPListParsers,
IdFTPListParseBase,IdFTPListParseAS400, IdFTPListParsePcTcp, IdFTPListTypes,
Wininet, siComp, siLngLnk;
type
TF_Reserv = class(TForm)
Button1: TButton;
ListBox1: TListBox;
btnSave: TBitBtn;
btnLoad: TBitBtn;
btnDelete: TBitBtn;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
lbAllowedSpace: TLabel;
lbUsedSpace: TLabel;
siLangLinked1: TsiLangLinked;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure btnLoadClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function SendFileToFtp(aFtpStr, aFileName: string): boolean;
function GetFileFromFtp(aFtpStr, aFileNameShort, aFileName: string; aGetConfig: Boolean = false): boolean;
function GetFileListFromFtp(aFtpStr: string): TStringList;
function DeleteFileFromFtp(aFtpStr, aFileName: string): boolean;
Procedure RefreshFileList;
Procedure SetButtons(aSave, aLoad, aDelete: Boolean);
Procedure SelectItem;
Function HexToStr(const HexStr: string): string;
end;
var
F_reserv: TF_Reserv;
Selected_Item: integer;
FClientLimit: integer; // Ëèìèò êëèåíòà íà äèñêîâîå ïðîñòðàíñòâî íà ñåðâàêå, ÌÁ
FFact: Integer; // Çàíÿòî êëèåíòîì íà ñåðâåðå, ÌÁ
//FConnStr: string;
implementation
uses USCS_Main, U_Common, U_BaseCommon, U_BaseConstants;
{$R *.dfm}
function TF_Reserv.HexToStr(const HexStr: string): string;
var
i: Integer;
begin
Result := '';
i := 1;
while i <= Length(HexStr) do
begin
Result := Result + Chr(StrToInt('$' + Copy(HexStr, i, 2)) XOR 57);
Inc(i, 2);
end;
end;
Procedure TF_Reserv.SelectItem;
var i: integer;
begin
if F_Reserv.ListBox1.Count > 0 then
begin
for i := 0 to F_Reserv.ListBox1.Count - 1 do
begin
if F_Reserv.ListBox1.Selected[i] = true then
F_Reserv.ListBox1.Selected[i] := False;
end;
if Selected_Item > (F_Reserv.ListBox1.Count - 1) then
Selected_Item := (F_Reserv.ListBox1.Count - 1);
F_Reserv.ListBox1.Selected[Selected_Item] := true;
end
else
Selected_Item := 0;
end;
Procedure TF_Reserv.SetButtons(aSave, aLoad, aDelete: Boolean);
begin
F_Reserv.btnSave.Enabled := aSave;
F_Reserv.btnLoad.Enabled := aLoad;
F_Reserv.btnDelete.Enabled := aDelete;
end;
Procedure TF_Reserv.RefreshFileList;
var FileList: TStringList;
i: integer;
vSave, vLoad, vDelete: Boolean;
s, tmppath, filename: String;
f: TextFile;
UserLimit: integer;
begin
vSave := False;
vLoad := False;
vDelete := False;
//FConnStr := HexToStr(GFtpConnectStr);
F_Reserv.ListBox1.Clear;
tmppath := GetDefaultTempPath;//+'\' + 'USER.CFG';
{ FileList := F_Reserv.GetFileListFromFtp(GFtpConnectStr);
if FileList <> nil then
begin
F_Reserv.ListBox1.Clear;
for i := 0 to fileList.Count - 1 do // Client Config
begin
if UPPERCASE(FileList[i]) = 'USER.CFG' then // ôàéë ñ îáúåìîì âûäåëåííîãî ìåñòà äëÿ ïîëüçîâàòåëÿ íà ñåðâàêå
begin
tmppath := GetDefaultTempPath+'\' + 'USER.CFG';
if GetFileFromFtp(GFtpConnectStr, 'USER.CFG', tmppath) then //ïîëó÷èòü ñ ñåðâåðà è ïðî÷èòàòü ðàçìåð äîñòóïíîãî ìåñòà
begin
end;
end;
//F_Reserv.ListBox1.AddItem(filelist[i], nil);
end;
if F_Reserv.ListBox1.Items.Count > 0 then
SelectItem;
fileList.Free;
end;
}
FileName := tmppath + 'USER.CFG';
if fileExists(FileName) then
DeleteFile(FileNAme);
if GetFileFromFtp(HexToStr(GFtpConnectStr), 'USER.CFG', tmppath + 'USER.CFG', true) then //ïîëó÷èòü ñ ñåðâåðà è ïðî÷èòàòü ðàçìåð äîñòóïíîãî ìåñòà
begin
AssignFile(f,FileName);
Reset(f);
Readln(f,s);
CloseFile(f);
UserLimit := strtoint(s);
lballowedspace.Caption := s;
vSave := true;
vLoad := true;
vDelete := true;
////
FileList := F_Reserv.GetFileListFromFtp(HexToStr(GFtpConnectStr));
if FileList <> nil then
begin
F_Reserv.ListBox1.Clear;
for i := 0 to fileList.Count - 1 do // Client Config
begin
F_Reserv.ListBox1.AddItem(filelist[i], nil);
end;
if F_Reserv.ListBox1.Items.Count = 0 then
begin
vDelete := False;
vLoad := False;
end;
SelectItem;
fileList.Free;
if UserLimit >= strtoint(lbUsedSpace.Caption) then
vSave := True
else
vSave := False;
end;
end;
SetButtons(vSave, vLoad, vDelete);
end;
function TF_Reserv.SendFileToFtp(aFtpStr, aFileName: string): boolean;
var NameShort: String;
Ftp_serv: TIdFtp;
Uri: TIdURI;
begin
Result := False;
if FileExists(aFileName) then
begin
Uri := TIdUri.Create(aFtpStr);
Ftp_serv:= TIdFtp.create;
ftp_serv.Host := uri.host;
ftp_serv.Username := uri.username;
ftp_serv.Password := uri.password;
ftp_serv.Port := 21;
ftp_serv.Passive := true;
try
ftp_serv.Connect;
except
on E: Exception do
begin
//showmessage('Can not to connect!!!');
ftp_serv.Free;
URi.Free;
AddExceptionToLog(cFtpmes1, true);
exit;
end;
end;
if ftp_serv.Connected then
begin
NameShort := ExtractFileName(aFileName);
try
ftp_serv.Put(aFileName, NameShort);
Result := True;
except
on E: exception do
begin
Result := False;
AddExceptionToLog(cFtpmes2, true);
//showMessage('Can not to send a file!');
end;
end;
end;
ftp_serv.Disconnect;
ftp_serv.Free;
URi.Free;
end;
end;
function TF_Reserv.GetFileFromFtp(aFtpStr, aFileNameShort, aFileName: string; aGetConfig: Boolean = false): boolean;
var
Ftp_serv: TIdFtp;
Uri: TIdURI;
begin
Result := false;
Uri := TIdUri.Create(aFtpStr);
Ftp_serv:= TIdFtp.create;
ftp_serv.Host := uri.host;
ftp_serv.Username := uri.username;
ftp_serv.Password := uri.password;
ftp_serv.Port := 21;
ftp_serv.Passive := true;
try
ftp_serv.Connect;
except
on E: Exception do
begin
//showmessage('Can not to connect!!!');
Result := false;
ftp_serv.Free;
URi.Free;
AddExceptionToLog(cFtpmes1, true);
exit;
end;
end;
if ftp_serv.Connected then
begin
if aGetConfig then
begin
try
ftp_serv.ChangeDir('cfg');
ftp_serv.get(aFileNameShort, aFileName);
Result := True;
except
on E: exception do
begin
//showMessage('Can not to get file from ftp!');
AddExceptionToLog(cFtpmes6, true);
Result := False;
end;
end;
end
else
begin
try
ftp_serv.ChangeDir('/');
ftp_serv.get(aFileNameShort, aFileName);
Result := True;
except
on E: exception do
begin
//showMessage('Can not to get file from ftp!');
AddExceptionToLog(cFtpmes3, true);
Result := False;
end;
end;
end;
end;
ftp_serv.Disconnect;
ftp_serv.Free;
URi.Free;
end;
function TF_Reserv.GetFileListFromFtp(aFtpStr: string): TStringList;
var
Ftp_serv: TIdFtp;
Uri: TIdURI;
Size: Double;
i, rsize: integer;
begin
Result := TstringList.Create;
rsize := 0;
Uri := TIdUri.Create(aFtpStr);
Ftp_serv:= TIdFtp.create;
ftp_serv.Host := uri.host;
ftp_serv.Username := uri.username;
ftp_serv.Password := uri.password;
ftp_serv.Port := 21;
ftp_serv.Passive := true;
try
ftp_serv.Connect;
except
on E: Exception do
begin
//showmessage('Can not to connect!!!');
ftp_serv.Free;
URi.Free;
FreeAndNil(Result);
AddExceptionToLog(cFtpmes1, true);
exit;
end;
end;
if ftp_serv.Connected then
begin
try
//ftp_serv.List(Result,'*.*',false);
ftp_serv.ChangeDirUp;
ftp_serv.List(Result,'*.scs', false);
Size := 0;
for i := 0 to ftp_serv.DirectoryListing.Count - 1 do
begin
Size := Size + ftp_serv.Size(ftp_serv.DirectoryListing[i].FileName);
end;
rsize := round(size/1048576);
lbUsedSpace.Caption := inttostr(rsize);
if rsize >= strtoint(lballowedspace.Caption) then
lbUsedSpace.Font.Color := clRed
else
lbUsedSpace.Font.Color := clBlue;
//ftp_serv.List(Result,'', false);
except
on E: exception do
begin
//showmessage('Can not get filelist from FTP!');
FreeAndNil(Result);
AddExceptionToLog(cFtpmes5, true);
end;
end;
end;
ftp_serv.Disconnect;
ftp_serv.Free;
URi.Free;
end;
function TF_Reserv.DeleteFileFromFtp(aFtpStr, aFileName: string): boolean;
var
Ftp_serv: TIdFtp;
Uri: TIdURI;
begin
Result := False;
Uri := TIdUri.Create(aFtpStr);
Ftp_serv:= TIdFtp.create;
ftp_serv.Host := uri.host;
ftp_serv.Username := uri.username;
ftp_serv.Password := uri.password;
ftp_serv.Port := 21;
ftp_serv.Passive := true;
try
ftp_serv.Connect;
except
on E: Exception do
begin
//showmessage('Can not to connect!!!');
ftp_serv.Free;
URi.Free;
AddExceptionToLog(cFtpmes1, true);
exit;
end;
end;
if ftp_serv.Connected then
begin
try
ftp_serv.Delete(aFileName);
Result := True;
except
on E: exception do
begin
Result := False;
//showMessage('Can not to send a file!');
AddExceptionToLog(cFtpmes4, true);
end;
end;
end;
ftp_serv.Disconnect;
ftp_serv.Free;
URi.Free;
end;
procedure TF_Reserv.btnDeleteClick(Sender: TObject);
var i: integer;
begin
if ListBox1.Count > 0 then
begin
for i := 0 to ListBox1.Count - 1 do
begin
if ListBox1.Selected[i] = true then
begin
Selected_Item := i;
if DeleteFileFromFtp(HexToStr(GFtpConnectStr), ListBox1.Items[i]) then
begin
RefreshFileList;
end;
break;
end;
end;
end;
end;
procedure TF_Reserv.btnLoadClick(Sender: TObject);
var SaveDlg: TSaveDialog;
FileName: string;
i: integer;
begin
FileName := '';
for i := 0 to ListBox1.Count - 1 do
begin
if ListBox1.Selected[i] = true then
begin
FileName := ListBox1.Items[i];
break;
end;
end;
if fileName <> '' then
begin
SaveDlg := TSaveDialog.Create(nil);
SaveDlg.Filter := ' (*.scs)|*.SCS';
SaveDlg.FileName := fileName;
if SaveDlg.Execute then
begin
FileName := SaveDlg.FileName;
GetFileFromFtp(HexToStr(GFtpConnectStr), extractfilename(FileName), SaveDlg.FileName);
end;
SaveDlg.Free;
end;
end;
procedure TF_Reserv.btnSaveClick(Sender: TObject);
var OpenDlg: TOpenDialog;
FileNameShort, Filename: string;
i: integer;
begin
for i := 0 to ListBox1.Count - 1 do
begin
if ListBox1.Selected[i] = true then
begin
Selected_Item := i;
break;
end;
end;
OpenDlg := TOpenDialog.Create(nil);
OpenDlg.Filter := ' (*.scs)|*.SCS';
if OpenDlg.Execute then
begin
FileName := OpenDlg.FileName;
//FileNameShort := ExtractFileName(OpenDlg.FileName);
if SendFileToFtp(HexToStr(GFtpConnectStr), FileName) then
RefreshFileList;
end;
OpenDlg.Free;
end;
procedure TF_Reserv.Button1Click(Sender: TObject);
begin
F_Reserv.Close;
end;
procedure TF_Reserv.FormCreate(Sender: TObject);
begin
{
btnSave.Caption := 'Çàãðóçèòü ôàéë' + #13#10 + ' íà ñåðâåð';
btnLoad.Caption := 'Çàãðóçèòü ôàéë' + #13#10 + ' ñ ñåðâåðà';
btnDelete.Caption := 'Óäàëèòü ôàéë' + #13#10 + ' íà ñåðâåðå';
}
btnSave.Caption := cFtpbtnSaveCaption;
btnLoad.Caption := cFtpbtnLoadCaption;
btnDelete.Caption := cFtpbtnDeleteCaption;
Selected_Item := 0;
FClientLimit := 0;
FFact := 0;
lballowedspace.Font.Color := clBlue;
lbUsedSpace.Font.Color := clBlue;
end;
procedure TF_Reserv.FormShow(Sender: TObject);
var FileList: TStringList;
i: integer;
begin
RefreshFileList;
//SelectItem;
end;
end.

View File

@ -24,11 +24,16 @@ const
//DateEXE = '09.12.22';
//DateEXEPE = 'December, 09, 2022';
//BuildEXE = '381';
{
DateEXE = '27.03.24';
DateEXEPE = 'March, 27, 2024';
BuildEXE = '384';
}
DateEXE = '10.01.25';
DateEXEPE = 'January, 10, 2025';
BuildEXE = '385';
DownLoadPath = 'c:\temp\';

View File

@ -870,6 +870,7 @@ const // RefreshListType
stiExport = 7; // Tolik 11/07/2019 - -
sti3D = 8; // Tolik 03/10/2019
stiElectrical = 9; // Tolik 02/03/2021 --
stiReserv = 10;// Tolik 28/12/2024 -- резервное копирование
//
// UseKindInProj:
@ -5954,6 +5955,7 @@ var
GNeedReRaiseProperties: boolean = False;
GLoadPCadBackGroundImage: Boolean = False; // Tolik 29/01/2020 -- ïðèçíàê òîãî, ÷òî ãðóçèòñÿ ðàñòðîâîå èçîáðàæåíèå íà ïîäëîæêó Êàäà
GDropTracing: Boolean = false;// Tolik 11/11/2024 -- флажок сброса трассировки, если долго идет расчет пути
implementation

View File

@ -642,6 +642,7 @@ const
cBaseOptions_Msg2_7 = 'Експорт DWG/DXF'; // настройки для експорта DWG/DXF
cBaseOptions_Msg2_8 = '3Д'; // Tolik 03/10/2019 -- настройки для 3Д модели
cBaseOptions_Msg2_9 = 'Электрика'; // Tolik 03/02/2021 -- настройки для электрики сюда будем совать ....
cBaseOptions_Msg2_10 = 'Резервное копирование';
//
@ -3223,6 +3224,18 @@ const
cmAutoLabel_caption = 'Не предлагать вводить маркировку' + #13#10 +
'вручную.Маркировать автоматически';
//Tolik 06/01/2025 -- резервное копирование на FTP сервер
cFtpbtnSaveCaption = 'Загрузить файл' + #13#10 + ' на сервер';
cFtpbtnLoadCaption = 'Загрузить файл' + #13#10 + ' с сервера';
cFtpbtnDeleteCaption = 'Удалить файл' + #13#10 + ' на сервере';
cFtpmes1 = 'Не удалось подключиться к серверу!';
cFtpmes2 = 'Не удалось загрузить файл на сервер!';
cFtpmes3 = 'Не удалось загрузить файл с сервера';
cFtpmes4 = 'Не удалось удалить файл на сервере!';
cFtpmes5 = 'Не удалось получить список файлов с сервера!';
cFtpmes6 = 'Не удалось определить лимит пользователя!';
{$IFEND}
implementation

View File

@ -502,6 +502,8 @@
cBaseOptions_Msg2_7 = 'Export DWG/DXF'; // íàñòðîéêè äëÿ åêñïîðòà DWG/DXF
cBaseOptions_Msg2_8 = '3D'; // Tolik 03/10/2019 --
cBaseOptions_Msg2_9 = 'Electrical'; // Tolik 03/02/2021 --
cBaseOptions_Msg2_10 = 'Backup'; // Tolik (for FTP)
//
//-----------------------------------------------
@ -3253,3 +3255,15 @@
cmAutoLabel_caption = 'Do not offer to label manually.' + #13#10 +
'Label automatically.';
//Tolik 06/01/2025 -- FTP
cFtpbtnSaveCaption = 'Upload file' + #13#10 + ' to server';
cFtpbtnLoadCaption = 'Download file' + #13#10 + ' from server';
cFtpbtnDeleteCaption = 'Delete file' + #13#10 + ' from server';
cFtpmes1 = 'Failed to connect to the server!';
cFtpmes2 = 'Failed to upload file to the server!';
cFtpmes3 = 'Failed to download file from the server';
cFtpmes4 = 'Failed to delete file on the server!';
cFtpmes5 = 'Failed to get list of files from the server!';
cFtpmes6 = 'Unable to determine user limit!';

View File

@ -631,6 +631,8 @@
cBaseOptions_Msg2_7 = 'Åêñïîðò DWG/DXF';
cBaseOptions_Msg2_8 = '3Ä'; // Tolik 03/10/2019 --
cBaseOptions_Msg2_9 = 'Åëåêòðèêà';
cBaseOptions_Msg2_10 = 'Резервне копіювання';
//
@ -3210,3 +3212,14 @@
cmAutoLabel_caption = 'Íå ïðîïîíóâàòè ââîäèòè ìàðêóâàííÿ' + #13#10 +
'âðó÷íó. Ìàðêóâàòè àâòîìàòè÷íî';
//Tolik 06/01/2025 -- резервное копирование на FTP сервер
cFtpbtnSaveCaption = 'Завантажити файл' + #13#10 + ' на сервер';
cFtpbtnLoadCaption = 'Завантажити файл' + #13#10 + ' з сервера';
cFtpbtnDeleteCaption = 'Видалити файл' + #13#10 + ' на сервері';
cFtpmes1 = 'Не вдалося підключитися до сервера!';
cFtpmes2 = 'Не вдалося завантажити файл на сервер!';
cFtpmes3 = 'Не вдалося завантажити файл з сервера';
cFtpmes4 = 'Не вдалося видалити файл на сервері!';
cFtpmes5 = 'Не вдалося отримати список файлів з сервера!';
cFtpmes6 = 'Не вдалося визначити ліміт користувача!';

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,8 @@ uses
RzRadChk, RzCmboBx,
U_BaseCommon, U_BaseConstants, U_Common, siComp, siLngLnk, ComCtrls, RzSpnEdt,
Buttons, RzLabel{Tolik -- 02/03/2017 }, iniFiles;
Buttons, RzLabel{Tolik -- 02/03/2017 }, iniFiles, RzRadGrp,
USCS_Main;
type
TF_BaseOptions = class(TForm)
@ -143,6 +144,10 @@ type
cbAllowDropCableToRoute: TRzCheckBox;
cbAutoRouteCable: TRzCheckBox;
cbAutoAddNetworkEquipment: TRzCheckBox;
tsReserv: TRzTabSheet;
lbReserv: TLabel;
Label21: TLabel;
mdFtpConnect: TMemo;
procedure btChoiceMainCurrencyClick(Sender: TObject);
procedure btChoiceSecondCurrencyClick(Sender: TObject);
procedure cbMainCurrencyChange(Sender: TObject);
@ -603,6 +608,16 @@ begin
cbTraceElectric.Checked := Ini.ReadBool('Electrical', 'TraceElectrical', true);
end;
//
//Tolik 02/01/2025 -- ðåçåðâíîå êîïèðîâàíèå
mdFtpConnect.Text := GFtpConnectStr;
if Ini.SectionExists('ReservFtp') then
begin
//cbTraceElectric.Checked := Ini.ReadBool('Electrical', 'TraceElectrical', false);
mdFtpConnect.Text := Ini.ReadString('ReservFtp', 'ConnectString', '');
end
else
mdFtpConnect.Text := '';
//
end;
// íà äóðàêà
if StrToInt(edMaxSplinePointsCount.Text) < 1 then
@ -746,6 +761,11 @@ begin
ini.WriteBool('Electrical', 'TraceElectrical', cbTraceElectric.Checked);
GCallElectricAutoTraceMaster := cbTraceElectric.Checked;
//
//Tolik 02/01/2025 -- ðåçåðâíîå êîïèðîâàíèå
ini.WriteString('ReservFtp', 'ConnectString', mdFtpConnect.Text);
GFtpConnectStr := mdFtpConnect.Text;
FSCS_Main.mnuReserv.Enabled := GFtpConnectStr <> '';
//
Ini.Free;
//
FNormBase.WriteOptionsToINI;
@ -1098,6 +1118,7 @@ begin
AddElementTypeToTree(cBaseOptions_Msg2_8, sti3D, ts3D, lb3D); // Tolik 11/07/2019
AddElementTypeToTree(cBaseOptions_Msg2_9, stiElectrical, tsElectrical, lbElectrical); // Tolik 02/03/2021 -- ðàçäåë íàñòðîåê äëÿ ýëåêòðèêè
//
AddElementTypeToTree(cBaseOptions_Msg2_10, stiReserv, tsReserv, lbReserv); // Tolik 28/12/2024 -- ðàçäåë íàñòðîåê äëÿ ðåçåðâíîãî êîïèðîâàíèÿ
tvSettingTypes.Selected := tvSettingTypes.Items[1];
//*** ßçûêè äåçàéíåðà îò÷åòîâ
@ -1169,6 +1190,13 @@ begin
//cbTraceElectric.Checked := ProgIni.ReadBool('Electrical', 'TraceElectrical', false);
cbTraceElectric.Checked := ProgIni.ReadBool('Electrical', 'TraceElectrical', true);
end;
//
//Tolik 02/01/2025 --
if (ProgIni <> nil) and ProgIni.SectionExists('ReservFtp') then
begin
mdFtpConnect.Text := ProgIni.ReadString('ReservFtp', 'ConnectString', '');
end;
//
if (ProgIni <> nil) and ProgIni.SectionExists('ImportDxf') then
begin

View File

@ -34,7 +34,7 @@ const scNormBase = 'NormBase';
scCompTypeGroups = 'CompTypeGroups';
scElectrical = 'Electrical'; // Tolik 03/03/2021 --
scReservFtp = 'ReservFtp'; // Tolik 02/01/2025 -- для резервного копирования на ФТП
idtSelectedCompType = 'SelectedCompType';
//idtGroupCondition = 'GroupCondition';
@ -107,6 +107,7 @@ const idtPath = 'Path';
idtAllowDropCableToRoute = 'AllowDropCableToRoute'; // Tolik 28/05/2021 --
idtAutoRouteCableAfterTraceCreation = 'AutoRouteCableAfterTraceCreation'; // Tolik 09/08/2021 --
idtAutoAddNetworkEquipment = 'AutoAddNetworkEquipment'; // Tolik 26/03/2024
idtConnectString = 'ConnectString'; // Tolik 02/01/2025 --
//idtDirProjs = 'DirProjs';
//idtDirCompons = 'DirCompons';

View File

@ -1,6 +1,6 @@
object F_MAIN: TF_MAIN
Left = 867
Top = 27
Top = 0
HorzScrollBar.Color = clBtnFace
HorzScrollBar.ParentColor = False
VertScrollBar.Color = clBtnFace
@ -9,7 +9,7 @@ object F_MAIN: TF_MAIN
BorderIcons = [biSystemMenu]
BorderStyle = bsNone
Caption = #1053#1086#1088#1084#1072#1090#1080#1074#1085#1072#1103' '#1073#1072#1079#1072' '#1057#1050#1057' '#1082#1086#1084#1087#1086#1085#1077#1085#1090#1086#1074
ClientHeight = 711
ClientHeight = 696
ClientWidth = 357
Color = clWindow
Constraints.MinWidth = 160
@ -39,7 +39,7 @@ object F_MAIN: TF_MAIN
TextHeight = 13
object Panel_OKCancel: TPanel
Left = 0
Top = 650
Top = 635
Width = 357
Height = 61
Align = alBottom
@ -52,6 +52,7 @@ object F_MAIN: TF_MAIN
ParentFont = False
TabOrder = 0
Visible = False
ExplicitTop = 650
object Label_Kolvo: TLabel
Left = 16
Top = 8
@ -99,7 +100,7 @@ object F_MAIN: TF_MAIN
Left = 0
Top = 0
Width = 357
Height = 650
Height = 635
Align = alClient
BevelOuter = bvNone
DockSite = True
@ -110,9 +111,10 @@ object F_MAIN: TF_MAIN
OnDblClick = Panel_Main1Click
OnResize = Panel_MainResize
OnUnDock = Panel_MainUnDock
ExplicitHeight = 650
object Panel_Addition: TRzSizePanel
Left = 0
Top = 449
Top = 434
Width = 357
Height = 201
Align = alBottom
@ -123,6 +125,7 @@ object F_MAIN: TF_MAIN
SizeBarWidth = 7
TabOrder = 0
VisualStyle = vsClassic
ExplicitTop = 449
object ToolBar_CompData: TToolBar
Left = 0
Top = 47
@ -1294,7 +1297,7 @@ object F_MAIN: TF_MAIN
Left = 0
Top = 0
Width = 357
Height = 449
Height = 434
ActivePage = tsComponents
SaveResources = True
Align = alClient
@ -1321,11 +1324,13 @@ object F_MAIN: TF_MAIN
TabStyle = tsSquareCorners
OnChange = pcObjectsChange
OnMouseMove = pcObjectsMouseMove
ExplicitHeight = 449
FixedDimension = 22
object tsTemplates: TRzTabSheet
Hint = #1054#1073#1098#1077#1082#1090#1099
ImageIndex = 1
Caption = #1054#1073#1098#1077#1082#1090#1099
ExplicitHeight = 449
object lvTemplates: TRzListView
Left = 160
Top = 30
@ -1453,11 +1458,12 @@ object F_MAIN: TF_MAIN
ImageIndex = 2
Caption = #1050#1086#1084#1087#1086#1085#1077#1085#1090#1099
OnResize = tsComponentsResize
ExplicitHeight = 449
object Panel_Tree: TPanel
Left = 0
Top = 0
Width = 332
Height = 449
Height = 434
Align = alClient
BevelOuter = bvNone
Caption = #1055#1072#1087#1082#1080
@ -1475,6 +1481,7 @@ object F_MAIN: TF_MAIN
OnEndDock = Panel_TreeEndDock
OnMouseMove = Panel_TreeMouseMove
OnStartDock = Panel_TreeStartDock
ExplicitHeight = 449
object splFindInTree: TSplitter
Left = 0
Top = 201
@ -1579,7 +1586,7 @@ object F_MAIN: TF_MAIN
Left = 0
Top = 204
Width = 332
Height = 226
Height = 211
Align = alClient
DoubleBuffered = True
DragMode = dmAutomatic
@ -1618,6 +1625,7 @@ object F_MAIN: TF_MAIN
OnMouseMove = Tree_CatalogMouseMove
OnMouseUp = Tree_CatalogMouseUp
OnStartDrag = Tree_CatalogStartDrag
ExplicitHeight = 226
end
object Panel_New: TPanel
Left = -169
@ -1709,10 +1717,6 @@ object F_MAIN: TF_MAIN
FixedDimension = 13
object tsFind: TRzTabSheet
Caption = #1055#1086#1080#1089#1082
ExplicitLeft = 0
ExplicitTop = 0
ExplicitWidth = 0
ExplicitHeight = 0
object Panel2: TPanel
Left = 0
Top = 0
@ -2166,13 +2170,14 @@ object F_MAIN: TF_MAIN
end
object pnFilterIsOn: TRzPanel
Left = 0
Top = 430
Top = 415
Width = 332
Height = 19
Align = alBottom
BorderInner = fsFlat
BorderOuter = fsNone
TabOrder = 4
ExplicitTop = 430
object lbFilterIsOn: TRzLabel
Left = 8
Top = 2
@ -2215,6 +2220,7 @@ object F_MAIN: TF_MAIN
Caption = #1043#1088#1091#1087#1087#1099
ParentShowHint = False
ShowHint = False
ExplicitHeight = 449
object Splitter1: TSplitter
Left = 0
Top = 105
@ -2550,7 +2556,7 @@ object F_MAIN: TF_MAIN
Left = 0
Top = 108
Width = 332
Height = 341
Height = 326
SmoothExpandCollapse = False
FitColumnToClientWidth = True
RightClickSelect = True
@ -2583,6 +2589,7 @@ object F_MAIN: TF_MAIN
Images = DM.ImageList_Dir
ToolTips = True
ToolTipPause = 1000
ExplicitHeight = 341
Data = {
DA000000010000000610540046006C0079004E006F0064006500C0000000060E
440061007400610049006E0074001800000000000000061449006D0061006700
@ -8296,7 +8303,7 @@ object F_MAIN: TF_MAIN
Left = 200
Top = 152
Bitmap = {
494C0101040050011C0310001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
494C010104005001200310001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000400000002000000001002000000000000020
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000