1

I'm having difficulty pressing a button using delphi and javascript. My question is not like other's because in other's the questions are about how to press a image and they are the same title of this post. And the other is about chromium. My question is how in my webbrowser made in delphi i can press a button the code is the follow:

{$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
{$WARNINGS ON}

unit FmDemo;

interface

uses
  SHDocVw, Controls, StdCtrls, Classes, OleCtrls, Forms;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    ComboBox1: TComboBox;
    procedure FormShow(Sender: TObject);
    procedure WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    procedure ComboBox1Change(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

uses
  SysUtils, Dialogs, MSHTML;

{$R *.dfm}

procedure TForm1.ComboBox1Change(Sender: TObject);
  { Make browser use selected font }
var
  Doc: IHTMLDocument2;      // current HTML document
  HTMLWindow: IHTMLWindow2; // parent window of current HTML document
  JSFn: string;             // stores JavaScipt function call
begin
  // Get reference to current document
  Doc := WebBrowser1.Document as IHTMLDocument2;
  if not Assigned(Doc) then
    Exit;
  // Get parent window of current document
  HTMLWindow := Doc.parentWindow;
  if not Assigned(HTMLWindow) then
    Exit;
  // Run JavaScript
  try
    JSFn := 'myFunction(''' + ComboBox1.Text + ''')';
    HTMLWindow.execScript(JSFn, 'JavaScript');
  except
    // handle exception in case JavaScript fails to run
    ShowMessage('Error running JavaScript');
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
  { Setup combo box and load document }
begin
  // Store screen fonts in combo box and disabled it
  ComboBox1.Items.Assign(Screen.Fonts);
  ComboBox1.Enabled := False;
  // Load the HTML page
  WebBrowser1.Navigate('C:\Users\Androide\Desktop\article-21-demo\CaseStudy\Test.html');
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
  { Document loaded: enable combo box }
begin
  ComboBox1.Enabled := True;
end;

end.

My html:

<!DOCTYPE html>
<html>
<body>

<p>Click the button to trigger a function that will output "Hello World" in a p element with id="demo".</p>

<button onclick="myFunction()">Click me</button>

<p id="demo"></p>

<script>
function myFunction() {
    document.getElementById("demo").innerHTML = "Hello World";
}
</script>

</body>
</html>

When i load the page never press the button. And my goal is when i load the page since my browser press this button, example(when i load the page never press me the button=:

never press the button

So i must to press manually..and show me hello world to check is pressed: hello word message when i press button

Some way to do automatically not pressing manual.

Reference:

http://delphidabbler.com/articles?article=21

1 Answer 1

1

You posted a very similar q yesterday but deleted it before I could post this answer.

It does what you said you wanted in your deleted q, which iirc was to call the JavaScript to change an element's font from Delphi code. It shouldn't be hard to modify to do what you want in this one, which seems to differ only in the use of a combobox to select the new font name, and the use of an HTML-embedded button.

Code

procedure TForm1.Button1Click(Sender: TObject);
begin
  ExecScript(Memo2.Lines.Text);
end;

procedure TForm1.btnLoadFromMemoClick(Sender: TObject);
var
  V : OleVariant;
  Unk : IUnknown;
begin
  WebBrowser1.Navigate('about:blank');
  Doc2 := WebBrowser1.Document as IHTMLDocument2;
  Doc2.DesignMode := 'Off';
  V := VarArrayCreate([0, 0], varVariant);
  V[0] := Memo1.Lines.Text;
  try
    Doc2.Write(PSafeArray(TVarData(v).VArray));
  finally
    Doc2.Close;
  end;
end;

procedure TForm1.ExecScript(const Script: String);
var
  Doc: IHTMLDocument2;
  HTMLWindow: IHTMLWindow2;
begin
  Doc := WebBrowser1.Document as IHTMLDocument2;
  Assert(Doc <> Nil);

  HTMLWindow := Doc.parentWindow;
  Assert(HTMLWindow <> Nil);
  try
    HTMLWindow.execScript(Script, 'JavaScript');
  except
    // handle exception in case JavaScript fails to run
  end;
end;

Html (put in Memo1.Lines)

<html>
  <head>
  <script type="text/javascript">
  function SetFont(fontname) {
    document.body.style.fontFamily = fontname;
  }
  </script>
  </head>
  <body>
  Something
  <br>
  <div>some more text</div>
  </body>
</html>

JavaScript(put in Memo1.Lines)

SetFont("Courier New");

The following code shows how to click an HTML button whose id is 'mybutton' using Delphi code:

var
  Doc3: IHTMLDocument3;
  E : IHtmlElement;
begin
  Doc3 := WebBrowser1.Document as IHTMLDocument3;
  Assert(Doc3 <> Nil);
  E := Doc3.GetElementByID('mybutton');
  Assert(E <> Nil);
  E.click;
end;

but now I've told you how to call the font-changing JavaScript from Delphi code maybe you don't need to click the HTML button any more.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.