unit DNoticeImg; 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; type TDlgNoticeImg = class(TForm) imgMain: TImage; imgList: TPngImageCollection; imgBtnOk: TImage; imgBtnExit: TImage; lbTop: TLabel; lbBottom: TLabel; lbMsg: TLabel; lbBtn: TLabel; tClose: TTimer; 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 tCloseTimer(Sender: TObject); private { Private declarations } procedure SetImgBtn(aImg: TImage; nImgIdx: Integer); public { Public declarations } Constructor Create(aOwner: TComponent; sJsonData: String); procedure CreateParams(var Params: TCreateParams); override; end; var DlgNoticeImg: TDlgNoticeImg; implementation uses Tocsg.Safe, Tocsg.Strings, GlobalDefine, Condition; resourcestring RS_BlockCappApp = '캡쳐 APP이 차단되었습니다.'; RS_StartPI = '개인정보 검사가 시작되었습니다.'; RS_HEC_Info = '정보보호'; RS_HEC_CenterPhone = '보안지원센터'; RS_DetectCappApp = '캡쳐 APP이 감지 되었습니다.'; {$R *.dfm} Constructor TDlgNoticeImg.Create(aOwner: TComponent; sJsonData: String); var hTarkBar: HWND; r: TRect; O: ISuperObject; begin Inherited Create(aOwner); SetImgBtn(imgBtnExit, 7); 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; case CUSTOMER_TYPE of CUSTOMER_GEC : begin lbTop.Caption := RS_HEC_Info; lbBottom.Caption := ''; tClose.Interval := 5000; tClose.Enabled := true; end; CUSTOMER_HDENG : begin lbTop.Caption := RS_HEC_Info; lbBottom.Caption := RS_HEC_CenterPhone + ' 02-2134-1145'; end; else begin lbTop.Caption := 'BSOne'; lbBottom.Caption := ''; end; end; try O := SO(sJsonData); if O <> nil then begin case O.I['T'] of TYPE_MSG_CTTSCH_START : begin lbMsg.Caption := RS_StartPI; SetImgBtn(imgBtnOk, 1); end; TYPE_MSG_PREVENT_CAPAPP : begin if Pos('|PV', O.S['D']) > 0 then lbMsg.Caption := RS_BlockCappApp else lbMsg.Caption := RS_DetectCappApp; SetImgBtn(imgMain, 0); SetImgBtn(imgBtnOk, 4); imgBtnOk.Tag := 1; end; end; end; except end; end; procedure TDlgNoticeImg.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 TDlgNoticeImg.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; procedure TDlgNoticeImg.imgBtnExitClick(Sender: TObject); begin Close; end; procedure TDlgNoticeImg.imgBtnExitMouseEnter(Sender: TObject); begin SetImgBtn(imgBtnExit, 8); end; procedure TDlgNoticeImg.imgBtnExitMouseLeave(Sender: TObject); begin SetImgBtn(imgBtnExit, 7); end; procedure TDlgNoticeImg.imgBtnOkMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if imgBtnOk.Tag = 0 then SetImgBtn(imgBtnOk, 3) else SetImgBtn(imgBtnOk, 6); end; procedure TDlgNoticeImg.imgBtnOkMouseEnter(Sender: TObject); begin if imgBtnOk.Tag = 0 then SetImgBtn(imgBtnOk, 2) else SetImgBtn(imgBtnOk, 5); end; procedure TDlgNoticeImg.imgBtnOkMouseLeave(Sender: TObject); begin if imgBtnOk.Tag = 0 then SetImgBtn(imgBtnOk, 1) else SetImgBtn(imgBtnOk, 4); end; procedure TDlgNoticeImg.imgMainMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); end; procedure TDlgNoticeImg.SetImgBtn(aImg: TImage; nImgIdx: Integer); begin aImg.Picture.Assign(imgList.Items[nImgIdx].PngImage); aImg.Repaint; end; procedure TDlgNoticeImg.tCloseTimer(Sender: TObject); begin tClose.Enabled := false; Close; end; end.