Einzelnen Beitrag anzeigen

HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#298

AW: Google Maps über COM (Component Object Model)

  Alt 1. Nov 2012, 20:23
Bisher klappt alles sehr gut -- echt ein ganz tolles Framework! An dieser Stelle nochmals vielen Dank!

Ein Problem habe ich derzeit aber leider:

Ich führe in FormCreate die Initialisierung aus. Wenn ich dann direkt in Anschluss ebenfalls in FormCreate() oder auch in FormShow() einen Marker erzeugen will, dann scheitert dies mit einer Zugriffsverletzung (auf 000000).

Habe ich exakt die gleiche Routine aber auf Button1Click(), dann funktioniert alles prächtig. Hast Du irgendeine Idee dazu, woran das liegen könnte? Muss man irgendwas abwarten? Gibt es dazu ein Event?

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw,

  gmAPI, gmMap, gmBase, gmOverlaysMarker;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    procedure InitMap(Sender: TObject);
    procedure MakeMarker;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  MakeMarker; // läuft ohne Probleme!
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if Script=nil then with TScript.Create(WebBrowser1) do LoadAPIAsync(InitMap);
//  MakeMarker; // stürzt ab!
end;

procedure TForm1.InitMap(Sender: TObject);
  var MyOptions : TMapOptions;
begin
  with Sender as TScript do begin
    MyOptions := TMapOptions.Create;
    with MyOptions do begin
      Zoom := 12;
      Center := New(Google.Maps.LatLng(51.250249, 9.835209));
      StreetViewControl := False;
      MapTypeID := Google.Maps.MapTypeID.Roadmap;
    end;
    New(Google.Maps.Map(MyOptions));
  end;
end;

procedure TForm1.MakeMarker;
  var MarkerOptions : TMarkerOptions;
begin
  with Script(WebBrowser1) do begin
    MarkerOptions := TMarkerOptions.Create;
    with MarkerOptions do begin
      Position := New(Google.Maps.LatLng(51.250249, 9.835209));
      Map     := Maps[0];
    end;
    New(Google.Maps.Marker(MarkerOptions));
    MarkerOptions.Free;
  end;
end;

end.

Geändert von HJay ( 1. Nov 2012 um 20:48 Uhr)
  Mit Zitat antworten Zitat