BSOne.SFC/eCrmHE/EXE_eCrmInstaller/DeCrmHeInstMain.pas

655 lines
18 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

unit DeCrmHeInstMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
Vcl.Imaging.pngimage, PngImageList, System.ImageList, Vcl.ImgList,
Vcl.WinXPanels, Vcl.ComCtrls, VirtualTrees;
type
PInstEnt = ^TInstEnt;
TInstEnt = record
sName,
sDesc: String;
end;
TDlgeCrmHeInstMain = class(TForm)
seMain: TShape;
Label1: TLabel;
imgLogo: TImage;
imgProg: TImage;
imgMain: TImage;
imgInstall: TImage;
imgMin: TImage;
imgExit: TImage;
imgNext: TImage;
imgPrev: TImage;
imgBtns: TPngImageList;
imgProgs: TPngImageCollection;
imgBtns2: TPngImageList;
cpMain: TCardPanel;
cdWelcome: TCard;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
cdLicense: TCard;
Label5: TLabel;
Label6: TLabel;
mmLicense: TMemo;
rdAgree: TRadioButton;
rdNoAgree: TRadioButton;
cdInfo: TCard;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
edEmpNo: TEdit;
edVpnId: TEdit;
cdInstall: TCard;
Label11: TLabel;
imgProcess: TImage;
Label12: TLabel;
pg: TProgressBar;
vtList: TVirtualStringTree;
cdCompleted: TCard;
lbCompleted: TLabel;
lbCompletedMsg: TLabel;
lbExitMsg: TLabel;
tExit: TTimer;
cdInstalled: TCard;
imgBtnInit: TPngImageCollection;
imgDelete: TImage;
imgReinstall: TImage;
Label15: TLabel;
Label16: TLabel;
imgInstalled: TImage;
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure imgMinClick(Sender: TObject);
procedure imgExitClick(Sender: TObject);
procedure imgMinMouseEnter(Sender: TObject);
procedure imgMinMouseLeave(Sender: TObject);
procedure imgPrevMouseEnter(Sender: TObject);
procedure imgPrevMouseLeave(Sender: TObject);
procedure imgNextClick(Sender: TObject);
procedure imgPrevClick(Sender: TObject);
procedure rdAgreeClick(Sender: TObject);
procedure rdNoAgreeClick(Sender: TObject);
procedure tExitTimer(Sender: TObject);
procedure imgDeleteMouseEnter(Sender: TObject);
procedure imgDeleteMouseLeave(Sender: TObject);
procedure imgReinstallClick(Sender: TObject);
procedure imgDeleteClick(Sender: TObject);
procedure vtListGetNodeDataSize(Sender: TBaseVirtualTree;
var NodeDataSize: Integer);
procedure vtListFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
procedure vtListGetHint(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle;
var HintText: string);
procedure vtListGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
procedure edVpnIdKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
procedure SetImgBtn(aImgList: TPngImageList; imgBtn: TImage; nImgIdx: Integer);
procedure SetImgCtrl(aImgList: TPngImageCollection; imgCtrl: TImage; nImgIdx: Integer);
public
{ Public declarations }
Constructor Create(aOwner: TComponent); override;
procedure process_WM_SYSCOMMAND(var msg: TWMSysCommand); Message WM_SYSCOMMAND;
end;
function ProcessInstall(aInstForm: TDlgeCrmHeInstMain; bStartSvc: Boolean = false): Boolean;
var
DlgeCrmHeInstMain: TDlgeCrmHeInstMain;
implementation
uses
Define, Tocsg.Path, ProcessUninstall, GlobalDefine, Tocsg.VirtualTreeViewUtil,
Tocsg.Safe, Tocsg.Exception, System.Zip, ManagerModel, Tocsg.Service,
Winapi.WinSvc, Tocsg.Process, superobject, Tocsg.Shell, Tocsg.Files;
{$R *.dfm}
var
_nExitSec: Integer = 5;
function ProcessInstall(aInstForm: TDlgeCrmHeInstMain; bStartSvc: Boolean = false): Boolean;
procedure AddInstEnt(sName, sDesc: String);
var
pData: PInstEnt;
begin
if aInstForm <> nil then
begin
pData := VT_AddChildData(aInstForm.vtList);
pData.sName := sName;
pData.sDesc := sDesc;
aInstForm.pg.Position := aInstForm.pg.Position + 1;
Application.ProcessMessages;
end;
end;
var
sSysDir,
sInstDir,
sResPath: String;
AgentModel: TAgentModel;
function GetRes(sId: String): Boolean;
var
res: TResourceStream;
begin
Result := false;
if FileExists(sResPath) then
DeleteFile(sResPath);
try
res := TResourceStream.Create(HInstance, sId, 'raw');
if res <> nil then
begin
res.SaveToFile(sResPath);
res.Free;
Result := true;
end;
except
on E: Exception do
ETgException.TraceException(E, Format('Fail .. GetRes(), ID="%s"', [sId]));
end;
end;
function ExtrZip(sDestDir: String; bIgrErr: Boolean = false): Boolean;
begin
Result := bIgrErr or false;
if ForceDirectories(sDestDir) then
begin
try
TZipFile.ExtractZipFile(sResPath, sDestDir);
Result := true;
except
on E: Exception do
ETgException.TraceException(E, Format('Fail .. ExtrZip(), ExtrDir="%s"', [sDestDir]));
end;
end;
end;
var
ProcInfo: TProcessInformation;
begin
Result := false;
if aInstForm <> nil then
begin
aInstForm.pg.Position := 0;
aInstForm.pg.Max := 6;
end else begin
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD>Ȱ<EFBFBD> <20><><EFBFBD>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD> 22_0517 14:24:38 kku
sInstDir := GetProgramFilesDir + DIR_HE;
if not DirectoryExists(sInstDir) then
exit;
if not FileExists(sInstDir + 'conf\' + DAT_AGENT) and
not FileExists(sInstDir + 'conf\' + PROP_USERINFO) then
exit;
end;
try
ZeroMemory(@ProcInfo, SizeOf(ProcInfo));
if GetProcessPidByName(EXE_HE) <> 0 then
begin
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> EXE_HE <20><><EFBFBD>ҽ<EFBFBD><D2BD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD> 22_0517 13:59:04 kku
sInstDir := GetProgramFilesDir + DIR_TG;
if ForceDirectories(sInstDir) then
begin
sResPath := sInstDir + '$InstData';
if not GetRes('RS_HEBIN') then
exit;
if not ExtrZip(sInstDir + 'Temp\') then
exit;
DeleteFile(sResPath);
if CopyFile(PChar(sInstDir + 'Temp\' + EXE_HE), PChar(sInstDir + EXE_HE), false) then
begin
Sleep(500);
DeleteDir(sInstDir + 'Temp\', true, true);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>缳ġ<E7BCB3><C4A1><EFBFBD><EFBFBD> EXE_HE <20>״°<D7B4> <20><><EFBFBD><EFBFBD> VPN<50><4E> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʵ<EFBFBD><CAB5><EFBFBD> <20><><EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>. 22_0511 15:26:13 kku
var sCurPath: String := sInstDir + EXE_HE;
if FileExists(sCurPath) then
begin
Sleep(1000);
var O: ISuperObject := SO;
O.I['M'] := 11; // MODE_DUMMY
O.B['SD'] := true;
O.S['AM'] := MUTEX_INSTALLER;
var sParam: String := GetRunExePathDir + 'reqprm.json';
if SaveJsonObjToFile(O, sParam) then
ProcInfo := ExecuteAppAsUser(GetCurrentProcessId, sCurPath, Format('-i "%s"', [sParam]), SW_HIDE)
else
DeleteFile(sCurPath);
end;
end;
end;
end;
AddInstEnt('Tocsg.Installation.Initator', 'Initiate application check');
UninstallCrmHE(ProcInfo.dwProcessId, aInstForm = nil {true = <20><>ġ});
sInstDir := GetProgramFilesDir + DIR_HE;
if not ForceDirectories(sInstDir) then
exit;
sResPath := sInstDir + '$InstData';
AddInstEnt('Tocsg.Installation.Service', 'Service check');
if GetRes('RS_KVBIN') then
begin
// <20>̰<EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>. 22_0517 16:39:29 kku
ExtrZip(sInstDir + 'bin\');
// if not ExtrZip(sInstDir + 'bin\') then
// exit;
end;
AddInstEnt('Tocsg.Installation.Component', 'Component check');
if not GetRes('RS_CONF') then
exit;
if not ExtrZip(sInstDir + 'conf\') then
exit;
AddInstEnt('Tocsg.Installation.LiceseMgr', 'License check');
if not GetRes('RS_HEBIN') then
exit;
if not ExtrZip(sInstDir) then
exit;
// MG.exe<78><65><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD> <20><><EFBFBD><EFBFBD>? DLL <20><><EFBFBD><EFBFBD>
if not GetRes('RS_DLLS') then
exit;
sSysDir := GetSystemDir;
if not ExtrZip(sSysDir, true) then
exit;
DeleteFile(sResPath);
AddInstEnt('Tocsg.Installation.Executable', 'Environment check');
if aInstForm <> nil then
begin
Guard(AgentModel, TAgentModel.Create);
AgentModel.EmpNo := aInstForm.edEmpNo.Text;
AgentModel.VpnInfo := aInstForm.edVpnId.Text;
AgentModel.Save(sInstDir + 'conf\' + DAT_AGENT);
end;
AddInstEnt('Tocsg.Installation.ServiceManager', 'Windows Service Registration');
if FileExists(sInstDir + DLL_SV) then
begin
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DLL <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DLL<4C><4C> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD>α׷<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰ߵƴ<DFB5>... 22_0511 17:21:35 kku
if not MoveFile(PChar(sInstDir + DLL_SV), PChar(sSysDir + DLL_SV)) then
exit;
Sleep(1000);
AddInstEnt('Tocsg.Installation.Validator', 'Validating the installation');
if ServiceExists(NAME_SERVICE) or
InstallServiceDll(sSysDir + DLL_SV,
SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START) then
begin
Sleep(500);
if bStartSvc then
begin
Result := ServiceStart(NAME_SERVICE);
SetVisibleServce(NAME_SERVICE, false);
end else
Result := true;
end;
end else begin
if not MoveFile(PChar(sInstDir + EXE_SV), PChar(sSysDir + EXE_SV)) then
exit;
Sleep(1000);
AddInstEnt('Tocsg.Installation.Validator', 'Validating the installation');
if InstallService(NAME_SERVICE, sSysDir + EXE_SV, NAME_SERVICE,
SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START) then
begin
Sleep(500);
if bStartSvc then
begin
Result := ServiceStart(NAME_SERVICE);
SetVisibleServce(NAME_SERVICE, false);
end else
Result := true;
end;
end;
except
on E: Exception do
ETgException.TraceException(E, 'Fail .. ProcessInstall()');
end;
end;
{ TDlgeCrmHeInstMain }
Constructor TDlgeCrmHeInstMain.Create(aOwner: TComponent);
procedure InitCtrls;
var
i: Integer;
sInstDir: String;
begin
SetImgBtn(imgBtns, imgMin, 0);
SetImgBtn(imgBtns, imgExit, 2);
SetImgBtn(imgBtns2, imgPrev, 0);
SetImgBtn(imgBtns2, imgNext, 2);
SetImgCtrl(imgProgs, imgProg, 0);
sInstDir := GetProgramFilesDir + DIR_HE;
if DirectoryExists(sInstDir) and
FileExists(sInstDir + EXE_HE) then
begin
SetImgCtrl(imgBtnInit, imgDelete, imgDelete.Tag);
SetImgCtrl(imgBtnInit, imgReinstall, imgReinstall.Tag);
imgNext.Visible := false;
cpMain.ActiveCard := cdInstalled;
end else
cpMain.ActiveCard := cdWelcome;
end;
begin
Inherited Create(aOwner);
Caption := APP_NAME;
InitCtrls;
end;
procedure TDlgeCrmHeInstMain.SetImgBtn(aImgList: TPngImageList; imgBtn: TImage; nImgIdx: Integer);
begin
aImgList.GetIcon(nImgIdx, imgBtn.Picture.Icon);
imgBtn.Repaint
end;
procedure TDlgeCrmHeInstMain.SetImgCtrl(aImgList: TPngImageCollection; imgCtrl: TImage; nImgIdx: Integer);
begin
if (nImgIdx > -1) and (aImgList.Items.Count > nImgIdx) then
imgCtrl.Picture.Assign(aImgList.Items[nImgIdx].PngImage);
end;
procedure TDlgeCrmHeInstMain.tExitTimer(Sender: TObject);
begin
Dec(_nExitSec);
if _nExitSec <= 0 then
begin
tExit.Enabled := false;
Close;
exit;
end;
lbExitMsg.Caption := Format('<27><>ġ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>˴ϴ<CBB4>.', [_nExitSec]);
Application.ProcessMessages;
end;
procedure TDlgeCrmHeInstMain.vtListFreeNode(Sender: TBaseVirtualTree;
Node: PVirtualNode);
var
pData: PInstEnt;
begin
pData := Sender.GetNodeData(Node);
Finalize(pData^);
end;
procedure TDlgeCrmHeInstMain.vtListGetHint(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex;
var LineBreakStyle: TVTTooltipLineBreakStyle; var HintText: string);
begin
HintText := vtList.Text[Node, Column];
end;
procedure TDlgeCrmHeInstMain.vtListGetNodeDataSize(Sender: TBaseVirtualTree;
var NodeDataSize: Integer);
begin
NodeDataSize := SizeOf(TInstEnt);
end;
procedure TDlgeCrmHeInstMain.vtListGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: string);
var
pData: PInstEnt;
begin
pData := Sender.GetNodeData(Node);
case Column of
0 : CellText := IntToStr(Node.Index + 1);
1 : CellText := pData.sName;
2 : CellText := pData.sDesc;
end;
end;
procedure TDlgeCrmHeInstMain.edVpnIdKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Key := #0;
imgNextClick(nil);
exit;
end;
end;
procedure TDlgeCrmHeInstMain.FormMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
end;
procedure TDlgeCrmHeInstMain.imgDeleteClick(Sender: TObject);
begin
if MessageBox(Handle, PChar('<27><><EFBFBD><EFBFBD><EFBFBD>Ͻðڽ<C3B0><DABD>ϱ<EFBFBD>?'),
PChar(Caption), MB_ICONQUESTION or MB_YESNO) = IDNO then exit;
if UninstallCrmHE then
begin
imgNext.Tag := 4;
imgNext.Visible := true;
SetImgBtn(imgBtns2, imgNext, imgNext.Tag);
SetImgCtrl(imgProgs, imgProg, 4);
tExit.Enabled := true;
imgInstalled.Visible := false;
lbCompleted.Caption := '<27><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>';
lbCompletedMsg.Caption := 'QS-eCRM Home Edition <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD><CFB7>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.';
cpMain.ActiveCard := cdCompleted;
Application.ProcessMessages;
end else begin
MessageBox(Handle, PChar('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.'+#13+#10+'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20>õ<EFBFBD><C3B5><EFBFBD> <20>ֽʽÿ<CABD>.'),
PChar(Caption), MB_ICONWARNING or MB_OK);
end;
end;
procedure TDlgeCrmHeInstMain.imgDeleteMouseEnter(Sender: TObject);
begin
if Sender is TImage then
SetImgCtrl(imgBtnInit, TImage(Sender), TImage(Sender).Tag + 1);
end;
procedure TDlgeCrmHeInstMain.imgDeleteMouseLeave(Sender: TObject);
begin
if Sender is TImage then
SetImgCtrl(imgBtnInit, TImage(Sender), TImage(Sender).Tag);
end;
procedure TDlgeCrmHeInstMain.imgExitClick(Sender: TObject);
begin
if not tExit.Enabled then
begin
if MessageBox(Handle, PChar('<27><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻðڽ<C3B0><DABD>ϱ<EFBFBD>?'),
PChar(Caption), MB_ICONQUESTION or MB_YESNO) = IDNO then exit;
end;
Close;
end;
procedure TDlgeCrmHeInstMain.imgMinClick(Sender: TObject);
begin
WindowState := TWindowState.wsMinimized;
end;
procedure TDlgeCrmHeInstMain.imgMinMouseEnter(Sender: TObject);
begin
if Sender is TImage then
SetImgBtn(imgBtns, TImage(Sender), TImage(Sender).Tag + 1);
end;
procedure TDlgeCrmHeInstMain.imgMinMouseLeave(Sender: TObject);
begin
if Sender is TImage then
SetImgBtn(imgBtns, TImage(Sender), TImage(Sender).Tag);
end;
procedure TDlgeCrmHeInstMain.imgNextClick(Sender: TObject);
begin
if imgNext.Tag = 4 then
begin
Close;
exit;
end;
case cpMain.ActiveCardIndex of
0 :
begin
imgPrev.Visible := true;
cpMain.ActiveCard := cdLicense;
imgNext.Enabled := rdAgree.Checked;
if imgNext.Enabled then
SetImgBtn(imgBtns2, imgNext, imgNext.Tag)
else
SetImgBtn(imgBtns2, imgNext, imgNext.Tag + 1);
SetImgCtrl(imgProgs, imgProg, 1);
end;
1 :
begin
cpMain.ActiveCard := cdInfo;
SetImgCtrl(imgProgs, imgProg, 2);
end;
2 :
begin
edEmpNo.Text := Trim(edEmpNo.Text);
edVpnId.Text := Trim(edVpnId.Text);
if edEmpNo.Text = '' then
begin
MessageBox(Handle, PChar('"<22><><EFBFBD><EFBFBD>"<22><> <20>Է<EFBFBD><D4B7><EFBFBD> <20>ֽʽÿ<CABD>.'), PChar(Caption), MB_ICONWARNING or MB_OK);
edEmpNo.SetFocus;
exit;
end;
if edVpnId.Text = '' then
begin
MessageBox(Handle, PChar('"VPN <20><><EFBFBD><EFBFBD>"<22><> <20>Է<EFBFBD><D4B7><EFBFBD> <20>ֽʽÿ<CABD>.'), PChar(Caption), MB_ICONWARNING or MB_OK);
edVpnId.SetFocus;
exit;
end;
cpMain.ActiveCard := cdInstall;
SetImgCtrl(imgProgs, imgProg, 3);
imgPrev.Enabled := false;
SetImgBtn(imgBtns2, imgPrev, imgPrev.Tag + 1);
imgNext.Enabled := false;
SetImgBtn(imgBtns2, imgNext, imgNext.Tag + 1);
if ProcessInstall(Self, false) then
begin
imgNext.Enabled := true;
SetImgBtn(imgBtns2, imgNext, imgNext.Tag);
end else
MessageBox(Handle, PChar('<27><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB>߽<EFBFBD><DFBD>ϴ<EFBFBD>.'), PChar(Caption), MB_ICONSTOP or MB_OK);
end;
3 :
begin
cpMain.ActiveCard := cdCompleted;
imgPrev.Visible := false;
imgNext.Tag := 4;
SetImgBtn(imgBtns2, imgNext, imgNext.Tag);
SetImgCtrl(imgProgs, imgProg, 4);
tExit.Enabled := true;
// <20><><EFBFBD>߿<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD> 22_0510 15:13:29 kku
// <20>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20>ݱ<EFBFBD> ī<><C4AB><EFBFBD>ɶ<EFBFBD> <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD> <20>˾<EFBFBD> <20>Ǿ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
ServiceStart(NAME_SERVICE);
SetVisibleServce(NAME_SERVICE, false);
end;
end;
end;
procedure TDlgeCrmHeInstMain.imgPrevClick(Sender: TObject);
begin
case cpMain.ActiveCardIndex of
1 :
begin
imgPrev.Visible := false;
cpMain.ActiveCard := cdWelcome;
imgNext.Enabled := true;
SetImgBtn(imgBtns2, imgNext, imgNext.Tag);
SetImgCtrl(imgProgs, imgProg, 0);
end;
2 :
begin
cpMain.ActiveCard := cdLicense;
SetImgCtrl(imgProgs, imgProg, 1);
end;
end;
end;
procedure TDlgeCrmHeInstMain.imgPrevMouseEnter(Sender: TObject);
begin
if (Sender is TImage) and TImage(Sender).Enabled then
SetImgBtn(imgBtns2, TImage(Sender), TImage(Sender).Tag + 1);
end;
procedure TDlgeCrmHeInstMain.imgPrevMouseLeave(Sender: TObject);
begin
if (Sender is TImage) and TImage(Sender).Enabled then
SetImgBtn(imgBtns2, TImage(Sender), TImage(Sender).Tag);
end;
procedure TDlgeCrmHeInstMain.imgReinstallClick(Sender: TObject);
begin
imgNext.Visible := true;
cpMain.ActiveCard := cdWelcome;
end;
procedure TDlgeCrmHeInstMain.process_WM_SYSCOMMAND(var msg: TWMSysCommand);
begin
if msg.CmdType = SC_CLOSE then
begin
imgExitClick(nil);
exit;
end;
Inherited;
end;
procedure TDlgeCrmHeInstMain.rdAgreeClick(Sender: TObject);
begin
if rdAgree.Checked then
begin
SetImgBtn(imgBtns2, imgNext, imgNext.Tag);
imgNext.Enabled := true;
end;
end;
procedure TDlgeCrmHeInstMain.rdNoAgreeClick(Sender: TObject);
begin
if rdNoAgree.Checked then
begin
SetImgBtn(imgBtns2, imgNext, imgNext.Tag + 1);
imgNext.Enabled := false;
end;
end;
end.