Thread View: borland.public.delphi.com.activex.using
5 messages
5 total messages
Started by Mark Moss
Wed, 23 Jul 2008 03:19
TWebBrowser
Author: Mark Moss
Date: Wed, 23 Jul 2008 03:19
Date: Wed, 23 Jul 2008 03:19
314 lines
10306 bytes
10306 bytes
Help
I have the following code which should work, but does not
If I run it straight from Internet Explorer it works fine, but if I
run it thru TWebBrowser I get the following error.
Line 17
Char 44
'GMap2' is undefined
Code 0
URL about:blank
Any help that you guys can give would be greatly appreciated.
Thanks
Test08.html
{------------------------------------------------------------------------------------------------------------}
<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google Maps JavaScript API Example</title>
<script
src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAACpomf__h59zOpwlPj8I1TxRvlRs7GQV6IzvBJzRL3vQC1yP8vhT5o5kvyXKxB8bl02zs_dkZYyndHg"
type="text/javascript">
</script>
<script type="text/javascript">
// Create a directions object and register a map and DIV to hold the
// resulting computed directions
var map;
var directionsPanel;
var directions;
function initialize() {
if ( GBrowserIsCompatible() ) {
map = new
GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(
38.932400, -104.785600 ), 14 );
directionsPanel =
document.getElementById("route");
directions = new
GDirections(map, directionsPanel);
directions.load("from
38.932400, -104.785600 to 38.930400, -104.786600" );
}
}
</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="width: 350px; height: 350px; float:left;
border: 1px solid black;"></div>
<div id="route" style="width: 350px; height: 350px; float:left;
border; 1px solid black;"></div>
<br/>
</body>
</html>';
Project File
Project1.dpr
{------------------------------------------------------------------------------------------------------------}
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Delphi Test Program
Unit1.pas
{------------------------------------------------------------------------------------------------------------}
unit KioskMapDirections;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, AdvGlowButton, ExtCtrls, Shader, SR4UProc,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP;
type
TfrmKioskMapDirections = class(TForm)
Shader1: TShader;
pnlMainMenu: TPanel;
agbMainMenu: TAdvGlowButton;
pnlSubMenu: TPanel;
agbSubMenu: TAdvGlowButton;
pnlDetailMenu: TPanel;
agbDetailMenu: TAdvGlowButton;
pnlDescription: TPanel;
agbDescription: TAdvGlowButton;
WebBrowser: TWebBrowser;
IdHTTP1: TIdHTTP;
procedure agbMainMenuClick(Sender: TObject);
procedure agbSubMenuClick(Sender: TObject);
procedure agbDetailMenuClick(Sender: TObject);
procedure agbDescriptionClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmKioskMapDirections: TfrmKioskMapDirections;
implementation
uses
MSHTML, ACTIVEX;
{$R *.dfm}
const
rootDoc: String =
'<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'#13#10 +
'<html xmlns="http://www.w3.org/1999/xhtml">'#13#10 +
' <head>'#13#10 +
' <meta http-equiv="content-type" content="text/html;
charset=utf-8"/>'#13#10 +
' <title>Google Maps JavaScript API Example</title>'#13#10 +
' <script'#13#10 +
'
src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAACpomf__h59zOpwlPj8I1TxRvlRs7GQV6IzvBJzRL3vQC1yP8vhT5o5kvyXKxB8bl02zs_dkZYyndHg"
type="text/javascript">'#13#10 +
' </script>'#13#10 +
' <script type="text/javascript">'#13#10 +
' // Create a directions object and register a map and DIV to hold
the'#13#10 +
' // resulting computed directions'#13#10 +
' var map;'#13#10 +
' var directionsPanel;'#13#10 +
' var directions;'#13#10 +
' function initialize() {'#13#10 +
' if ( GBrowserIsCompatible() ) {'#13#10 +
' map = new
GMap2(document.getElementById("map_canvas"));'#13#10 +
' map.setCenter(new
GLatLng( 38.932400, -104.785600 ), 14 );'#13#10 +
' directionsPanel =
document.getElementById("route");'#13#10 +
' directions = new
GDirections(map, directionsPanel);'#13#10 +
' directions.load("from
38.932400, -104.785600 to 38.930400, -104.786600" );'#13#10 +
' }'#13#10 +
' }'#13#10 +
' </script>'#13#10 +
' </head>'#13#10 +
' <body onload="initialize()">'#13#10 +
' <div id="map_canvas" style="width: 350px; height: 350px;
float:left; border: 1px solid black;"></div>'#13#10 +
' <div id="route" style="width: 350px; height: 350px;
float:left; border; 1px solid black;"></div>'#13#10 +
' <br/>'#13#10 +
' </body>'#13#10 +
'</html>';
{==============================================================================}
procedure TfrmKioskMapDirections.agbMainMenuClick(Sender: TObject);
begin
GlobalReturnCode := 90;
Close;
end;
{==============================================================================}
procedure TfrmKioskMapDirections.agbSubMenuClick(Sender: TObject);
begin
GlobalReturnCode := 80;
Close;
end;
{==============================================================================}
procedure TfrmKioskMapDirections.agbDetailMenuClick(Sender: TObject);
begin
GlobalReturnCode := 70;
Close;
end;
{==============================================================================}
procedure TfrmKioskMapDirections.agbDescriptionClick(Sender: TObject);
begin
GlobalReturnCode := 60;
Close;
end;
{==============================================================================}
procedure TfrmKioskMapDirections.FormShow(Sender: TObject);
var
v : Variant;
HTMLDocument : IHTMLDocument2;
begin
Webbrowser.Navigate('about:blank');
while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
Application.ProcessMessages;
HTMLDocument := WebBrowser.Document as IHTMLDocument2;
if (assigned(HtmlDocument)) then
begin
v := VarArrayCreate([0, 0], varVariant);
v[0] := rootDoc; // Here's your HTML string
HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
HTMLDocument.Close;
end;
end;
{==============================================================================}
end.
Delphi Test Form
Unit1.dfm
{------------------------------------------------------------------------------------------------------------}
object Form1: TForm1
Left = 233
Top = 107
Width = 870
Height = 600
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object WebBrowser: TWebBrowser
Left = 0
Top = 0
Width = 862
Height = 573
Align = alClient
TabOrder = 0
ControlData = {
4C00000017590000393B00000000000000000000000000000000000000000000
000000004C000000000000000000000001000000E0D057007335CF11AE690800
2B2E126208000000000000004C0000000114020000000000C000000000000046
8000000000000000000000000000000000000000000000000000000000000000
00000000000000000100000000000000000000000000000000000000}
end
object IdHTTP1: TIdHTTP
AllowCookies = True
ProxyParams.BasicAuthentication = False
ProxyParams.ProxyPort = 0
Request.ContentLength = -1
Request.Accept = 'text/html, */*'
Request.BasicAuthentication = False
Request.UserAgent = 'Mozilla/3.0 (compatible; Indy Library)'
HTTPOptions = [hoForceEncodeParams]
Left = 48
Top = 28
end
end
Re: TWebBrowser
Author: Marc Rohloff [TeamB]
Date: Wed, 23 Jul 2008 13:54
Date: Wed, 23 Jul 2008 13:54
18 lines
1857 bytes
1857 bytes
On Tue, 22 Jul 2008 21:19:46 -0600, Mark Moss wrote: > I have the following code which should work, but does not > > If I run it straight from Internet Explorer it works fine, but if I > run it thru TWebBrowser I get the following error. And if you load the test08.html file into TWebBrowser? When you load an html file from a local file the Google Maps API does not check if the key is valid. My guess is that the way you are loading the file it doesn't appear to loaded from a local file and hence the check of the key is invalid (The key is usually tied to a domain). -- Marc Rohloff [TeamB] marc -at- marc rohloff -dot- com
Re: TWebBrowser
Author: Mark Moss
Date: Wed, 23 Jul 2008 18:34
Date: Wed, 23 Jul 2008 18:34
182 lines
5516 bytes
5516 bytes
Marc
Below iis another test program that loads the same HTML but uses the
"WebBrowser1.Navigate( s + 'HTML_Test_8.html' );" function instead of the
load from String method used in the prior program.
This one works using the same key
Any help that you can give would be greatly appreciated.
Mark Moss
HTML_Test_08.html
<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google Maps JavaScript API Example</title>
<script
src="http://maps.google.com/maps?file=api&v=2.x&key=ABQIAAAACpomf__h59zOpwlPj8I1TxTIepB8lULTRp_rMs1GPPR1NBziUxTq6bXPIME5bqlIiFEXVANmN34zAQ"
type="text/javascript">
</script>
<script type="text/javascript">
// Create a directions object and register a map and DIV to hold the
// resulting computed directions
var map;
var directionsPanel;
var directions;
function initialize() {
if ( GBrowserIsCompatible() ) {
map = new
GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(
38.932400, -104.785600 ), 14 );
directionsPanel =
document.getElementById("route");
directions = new
GDirections(map, directionsPanel);
directions.load("from
38.932400, -104.785600 to 38.930400, -104.786600" );
}
}
</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="width: 350px; height: 350px; float:left;
border: 1px solid black;"></div>
<div id="route" style="width: 350px; height: 350px; float:left;
border; 1px solid black;"></div>
<br/>
</body>
</html>';
{======================================================================================================================}
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
{======================================================================================================================}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, OleCtrls, SHDocVw, ComCtrls, WebImage,
WebData;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
PageControl1: TPageControl;
WebData1: TWebData;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
s : string;
begin
s := ExtractFilePath( ParamStr(0) );
WebBrowser1.Navigate( s + 'HTML_Test_8.html' );
Application.ProcessMessages;
end;
end.
{======================================================================================================================}
object Form1: TForm1
Left = 192
Top = 107
Width = 870
Height = 682
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel
Left = 0
Top = 575
Width = 862
Height = 80
Align = alBottom
BevelInner = bvRaised
BevelWidth = 2
TabOrder = 0
object Button1: TButton
Left = 392
Top = 28
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
end
object PageControl1: TPageControl
Left = 0
Top = 0
Width = 862
Height = 575
Align = alClient
TabOrder = 1
end
object WebData1: TWebData
Data = <
item
ScanFirst = '<html'
ScanFrom = '<route>'
ScanTo = '</route>'
Tag = 0
end>
ImageType = itAll
Version = '1.1.0.1'
Left = 740
Top = 604
end
end
Re: TWebBrowser
Author: Marc Rohloff [TeamB]
Date: Wed, 23 Jul 2008 18:43
Date: Wed, 23 Jul 2008 18:43
17 lines
1943 bytes
1943 bytes
On Wed, 23 Jul 2008 12:34:45 -0600, Mark Moss wrote: > This one works using the same key This would work with any key or even no key. The Google maps server ignores the key if you are using a local file. > Any help that you can give would be greatly appreciated. I assume that Google is checking the referrer URL sent with the the request for the javascript file and comparing it to the one you gave when you created your key. It might be possible to modify the referrer using one of the Webbrowser events. The alternative is to always use a file, even if you have to create it first. -- Marc Rohloff [TeamB] marc -at- marc rohloff -dot- com
Re: TWebBrowser
Author: Jason Penny
Date: Thu, 24 Jul 2008 19:12
Date: Thu, 24 Jul 2008 19:12
71 lines
3418 bytes
3418 bytes
I have found that telling the webbrowser that the page is http://localhost
avoids google's API key problems, though I think somewhere in their
documents it says you need to create a key for localhost, but not file://...
URLs
I don't even specify an API key in the url of my test program,
http://www.jasontpenny.com/Delphi/
after
WebBrowser.Navigate('about:blank') ;
you can set the IHTMLDocument2.URL, and
(WebBrowser.Document as IHTMLDocument2).URL := 'http://localhost/';
the whole function that I use:
procedure WBLoadHTML(WebBrowser: TWebBrowser; HTMLCode: string) ;
var
sl: TStringList;
ms: TMemoryStream;
begin
WebBrowser.Navigate('about:blank') ;
// pretend we're at localhost, so google doesn't complain about the
API key
(WebBrowser.Document as IHTMLDocument2).URL := 'http://localhost/';
while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
Application.ProcessMessages;
if Assigned(WebBrowser.Document) then
begin
sl := TStringList.Create;
try
ms := TMemoryStream.Create;
try
sl.Text := HTMLCode;
sl.SaveToStream(ms);
ms.Seek(0, 0);
(WebBrowser.Document as
IPersistStreamInit).Load(TStreamAdapter.Create(ms));
finally
ms.Free;
end;
finally
sl.Free;
end;
end;
end;
"Marc Rohloff [TeamB]" <marc@nospam.marcrohloff.com> wrote in message
news:dj0geoc78mna.dlg@dlg.marcrohloff.com...
> On Wed, 23 Jul 2008 12:34:45 -0600, Mark Moss wrote:
>
>> This one works using the same key
> This would work with any key or even no key. The Google maps server
> ignores the key if you are using a local file.
>
>> Any help that you can give would be greatly appreciated.
> I assume that Google is checking the referrer URL sent with the the
> request for the javascript file and comparing it to the one you gave
> when you created your key. It might be possible to modify the referrer
> using one of the Webbrowser events.
> The alternative is to always use a file, even if you have to create it
> first.
>
> --
> Marc Rohloff [TeamB]
> marc -at- marc rohloff -dot- com
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads