線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2591
推到 Plurk!
推到 Facebook!

关于WebBrowser中的newWindow2的问题

尚未結案
interfox2005
一般會員


發表:4
回覆:9
積分:2
註冊:2005-02-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-31 15:59:23 IP:219.144.xxx.xxx 未訂閱
各位先知,我在写一个程序,想自动完成一个局域网b/s结构软件的自动操作,但是登陆进入以后,有一个操作需要弹出一个页面,我在newWindow2中代码如下: fm:TForm; fm:=TForm1.Create(self); ppDisp := fm.WebBrowser1.DefaultInterface; fm.Show; fm.SetFocus; fm窗体能够准确捕捉到并且操作正常。 在弹出窗体错作完成后用系统信息:SendMessage(WM_Close)关闭窗体。 但是当我第二次点击需要弹出页面的的按钮时fm窗体不显示,在newwindow2设置断点程序没有调用这个事件, 后来我将fm定义成全局变量,在mainform的create事件中调用: fm:=TForm.create(self); newWindow2中使用 ppDisp := fm.WebBrowser1.DefaultInterface; fm.Show; fm.SetFocus; 在fm操作完成后使用fm.visible:=false;但是程序出错,我该怎么办?
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-01 10:32:16 IP:218.163.xxx.xxx 未訂閱
fm.visible:=false; 改成 fm.hide; 試試看.
interfox2005
一般會員


發表:4
回覆:9
積分:2
註冊:2005-02-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-01 11:07:02 IP:219.144.xxx.xxx 未訂閱
谢谢Mickey的回复。 我试过了,还是那个什么“访问地址错误”。 还有一个问题,我在错作过程中会遇到“登陆系统超时,请重新登陆”提示框,但是不用程序,使用IE时不会出现,能给我一些建议吗?
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-01 13:26:22 IP:218.163.xxx.xxx 未訂閱
大致試了一下, 無法複製出您的問題情況. 我用 Win2000 Server, D6 Update 2 RTL 3.
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw, Unit2;    type
  TForm1 = class(TForm)
    Button1: TButton;
    WebBrowser1: TWebBrowser;
    procedure Button1Click(Sender: TObject);
    procedure WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch;
      var Cancel: WordBool);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    Fm: TForm2;
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
begin
//  Fm.Hide;
  Fm.Visible := False;
end;    procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
begin
  ppDisp :=fm.WebBrowser1.DefaultInterface;
  fm.Show;
  fm.SetFocus;
end;    procedure TForm1.FormCreate(Sender: TObject);
begin
  webbrowser1.Navigate('C:\Documents and Settings\Administrator\桌面\dum.htm');
  fm := TForm2.Create(self);
end;    end.

dum.htm:
< html>
< SCRIPT LANGUAGE="JScript">
function foo() {
    open('http://www.aidc.com.tw/');}
< /SCRIPT>
< BODY >
Click this page and window.open() is called.
< /BODY>
< /html>    
interfox2005
一般會員


發表:4
回覆:9
積分:2
註冊:2005-02-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-04 16:19:34 IP:219.145.xxx.xxx 未訂閱
各位先知,为了把问题说的明白些,我把代码帖出来: 点击“浏览”按钮: WebBrowser1.Navigate('http://10.173.11.1:8080/jtwz/violate/approve.do'); flag:='false'; while (not (flag='ok')) do begin Application.ProcessMessages; end; Document := WebBrowser1.Document as IHTMLDocument2; FormElements := (Document.Forms.Item('myFrm', 0) as IHTMLElement).All as IHTMLElementCollection; for i := 0 to FormElements.Length - 1 do begin FormElem := FormElements.Item(i, 0); if not VarIsEmpty(FormElem) and FormElem.isTextEdit then begin if(FormElem.Value='提交') then FormElem.onclick(); end; end; 在newwindow2中处理如下: procedure TfmVoiceTel.WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch; var Cancel: WordBool); var fm:TForm2; begin fm:=TForm2.create(self); fm.WebBrowser1.RegisterAsBrowser:=true; ppDisp := fm.WebBrowser1.DefaultInterface; fm.Show; fm.SetFocus; end; 在Form2中如下: procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin WebBrowser1.OleObject.Document.tbform.xxx.value:='1'; WebBrowser1.OleObject.Document.tbform.yyy.value:='2'; WebBrowser1.OleObject.Document.tbform.submit(); Timer2.Enabled:=true; end; 由于提交后系统有“保存成功”的系统提示,所以向系统发送一个回车键,然后关掉窗口,如下: procedure TForm1.Timer2Timer(Sender: TObject); begin keybd_event(VK_RETURN, 0, 0 ,0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP ,0); SendMessage(handle,WM_Close,0,0); Timer2.Enabled:=false; end; 以上代码在系统第一次执行时是正确的,但是当第二次点击“浏览”时Form2不弹出,在newwindow2处设置断点但是拦截不住。 b/s结构的软件的源代码是在点击“提交”时先用window.open('','aaa','')打开一个窗口,然后定义原网页的 form.target='aaa'; form.submit(); 第二次处理方法: 定义fm:TForm2为公用变量,在 在主Form的create事件中创建Form2: fm:=TForm2.create(self); 然后在newwindow2事件中去掉相应部分。 在Form2的Timer2Timer事件中将SendMessage()改为self.hide; 还是不行,还有什么别的办法吗?
interfox2005
一般會員


發表:4
回覆:9
積分:2
註冊:2005-02-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-07 09:53:47 IP:222.90.xxx.xxx 未訂閱
问题解决了,谢谢Mickey学兄的帮助。
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-07 10:23:25 IP:218.163.xxx.xxx 未訂閱
引言: 问题解决了,谢谢Mickey学兄的帮助。
說實在的, 複製不出您的問題, 當然沒幫上忙< >, 恭喜你解決了問題, 不過能否告知解決辦法, 好讓大家能夠參考.< >
interfox2005
一般會員


發表:4
回覆:9
積分:2
註冊:2005-02-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-18 13:18:18 IP:202.100.xxx.xxx 未訂閱
其实也没什么,在发出WM_Close消息后, 系统没有释放Form2的资源,刚开始我调用Form2.Free,但是没有达到效果,后来把Form2.Free改成Self.Free就好了,说来惭愧。
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-04-26 13:50:58 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-12 16:22:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!