2010-05-23 7 views
0

다음 프로그램은 error : e2035 not enough actual parameters을 두 위치 (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) 
    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. 
+0

어이, 라인 (39)은 "myPassword = '암호';" 45는 빈 줄입니다. 문제가되는 행에 대해 의견을 제시해 주실 수 있습니까? –

+1

@Frank Shearar : 정확히 5 개의 매개 변수 (3 또는 1이 아님)가 필요한 Navigate 호출입니다. –

답변

5

variants.pas에서 임의의 더미 변수 또는 "EmptyParam"변수를 사용할 수 있습니다.

MyBrowser.Navigate(loginURL,0,EmptyParam,EmptyParam,EmptyParam); 
+0

Gmail에 여전히 로그인 할 수 없으므로 login url을 대체 : loginURL : = 'javascript : var Email = document.getElementById (' 'Username' '); Email.value =' ''+ myUserName + '' '; var Password = document. Password.value = '' '+ myPassword +' "; var SignIn = document.getElementById (''signIn ''); SignIn.click(); '; 제발 도와주세요 –

+0

@omair - 이전 "loginURL"(AFAICS)이 맞았지만 스크립트를 실행하려면 브라우저가 "https://www.google.com/accounts"로드를 완료 할 때까지 기다려야합니다. TWebBrowser를 사용하지 않는 이유는 "OnDocumentComplete"이벤트입니다. 또한 "navOpenInNewWindow"로 두 번 탐색 할 수 있을지 확신하지 못합니다. msdn 페이지의 맨 아래를 참조하십시오 ('IWebBrowser2 :: Navigate Method'http://msdn.microsoft.com/en-us/library /aa752133%28VS.85%29.aspx) –

2

이동의 서명은

procedure Navigate(const URL: WideString; const Flags: OleVariant; 
        const TargetFrameName: OleVariant; var PostData: OleVariant; 
        const Headers: OleVariant); safecall; 

그래서 당신이 더 많은 매개 변수를 필요로 할 것입니다. 공식 MSDN 설명서는 MSDN을 참조하십시오.

당신은

var 
    PostData: OleVariant; 

PostData := 0; 
MyBrowser.Navigate('http://www.gmail.com',flags,'_blank', PostData, 0); 
+0

Gmail에 여전히 로그인 할 수 없으므로 로그인 URL이 대체됩니다. loginURL : = 'javascript : var Email = document.getElementById (' 'Username' '); Email.value =' ''+ Password.value = '' '+ myPassword +' "; var SignIn = document.getElementById (''signIn ''); SignIn. 딸깍 하는 소리();'; 도와주세요 –

+0

@omair iqbal : 아마도 WebBrowser는 단순히 자바 스크립트 "URL"을 허용하지 않을 것입니다. 결국 javascript : "URL"은 현재로드 된 문서에 대한 참조를 만들지 만, Navigate 프로 시저가 concerend 인 경우 활성 문서가 없습니다. –

2

사용하십시오 TWebBrowser를 작성하거나 (델파이 소스)처럼 EmptyParam를 전달할 수 있습니다 SHDocVw.pas :

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; 
관련 문제