웹에서의 버튼 조작을 델파이로 갖어와서 델파이에서 처리를 하는데 TWebBrowser 의
StatusTextchange 이벤트를 이용하는 것과
웹에 있는 Javascript function 을 실행하는 것입니다.
홈페이지에는 아래와 같은 스크립트가 들어 있습니다.
<head>
<script language="javascript">
function closewin(num){
window.status='close';
window.status='';
window.close();
}
</script>
</head>
.......
<from>
<input id="idtext" name="idtext" type="text" />
<input 0="" id="idimage" name="idimahe" onclick="closewin()" src="images/images.jpg" style="cursor: hand;" type="image" />
<input id="idsubmit" name="idsubmit" type="submit" />
</from>
폼에 WebBrowser 와 Editor, button 3개를 올려 놓고
procedure TForm4.Button1Click(Sender: TObject);
var iDoc: IHTMLDocument2;
iWin: iHTMLwindow2;
ifunc: string;
begin
WebBrowser1.Document.QueryInterface(IHTMLDocument2, iDoc);
WebBrowser1.Document.QueryInterface(IHTMLWindow2, iWin);
ifunc:= 'closewin()';
try
iwin.execScript(ifunc, 'JavaScript');
finally
end;
end;
procedure TForm4.Button2Click(Sender: TObject);
begin
WebBrowser1.Navigate(http://localhost/test.html');
end;
procedure TForm4.Button3Click(Sender: TObject);
var Obj,Doc : OleVariant;
begin
Obj:= 0;
// 필요하면 IDispatch(TTTestCode.Create); 방법으로 Dispatch인터페이스로 형변환한다...
// HTML Script는 Dispatch인터페이스만 지원한다.
// Script 인터페이스를 얻고...
Doc:=IHTMLDocument2(WebBrowser1.Document).Script;
// Script의 SetObject함수를 호출한다...(이함수는 HTML의 JavaScript함수이다)
Doc.closewin(obj);
end;
procedure TForm4.WebBrowser1StatusTextChange(ASender: TObject; const Text: WideString);
var iStr: string;
begin
iStr:= Text;
if istr= 'close' then begin
close;
end;
end;
웹에서 이미지를 크릭하면 프로그램이 종료합니다.
프로그램에서 버튼3를 크릭하면 웹에 있는 스크립트를 실행하고, 즉 이미지를 크릭한 것과 같은 현상, 그 결과로서 프로그램을 종료 합니다.
다른 스크립트를 실행 시킬 수 있고, 다른 동작을 할수 있겠지요.
예를 들어 특정 버튼의 결과에 특정 디비에서 자료를 읽어와 Html을 만들고 그웹을 뿌려줄 수 있겠지요.