unit DImgMskMain; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Tocsg.Controls, hyieutils, iexBitmaps, hyiedefs, iesettings, iexLayers, iexRulers, ieview, imageenview, imageen; const EXE_OCR = 'BSWmcr.exe'; type TDlgImgMskMain = class(TForm) pnTop: TPanel; pnClient: TPanel; btnLoadImg: TButton; edImgPath: TEdit; ImageEn: TImageEn; chImgFit: TCheckBox; Label1: TLabel; edMaskTxt: TEdit; btnMasking: TButton; procedure btnLoadImgClick(Sender: TObject); procedure chImgFitClick(Sender: TObject); procedure btnMaskingClick(Sender: TObject); private { Private declarations } MgCtrls_: TManagerInputControlsData; public { Public declarations } Constructor Create(aOwner: TComponent); override; Destructor Destroy; override; end; var DlgImgMskMain: TDlgImgMskMain; implementation uses Tocsg.Path, Tocsg.Process, ManagerImgMskData, Tocsg.Safe, Tocsg.Strings; {$R *.dfm} Constructor TDlgImgMskMain.Create(aOwner: TComponent); begin Inherited Create(aOwner); MgCtrls_ := TManagerInputControlsData.Create(CutFileExt(GetRunExePath) + '.ctr'); MgCtrls_.RegInputCtrl(edImgPath); MgCtrls_.RegInputCtrl(chImgFit); MgCtrls_.RegInputCtrl(edMaskTxt); MgCtrls_.Load; end; Destructor TDlgImgMskMain.Destroy; begin FreeAndNil(MgCtrls_); Inherited; end; procedure TDlgImgMskMain.btnMaskingClick(Sender: TObject); procedure DoMasking(pEnt: PMskEnt); var R: TRect; i: Integer; sText: String; x, y: Integer; begin R.Left := pEnt.x; R.Top := pEnt.y; R.Width := pEnt.w; R.Height := pEnt.h; ImageEn.IO.Bitmap.Canvas.Pen.Color := clWhite; ImageEn.IO.Bitmap.Canvas.Pen.Style := psSolid; ImageEn.IO.Bitmap.Canvas.Brush.Color := clWhite; ImageEn.IO.Bitmap.Canvas.Brush.Style := bsSolid;// bsBDiagonal; ImageEn.IO.Bitmap.Canvas.FillRect(R); // ImageEn.IO.Bitmap.Canvas.Pen.Color := clBlack; // »ç¼± »ö // ImageEn.IO.Bitmap.Canvas.Pen.Width := 1; // ¼±ÀÇ µÎ²² // // // ¼öÆò¼± ±ß±â // y := R.Top; // while y <= R.Bottom do // begin // ImageEn.IO.Bitmap.Canvas.MoveTo(R.Left, y); // ImageEn.IO.Bitmap.Canvas.LineTo(R.Right, y); // Inc(y, 5); // end; // // // ¼öÁ÷¼± ±ß±â // x := R.Left; // while x <= R.Right do // begin // ImageEn.IO.Bitmap.Canvas.MoveTo(x, R.Top); // ImageEn.IO.Bitmap.Canvas.LineTo(x, R.Bottom); // Inc(x, 5); // end; // // »ç¼± ±ß±â // ImageEn.IO.Bitmap.Canvas.Pen.Color := clBlack; // »ç¼± »ö // ImageEn.IO.Bitmap.Canvas.Pen.Width := 1; // ¼±ÀÇ µÎ²² // // x := R.Left; // while x <= R.Right do // begin // ImageEn.IO.Bitmap.Canvas.MoveTo(x, R.Top); // y := R.Top + (x - R.Left); // if y <= R.Bottom then // ImageEn.IO.Bitmap.Canvas.LineTo(R.Left, y) // else // ImageEn.IO.Bitmap.Canvas.LineTo(x - (R.Bottom - R.Top), R.Bottom); // Inc(x, 5); // end; sText := 'ToCSG. BSOne jjang.'; for i := 1 to 99 do begin ImageEn.IO.Bitmap.Canvas.Font.Size := i; if (ImageEn.IO.Bitmap.Canvas.TextHeight(sText) - 1) >= (R.Height - 2) then begin break; end; end; ImageEn.IO.Bitmap.Canvas.TextRect(R, sText, [tfCenter, tfEndEllipsis, tfVerticalCenter]); ImageEn.IO.Bitmap.Canvas.Pen.Color := clBlack; ImageEn.IO.Bitmap.Canvas.Pen.Style := psDot; ImageEn.IO.Bitmap.Canvas.MoveTo(R.Left, R.Top); ImageEn.IO.Bitmap.Canvas.LineTo(R.Left + R.Width, R.Top); ImageEn.IO.Bitmap.Canvas.LineTo(R.Left + R.Width, R.Top + R.Height); ImageEn.IO.Bitmap.Canvas.LineTo(R.Left, R.Top + R.Height); ImageEn.IO.Bitmap.Canvas.LineTo(R.Left, R.Top); end; var sOcrPath, sTmpPath: String; MgMsk: TManagerImgMskData; i, n: Integer; begin edImgPath.Text := Trim(edImgPath.Text); if edImgPath.Text = '' then begin MessageBox(Handle, PChar('À̹ÌÁö °æ·Î¸¦ ÀÔ·ÂÇØ ÁֽʽÿÀ.'), PChar(Caption), MB_ICONWARNING or MB_OK); edImgPath.SetFocus; exit; end; if not FileExists(edImgPath.Text) then begin MessageBox(Handle, PChar('Á¸ÀçÇÏÁö ¾Ê´Â ÆÄÀÏÀÔ´Ï´Ù.'), PChar(Caption), MB_ICONWARNING or MB_OK); edImgPath.SetFocus; exit; end; edMaskTxt.Text := Trim(edMaskTxt.Text); if edMaskTxt.Text = '' then begin MessageBox(Handle, PChar('¸¶½ºÅ· ÅØ½ºÆ®¸¦ ÀÔ·ÂÇØÁֽʽÿÀ.'), PChar(Caption), MB_ICONWARNING or MB_OK); edMaskTxt.SetFocus; exit; end; try ImageEn.IO.LoadFromFile(edImgPath.Text); ImageEn.AutoFit := chImgFit.Checked; except MessageBox(Handle, PChar('Áö¿øÇÏÁö ¾Ê´Â À̹ÌÁö ÀÔ´Ï´Ù.'), PChar(Caption), MB_ICONSTOP or MB_OK); exit; end; sOcrPath := GetRunExePathDir + EXE_OCR; if not FileExists(sOcrPath) then begin MessageBox(Handle, PChar('OCR ¸ðµâÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù.'), PChar(Caption), MB_ICONSTOP or MB_OK); exit; end; sTmpPath := GetRunExePathDir + 'Temp\'; if not ForceDirectories(sTmpPath) then begin MessageBox(Handle, PChar('ÀÛ¾÷ °æ·Î¸¦ »ý¼ºÇÏ´Â Áß ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù.'), PChar(Caption), MB_ICONSTOP or MB_OK); exit; end; sTmpPath := sTmpPath + '$TmpOcr.dat'; ExecuteAppWaitUntilTerminate(sOcrPath, Format('-r "%s" "%s"', [edImgPath.Text, sTmpPath]), SW_HIDE, 10000); if FileExists(sTmpPath) then begin Guard(MgMsk, TManagerImgMskData.Create(sTmpPath)); DeleteFile(sTmpPath); var StrList: TStringList; Guard(StrList, TStringList.Create); SplitString(edMaskTxt.Text, '|', StrList, false, true); var MskLst: TMskEntList; Guard(MskLst, TMskEntList.Create); for i := 0 to StrList.Count - 1 do begin if MgMsk.MatchToList(StrList[i], MskLst) > 0 then begin for n := 0 to MskLst.Count - 1 do DoMasking(MskLst[n]); end; end; ImageEn.Update; end; MgCtrls_.Save; end; procedure TDlgImgMskMain.chImgFitClick(Sender: TObject); begin ImageEn.AutoFit := chImgFit.Checked; ImageEn.Update; MgCtrls_.Save; end; procedure TDlgImgMskMain.btnLoadImgClick(Sender: TObject); begin edImgPath.Text := Trim(edImgPath.Text); if edImgPath.Text = '' then begin MessageBox(Handle, PChar('À̹ÌÁö °æ·Î¸¦ ÀÔ·ÂÇØ ÁֽʽÿÀ.'), PChar(Caption), MB_ICONWARNING or MB_OK); edImgPath.SetFocus; exit; end; if not FileExists(edImgPath.Text) then begin MessageBox(Handle, PChar('Á¸ÀçÇÏÁö ¾Ê´Â ÆÄÀÏÀÔ´Ï´Ù.'), PChar(Caption), MB_ICONWARNING or MB_OK); edImgPath.SetFocus; exit; end; try ImageEn.IO.LoadFromFile(edImgPath.Text); ImageEn.AutoFit := chImgFit.Checked; except MessageBox(Handle, PChar('Áö¿øÇÏÁö ¾Ê´Â À̹ÌÁö ÀÔ´Ï´Ù.'), PChar(Caption), MB_ICONSTOP or MB_OK); exit; end; MgCtrls_.Save; end; end.