unit DImgView; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, hyieutils, iexBitmaps, hyiedefs, iesettings, iexLayers, iexRulers, ieview, imageenview, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.Menus, Vcl.Buttons, imageen; type TDlgImgView = class(TForm) pnClient: TPanel; pnBottom: TPanel; OpenDialog: TOpenDialog; popFun: TPopupMenu; miSetFit: TMenuItem; miSetOrgSize: TMenuItem; pnTop: TPanel; Label1: TLabel; edPath: TEdit; SpeedButton1: TSpeedButton; chOpenDir: TCheckBox; SpeedButton2: TSpeedButton; btnWaterSave: TSpeedButton; lbPName: TLabel; imgEn: TImageEn; procedure imgEnMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); procedure miSetFitClick(Sender: TObject); procedure miSetOrgSizeClick(Sender: TObject); procedure btnWaterSaveClick(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } ms_: TMemoryStream; dwPid_: DWORD; hRcvWnd_: HWND; sPath_: String; procedure SetImageFit(bVal: Boolean); public { Public declarations } Constructor Create(aOwner: TComponent; ms: TMemoryStream; sPath: String; dwPid: DWORD; hRcvHwnd: HWND); Destructor Destroy; override; function LoadFromFile(sPath: String): Boolean; function LoadFromStream(aStream: TStream): Boolean; procedure process_WM_SYSCOMMAND(var msg: TWMSysCommand); Message WM_SYSCOMMAND; end; var DlgImgView: TDlgImgView; implementation uses // BoxedAppSDK_Static, Tocsg.Process, Tocsg.Safe, Tocsg.Watermark, Tocsg.Network, Tocsg.Shell, Tocsg.Trace, imageenio; {$R *.dfm} Constructor TDlgImgView.Create(aOwner: TComponent; ms: TMemoryStream; sPath: String; dwPid: DWORD; hRcvHwnd: HWND); var PList: TProcessEntList; pInfo: PProcessEntInfo; sDesc: String; begin Inherited Create(aOwner); ms_ := ms; dwPid_ := dwPid; hRcvWnd_ := hRcvHwnd; sPath_ := sPath; sDesc := ''; Guard(PList, TProcessEntList.Create(true)); pInfo := PList.GetProcInfoByPid(dwPid); if pInfo <> nil then begin if pInfo.sDescription <> '' then lbPName.Caption := Format('%s (%s)', [pInfo.sModuleBaseName, pInfo.sDescription]) else lbPName.Caption := pInfo.sModuleBaseName; end else lbPName.Caption := GetProcessNameByPid(dwPid); edPath.Text := StringReplace(sPath, 'V@', '', [rfReplaceAll]); // BoxedAppSDK_SetContext('21f2f010-06e4-465f-af8f-cde6a3752c39'); // BoxedAppSDK_Init; // if BoxedAppSDK_IsAttachedProcessId(GetCurrentProcessId) then // begin // ShowMessage('BoxedAppSDK_IsAttachedProcessId() .. Yes'); // BoxedAppSDK_EnableOption(DEF_BOXEDAPPSDK_OPTION__ALL_CHANGES_ARE_VIRTUAL, FALSE); // BoxedAppSDK_EnableOption(DEF_BOXEDAPPSDK_OPTION__ENABLE_VIRTUAL_FILE_SYSTEM, FALSE); // BoxedAppSDK_EnableOption(DEF_BOXEDAPPSDK_OPTION__RECREATE_VIRTUAL_FILE_AS_VIRTUAL, FALSE); // BoxedAppSDK_DetachFromProcess(GetCurrentProcess); // BoxedAppSDK_DeleteFileFromVirtualFileSystem(PChar(sPath)); // end; end; Destructor TDlgImgView.Destroy; begin if ms_ <> nil then FreeAndNil(ms_); Inherited; end; procedure TDlgImgView.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := TCloseAction.caFree; end; procedure TDlgImgView.SetImageFit(bVal: Boolean); begin begin imgEn.AutoFit := bVal; if bVal then imgEn.Fit else imgEn.Zoom := 100; imgEn.Update; miSetFit.Checked := bVal; miSetOrgSize.Checked := not bVal; end; end; procedure TDlgImgView.SpeedButton2Click(Sender: TObject); begin //exit; if OpenDialog.Execute(Handle) then begin end; end; procedure TDlgImgView.btnWaterSaveClick(Sender: TObject); var sWaterTxt: String; Font: TFont; ms: TMemoryStream; begin Guard(Font, TFont.Create); Font.Size := 20; Font.Name := 'Arial'; Font.Style := Font.Style + [fsBold]; sWaterTxt := DateTimeToStr(Now); // + ' / ' + GetCurrentHostName + ' / ' + GetHostIP; // WriteLnFileEndUTF8('C:\Users\tocsg\Documents\¹ÝµðÄ«¸Þ¶ó\wwwwwwwwwwwwwww.txt', 'test'); // Hide; AddWatermarkTextLayer(imgEn, Font, sWaterTxt, 25, false); // ShowMessage(edPath.Text); // BoxedAppSDK_DeleteFileFromVirtualFileSystem(PChar(edPath.Text)); // if FileExists(edPath.Text) then // DeleteFile(edPath.Text); imgEn.IO.SaveToFile(edPath.Text); // Guard(ms, TMemoryStream.Create); // imgEn.IO.SaveToStream(ms, IEFilenameToInternalFileType(edPath.Text)); // ms.SaveToFile(edPath.Text); // ms.SaveToFile('C:\Users\tocsg\Documents\¹ÝµðÄ«¸Þ¶ó\wwww.png'); if chOpenDir.Checked then ExplorerSelectedPath(edPath.Text); Close; end; procedure TDlgImgView.imgEnMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); begin if imgEn.AutoFit then begin imgEn.AutoFit := false; miSetFit.Checked := false; end else if miSetOrgSize.Checked then miSetOrgSize.Checked := false; end; function TDlgImgView.LoadFromStream(aStream: TStream): Boolean; begin Result := false; try aStream.Position := 0; Result := imgEn.IO.LoadFromStream(aStream); except // .. end; end; procedure TDlgImgView.miSetFitClick(Sender: TObject); begin SetImageFit(true); end; procedure TDlgImgView.miSetOrgSizeClick(Sender: TObject); begin SetImageFit(false); end; function TDlgImgView.LoadFromFile(sPath: String): Boolean; begin Result := false; try Result := imgEn.IO.LoadFromFile(sPath); except // .. end; end; procedure TDlgImgView.process_WM_SYSCOMMAND(var msg: TWMSysCommand); begin if msg.CmdType = SC_CLOSE then begin if MessageBox(Handle, PChar('Á¾·áÇÒ °æ¿ì ĸÃÄµÈ À̹ÌÁö°¡ »ç¶óÁý´Ï´Ù.'+#13+#10+'°è¼ÓÇϽðڽÀ´Ï±î?'), PChar(Caption), MB_ICONQUESTION or MB_YESNO) = IDNO then exit; end; Inherited; end; end.