unit DSchPiNoti; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Imaging.pngimage, Vcl.ExtCtrls, PngImageList, superobject, Vcl.StdCtrls, System.ImageList, Vcl.ImgList, Vcl.Imaging.GIFImg, System.Win.TaskbarCore, Vcl.Taskbar; //{$DEFINE _FILEENC_STOPABLE_} type TDlgSchPiNoti = class(TForm) imgMain: TImage; imgList: TPngImageCollection; imgBtnOk: TImage; imgBtnExit: TImage; lbCnt: TLabel; lbTop: TLabel; lbBtn: TLabel; lbBottom: TLabel; imgEnc: TImage; tProg: TTimer; Taskbar: TTaskbar; lbDetail: TLabel; lbTitle: TLabel; lbDetailMsg: TLabel; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure imgMainMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure imgBtnOkMouseEnter(Sender: TObject); procedure imgBtnOkMouseLeave(Sender: TObject); procedure imgBtnOkMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure imgBtnExitMouseEnter(Sender: TObject); procedure imgBtnExitMouseLeave(Sender: TObject); procedure imgBtnExitClick(Sender: TObject); procedure tProgTimer(Sender: TObject); procedure lbBtnClick(Sender: TObject); procedure lbDetailClick(Sender: TObject); procedure lbDetailMouseEnter(Sender: TObject); procedure lbDetailMouseLeave(Sender: TObject); private { Private declarations } llProcTgFileCnt_, llTotalTgFileCnt_: LONGLONG; clLabel_: TColor; procedure SetImgBtn(aImg: TImage; nImgIdx: Integer); public { Public declarations } Constructor Create(aOwner: TComponent; sJsonData: String); procedure CreateParams(var Params: TCreateParams); override; procedure process_WM_SYSCOMMAND(var msg: TWMSysCommand); Message WM_SYSCOMMAND; end; var DlgSchPiNoti: TDlgSchPiNoti; implementation uses Tocsg.Safe, Tocsg.Strings, DeCrmHeMain, ManagerService, Condition, GlobalDefine, Tocsg.Thread, Tocsg.Exception, Define; resourcestring RS_Caution = '위험'; RS_Warning = '경고'; RS_Attention = '주의'; RS_FileEnc = '파일 암호화'; RS_EncTasking = '암호화 수행 중'; RS_Stop = '중지'; RS_Close = '닫기'; RS_InfoProtec = '정보보호'; RS_FileEncComp = '파일 암호화 완료'; RS_Ok = '확인'; RS_FileEncStop = '파일 암호화 중지'; RS_Enc = '암호화'; RS_TargetCheck = '대상 파일 확인중...'; RS_SecuCenter = '보안지원센터'; RS_Q_EncStop = '파일 암호화를 중지 하시겠습니까?'; {$R *.dfm} Constructor TDlgSchPiNoti.Create(aOwner: TComponent; sJsonData: String); var hTarkBar: HWND; r: TRect; O: ISuperObject; begin Inherited Create(aOwner); SetImgBtn(imgBtnOk, 2); SetImgBtn(imgBtnExit, 5); clLabel_ := clGray; try O := SO(sJsonData); if O <> nil then begin case O.I['T'] of TYPE_MSG_CTTSCH_COMPLETE : begin lbDetail.Visible := true; clLabel_ := $0014C2FB; var nCnt: Integer := 0; var StrList: TStringList; Guard(StrList, TStringList.Create); SplitString(O.S['D'], '|', StrList); if StrList.Count > 1 then nCnt := StrToIntDef(StrList[1], 0); if gMgSvc.ProcCampn <> nil then begin if gMgSvc.ProcCampn.Info.nNotiCriIfCnt <= nCnt then begin SetImgBtn(imgMain, 1); lbCnt.Caption := RS_Caution + ' (' + InsertPointComma(nCnt, 3) + ')'; clLabel_ := $00384EF8; end else if gMgSvc.ProcCampn.Info.nNotiWarIfCnt <= nCnt then begin SetImgBtn(imgMain, 0); lbCnt.Caption := RS_Warning + ' (' + InsertPointComma(nCnt, 3) + ')'; clLabel_ := $002E8EFF; end else lbCnt.Caption := RS_Attention + ' (' + InsertPointComma(nCnt, 3) + ')'; end; lbCnt.Font.Color := clLabel_; lbDetail.Font.Color := clLabel_; end; TYPE_MSG_CAMPN_FILEENC : begin gMgSvc.DlgEncCampn := Self; Caption := RS_FileEnc; SetImgBtn(imgMain, 7); lbTitle.Caption := RS_EncTasking; lbTitle.Visible := true; Taskbar.ProgressState := TTaskBarProgressState.Normal; Taskbar.ProgressMaxValue := 100; Taskbar.ProgressValue := 0; {$IFDEF _FILEENC_STOPABLE_} lbBtn.Caption := RS_Stop; {$ELSE} lbBtn.Caption := RS_Close; // 중지 기능 없앰 24_0104 15:48:57 kku {$ENDIF} lbCnt.Top := 301; lbCnt.Caption := '...'; lbCnt.Font.Style := lbCnt.Font.Style - [fsBold]; lbCnt.Font.Color := clGray; lbCnt.Font.Size := 13; if imgEnc.Picture.Graphic is TGIFImage then begin TGIFImage(imgEnc.Picture.Graphic).Animate := true; imgEnc.Top := 122; imgEnc.Left := 95; imgEnc.Visible := true; imgEnc.BringToFront; end; // lbCnt.OnClick := nil; // lbCnt.OnMouseDown := nil; // lbCnt.OnMouseEnter := nil; // lbCnt.OnMouseLeave := nil; imgBtnOk.OnMouseDown := nil; imgBtnOk.OnMouseEnter := nil; imgBtnOk.OnMouseLeave := nil; tProg.Enabled := true; end; end; end; except end; lbBottom.Caption := ''; case CUSTOMER_TYPE of CUSTOMER_GEC : lbTop.Caption := RS_InfoProtec; CUSTOMER_HDENG : begin lbTop.Caption := RS_InfoProtec; lbBottom.Caption := RS_SecuCenter + ' 02-2134-1145'; end; CUSTOMER_KISTEP : lbTop.Caption := APP_TITLE; else lbTop.Caption := 'BSOne'; end; var h: HWND := FindWindow('TDlgNoticeImg', nil); if h <> 0 then PostMessage(h, WM_CLOSE, 0, 0); hTarkBar := FindWindow('Shell_TrayWnd', ''); if hTarkBar <> 0 then begin GetWindowRect(hTarkBar, r); // Top가 0이면 위, 왼쪽 아님 오른쪽 if (r.Left <= 0) and (r.Right < Screen.PrimaryMonitor.Width) then begin // 왼쪽 Top := Screen.PrimaryMonitor.Height; Left := Screen.PrimaryMonitor.Width; end else if (r.Left <= 0) and (r.Top = 0) and (r.Bottom < Screen.PrimaryMonitor.Height) then begin // 위쪽 Top := Screen.PrimaryMonitor.Height; Left := Screen.PrimaryMonitor.Width; end else if (r.Left <= 0) and (r.Top > 0) then begin // 아래쪽 Top := Screen.PrimaryMonitor.Height - (r.Bottom - r.Top); Left := Screen.PrimaryMonitor.Width;// - Width; end else begin // 오른쪽 Top := Screen.PrimaryMonitor.Height; Left := Screen.PrimaryMonitor.Width - (r.Right - r.Left);// - Width - (r.Right - r.Left); end; // nVCnt := Screen.PrimaryMonitor.Height div Height; // nHPos := _nNotiCnt mod nVCnt; // if nHPos = 0 then // begin // Left := Left - (_nNotiCnt div nVCnt) * Width; // nHPos := nVCnt; // end else // Left := Left - ((_nNotiCnt div nVCnt) + 1) * Width; // Top := Top - (nHPos * Height); Top := Top - Height; Left := Left - Width; end; end; procedure TDlgSchPiNoti.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := WS_EX_APPWINDOW; // 작업표시줄에 표시 Params.WindowClass.Style := Params.WindowClass.Style or CS_DROPSHADOW; Params.WndParent := GetDesktopWindow; end; procedure TDlgSchPiNoti.FormClose(Sender: TObject; var Action: TCloseAction); begin if lbCnt.Top = 301 then gMgSvc.DlgEncCampn := nil; Action := caFree; end; procedure TDlgSchPiNoti.imgBtnExitClick(Sender: TObject); begin {$IFDEF _FILEENC_STOPABLE_} if (lbCnt.Top = 301) and tProg.Enabled then begin WindowState := wsMinimized; end else {$ELSE} if (lbCnt.Top = 301) and tProg.Enabled then begin WindowState := wsMinimized; Hide; end else {$ENDIF} Close; end; procedure TDlgSchPiNoti.imgBtnExitMouseEnter(Sender: TObject); begin SetImgBtn(imgBtnExit, 6); end; procedure TDlgSchPiNoti.imgBtnExitMouseLeave(Sender: TObject); begin SetImgBtn(imgBtnExit, 5); end; procedure TDlgSchPiNoti.imgBtnOkMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin SetImgBtn(imgBtnOk, 4); end; procedure TDlgSchPiNoti.imgBtnOkMouseEnter(Sender: TObject); begin SetImgBtn(imgBtnOk, 3); end; procedure TDlgSchPiNoti.imgBtnOkMouseLeave(Sender: TObject); begin SetImgBtn(imgBtnOk, 2); end; procedure TDlgSchPiNoti.imgMainMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); end; procedure TDlgSchPiNoti.lbBtnClick(Sender: TObject); begin if tProg.Enabled then begin {$IFDEF _FILEENC_STOPABLE_} if MessageBox(Handle, PChar(RS_Q_EncStop), PChar(Caption), MB_ICONQUESTION or MB_YESNO) = IDNO then exit; tProg.Enabled := false; var LogInfo: TLogInfo; ZeroMemory(@LogInfo, SizeOf(LogInfo)); if gMgsvc.ProcCampn <> nil then begin LogInfo.sFileCompId := gMgsvc.ProcCampn.Info.sId; LogInfo.sComment := gMgSvc.ThdScanSch.CttSchProg.sTaskId; end; LogInfo.sCode := SYSEVT_STOP_CAMPN_FILEENC; LogInfo.sSummary := 'Stop Campaign - FileEnc '; gMgSvc.SendEventLogEx(@LogInfo, false); gMgSvc.StopCampaignTask; {$ELSE} // 최소화, 숨기지 않고 그냥 닫히도록 수정 24_0112 09:16:36 kku // 다시 숨겨달라고 변경 24_0125 13:54:19 kku WindowState := wsMinimized; Hide; exit; // WindowState := wsMinimized; // exit; {$ENDIF} end; Close; end; procedure TDlgSchPiNoti.lbDetailClick(Sender: TObject); begin gMain.lbCttSchRstClick(nil); end; procedure TDlgSchPiNoti.lbDetailMouseEnter(Sender: TObject); begin lbDetail.Font.Style := lbDetail.Font.Style + [fsUnderline]; lbDetail.Font.Color := $00FE8645; end; procedure TDlgSchPiNoti.lbDetailMouseLeave(Sender: TObject); begin lbDetail.Font.Style := lbDetail.Font.Style - [fsUnderline]; lbDetail.Font.Color := clLabel_; end; procedure TDlgSchPiNoti.SetImgBtn(aImg: TImage; nImgIdx: Integer); begin aImg.Picture.Assign(imgList.Items[nImgIdx].PngImage); aImg.Repaint; end; procedure TDlgSchPiNoti.tProgTimer(Sender: TObject); var sProcFile: String; wPercent: WORD; begin try if gMgSvc.IsSearchingPersonalInfo then begin case gMgSvc.ThdScanSch.WorkState of tsWorking : begin sProcFile := gMgSvc.ThdScanSch.ProcSchFile; if sProcFile <> '' then begin llProcTgFileCnt_ := gMgSvc.ThdScanSch.ProcTgFileCount; llTotalTgFileCnt_ := gMgSvc.ThdScanSch.TotalTgFileCount; if llTotalTgFileCnt_ > 0 then wPercent := (llProcTgFileCnt_ * 100) div llTotalTgFileCnt_ else wPercent := 0; lbCnt.Caption := Format('%d%% %s : %s', [wPercent, RS_Enc, InsertPointComma(gMgSvc.ThdScanSch.TotalEncCount, 3)]); Caption := Format('%d%% - ', [wPercent]) + RS_FileEnc; Taskbar.ProgressValue := wPercent; end else begin lbCnt.Caption := RS_TargetCheck; // if lbCttSchSP.Visible then // begin // if lbCttSchSP.Caption = '?...' then // lbCttSchSP.Caption := '.?..' // else if lbCttSchSP.Caption = '.?..' then // lbCttSchSP.Caption := '..?.' // else if lbCttSchSP.Caption = '..?.' then // lbCttSchSP.Caption := '...?' // else // lbCttSchSP.Caption := '?...'; // end; end; end; tsStop, tsCompleted, tsFail : begin // ... end; end; end else begin tProg.Enabled := false; imgEnc.Visible := false; SetImgBtn(imgMain, 8); if gMgSvc.IsStopCampn then begin lbTitle.Caption := RS_FileEncStop; lbCnt.Caption := RS_Enc + Format(' : %s / %s', [InsertPointComma(gMgSvc.CampnEnc, 3), InsertPointComma(gMgSvc.CampnEnc + gMgSvc.CampnEncFail, 3)]); end else begin Caption := '100% - ' + RS_FileEnc; lbCnt.Caption := Format('100%% %s : %s / %s', [RS_Enc, InsertPointComma(gMgSvc.CampnEnc, 3), InsertPointComma(gMgSvc.CampnEnc + gMgSvc.CampnEncFail, 3)]); lbTitle.Caption := RS_FileEncComp; end; lbBtn.Caption := RS_Ok; end; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. tProgTimer()'); end; Application.ProcessMessages; end; procedure TDlgSchPiNoti.process_WM_SYSCOMMAND(var msg: TWMSysCommand); begin if msg.CmdType = SC_CLOSE then begin imgBtnExitClick(nil); // Hide; // WindowState := wsMinimized; exit; end; Inherited; end; end.