Delphi 没有足够的实际参数?
以下程序返回错误:e2035第39行和第45行两处的实际参数不足,未编译。有人能帮我吗? 我可以在这里用0或null代替参数吗Delphi 没有足够的实际参数?,delphi,automation,iwebbrowser2,Delphi,Automation,Iwebbrowser2,以下程序返回错误:e2035第39行和第45行两处的实际参数不足,未编译。有人能帮我吗? 我可以在这里用0或null代替参数吗 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,ComObj,shdocvw,activex, StdCtrls; type TForm1 = class(TForm) Bu
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ComObj,shdocvw,activex, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
mybrowser : iwebbrowser2;
myUserName,
myPassword,loginURL : string;
Flags: OleVariant;
begin
Flags := navOpenInNewWindow;
MyBrowser := CreateOleObject('InternetExplorer.Application') as IWebBrowser2;
MyBrowser.Navigate('http://www.gmail.com',flags,'_blank');
myUserName := 'UserName';
myPassword := 'password';
loginURL:='javascript:var Email = document.getElementById(''Email'');Email.value=''' + myUserName + ''';var Password = document.getElementById(''Passwd'');Password.value=''' + myPassword + ''';var SignIn = document.getElementById(''signIn'');SignIn.click();';
MyBrowser.Navigate(loginURL);
end;
end.
您可以在variants.pas上使用任何虚拟变量或EmptyParam变量
MyBrowser.Navigate(loginURL,0,EmptyParam,EmptyParam,EmptyParam);
导航的签名是
procedure Navigate(const URL: WideString; const Flags: OleVariant;
const TargetFrameName: OleVariant; var PostData: OleVariant;
const Headers: OleVariant); safecall;
所以你需要更多的参数。有关MSDN的官方文档,请参阅
你可以写
var
PostData: OleVariant;
PostData := 0;
MyBrowser.Navigate('http://www.gmail.com',flags,'_blank', PostData, 0);
使用TWebBrowser或pass EmptyParam,如Delphi源SHDocVw.pas中的:
呃,第39行是我的密码:=‘密码’;45是一个空行。请您在有问题的行旁发表评论好吗?@Frank Shearr:这是导航调用,需要5个参数,而不是3个或1个参数。仍然无法登录gmail,将登录url替换为:loginURL:='javascript:var Email=document.getElementByIdUsername;Email.value='+myUserName+';var Password=document.getElementByIdPassword;Password.value='+myPassword+';var SignIn=document.getElementByIdsignIn;登录。单击;';请help@omairiqbal:也许WebBrowser只是不接受javascript:URL。毕竟,您的javascript:URL引用了当前加载的文档,但是,就导航过程而言,可能没有活动文档。仍然无法登录到gmail,而将登录URL替换为:loginURL:='javascript:var Email=document.getElementByIdUsername;Email.value='+myUserName+';var Password=document.getElementByIdPassword;Password.value='+myPassword+';var SignIn=document.getElementByIdsignIn;登录。单击;';请help@omair-您以前的loginURL在AFAICS中是正确的,但您必须等待浏览器完成加载,然后才能运行脚本。为什么不使用TWebBrowser,它有一个OnDocumentComplete事件。另外,我不确定您是否能够使用navOpenInNewWindow导航两次,请参阅msdn“IWebBrowser2::navigate Method”页面底部
procedure TWebBrowser.Navigate(const URL: WideString);
begin
DefaultInterface.Navigate(URL, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;
procedure TWebBrowser.Navigate(const URL: WideString; const Flags: OleVariant);
begin
DefaultInterface.Navigate(URL, Flags, EmptyParam, EmptyParam, EmptyParam);
end;
procedure TWebBrowser.Navigate(const URL: WideString; const Flags: OleVariant;
const TargetFrameName: OleVariant);
begin
DefaultInterface.Navigate(URL, Flags, TargetFrameName, EmptyParam, EmptyParam);
end;
procedure TWebBrowser.Navigate(const URL: WideString; const Flags: OleVariant;
const TargetFrameName: OleVariant; var PostData: OleVariant);
begin
DefaultInterface.Navigate(URL, Flags, TargetFrameName, PostData, EmptyParam);
end;
procedure TWebBrowser.Navigate(const URL: WideString; const Flags: OleVariant;
const TargetFrameName: OleVariant; var PostData: OleVariant;
const Headers: OleVariant);
begin
DefaultInterface.Navigate(URL, Flags, TargetFrameName, PostData, Headers);
end;