BSOne.SFC/Tocsg.Module/RegExTest/DReTestMain.pas

157 lines
3.7 KiB
Plaintext

unit DReTestMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Buttons,
Tocsg.Controls;
const
APP_NAME = 'RegExTest';
type
TDlgReTestMain = class(TForm)
pnTop: TPanel;
pnClient: TPanel;
mmInput: TMemo;
mmText: TMemo;
pnBottom: TPanel;
mmResult: TMemo;
btnFind: TSpeedButton;
btnOpenFile: TSpeedButton;
OpenDialog: TOpenDialog;
procedure btnFindClick(Sender: TObject);
procedure btnOpenFileClick(Sender: TObject);
private
{ Private declarations }
MgCtrl_: TManagerInputControlsData;
sKvDir_: String;
public
{ Public declarations }
Constructor Create(aOwner: TComponent); override;
Destructor Destroy; override;
end;
var
DlgReTestMain: TDlgReTestMain;
implementation
uses
Tocsg.Path, Tocsg.PCRE, Tocsg.KvFilter, Tocsg.Safe, Tocsg.KvFilter.types;
{$R *.dfm}
Constructor TDlgReTestMain.Create(aOwner: TComponent);
procedure InitCtrl;
var
sKvPath: String;
begin
sKvDir_ := 'C:\Program Files\Tocsg\eCrmHome\bin\';
if not FileExists(sKvDir_ + 'KeyViewFilter.dll') then
begin
sKvDir_ := GetRunExePathDir + 'bin\';
if not FileExists(sKvDir_ + 'KeyViewFilter.dll') then
sKvDir_ := '';
end;
if sKvDir_ = '' then
begin
btnFind.Height := 65;
btnOpenFile.Visible := false;
end;
end;
begin
Inherited Create(aOwner);
MgCtrl_ := TManagerInputControlsData.Create(CutFileExt(GetRunExePath) + '.ini');
MgCtrl_.RegInputCtrl(mmInput);
MgCtrl_.Load;
InitCtrl;
end;
Destructor TDlgReTestMain.Destroy;
begin
FreeAndNil(MgCtrl_);
Inherited;
end;
procedure TDlgReTestMain.btnOpenFileClick(Sender: TObject);
var
KvFilter: TKvFilter;
sTempPath: String;
StrList: TStringList;
begin
if (sKvDir_ = '') or not DirectoryExists(sKvDir_) then
begin
MessageBox(Handle, PChar('문서 필터 모듈이 존재하지 않습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK);
exit;
end;
OpenDialog.FileName := '';
if not OpenDialog.Execute(Handle) then
exit;
mmText.Clear;
Guard(KvFilter, TKvFilter.Create(sKvDir_, 360));
sTempPath := GetRunExePathDir + '$Temp.$kv';
if KvFilter.FilterFile(OpenDialog.FileName, sTempPath) = KVERR_Success then
begin
if not FileExists(sTempPath) then
begin
MessageBox(Handle, PChar('해당 파일에서 텍스트를 추출할 수 없었습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK);
exit;
end;
Guard(StrList, TStringList.Create);
try
StrList.LoadFromFile(sTempPath, TEncoding.UTF8);
except
StrList.LoadFromFile(sTempPath);
end;
DeleteFile(sTempPath);
mmText.Text := StrList.Text;
Caption := APP_NAME + Format(' - 파일 열기 : %s', [ExtractFileName(OpenDialog.FileName)]);
end else
MessageBox(Handle, PChar('해당 파일에서 텍스트를 추출할 수 없었습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK);
end;
procedure TDlgReTestMain.btnFindClick(Sender: TObject);
var
nHitCnt: Integer;
sResultStr: String;
begin
mmInput.Text := Trim(mmInput.Text);
mmText.Text := Trim(mmText.Text);
if mmInput.Text = '' then
begin
MessageBox(Handle, PChar('검색어/패턴을 입력해 주십시오.'), PChar(Caption), MB_ICONWARNING or MB_OK);
mmInput.SetFocus;
exit;
end;
if mmText.Text = '' then
begin
MessageBox(Handle, PChar('내용을 먼저 입력해 주십시오.'), PChar(Caption), MB_ICONWARNING or MB_OK);
mmText.SetFocus;
exit;
end;
mmResult.Clear;
MgCtrl_.Save;
nHitCnt := TTgPcre.GetMatchValues(mmText.Text, StringReplace(mmInput.Text, #13#10, '', [rfReplaceAll]), sResultStr);
if nHitCnt > 0 then
begin
mmResult.Text := GetCountOverlapWords(sResultStr);
end;
end;
end.