Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Problems with Google API (https://www.delphipraxis.net/160721-problems-google-api.html)

BlueLiquidCell 27. Mai 2011 18:10

Delphi-Version: 7

Problems with Google API
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hey Guys,

Ich hab ein Programm geschrieben das die Goole-API benutzt und die folgenden uses benötigt:

Delphi-Quellcode:
DocHostUIHandler, BrowserTools, gmAPI, gmBase, gmMap, gmPolylinePolygon, gmEvents


In dem Programm funktioniert alles wunderbar. Dann wollte ich das Programm in ein anderes integrieren das auf verschiedenen tabs, verschiedene dinge anzeigt. Doch wenn ich die uses einbinde crashed es sofort am anfang ohne das jegliche funktion eingebaut ist.

Das Problem ist die "gmAPI". Solange die nicht dabei ist, geht zumindest das initialisieren. Doch wenn die "gmAPI" mit drin ist (so wie oben) dann crashed es in der "DispObject" in Zeile 314 (Zeile mit BrowserTools... hier) und es kommt eine Exeption Notification (error.png).

Delphi-Quellcode:
procedure TDispObject.SetProp(const Name: String; const Value: OleVariant; CreateIfNotExists: Boolean = false);
begin
  if CreateIfNotExists and not PropertyExists(Name)
    then AddProp(Name);
  BrowserTools.SetProp(FDisp,Name,Value,{false}true);
end;

Irgendjemand ne idee?

Würd mich echt freuen.

Christoph

Thom 27. Mai 2011 19:11

AW: Problems with Google API
 
Hallo Christoph,

das sieht nach meinem Framework aus... :lol:

Poste mal bitte Deinen Quelltext - ohne diesem kann ich da leider keine Diagnose erstellen... :stupid:

BlueLiquidCell 27. Mai 2011 19:38

AW: Problems with Google API
 
Hallo Thomas

Das ist gut möglich ;-)
Dann erstmal vielen dann für das Framework und deine Hilfe!

Hier die einbindung die Funktioniert:
Delphi-Quellcode:
program MapControls;

{$INCLUDE google/gmConfig.inc}

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},

  // Google JScripts
  DocHostUIHandler in 'google\DocHostUIHandler.pas',
  BrowserTools in 'google\BrowserTools.pas',
  DispObject in 'google\DispObject.pas',
  JScriptObjects in 'google\JScriptObjects.pas',
  HTMLObjects in 'google\HTMLObjects.pas',

  // Google APIs
  gmAPI in 'google\gmAPI.pas',
  gmBase in 'google\gmBase.pas',
  gmDirectionsRenderer in 'google\gmDirectionsRenderer.pas',
  gmMVC in 'google\gmMVC.pas',
  gmEvents in 'google\gmEvents.pas',
  gmDirectionsService in 'google\gmDirectionsService.pas',
  gmMap in 'google\gmMap.pas',
  gmStreetView in 'google\gmStreetView.pas',
  gmMarker in 'google\gmMarker.pas',
  gmPolylinePolygon in 'google\gmPolylinePolygon.pas',
  gmElevationService in 'google\gmElevationService.pas',
  gmGeocoder in 'google\gmGeocoder.pas',
  gmLayers in 'google\gmLayers.pas',
  gmOverlays in 'google\gmOverlays.pas',
  gmInfoWindow in 'google\gmInfoWindow.pas';

{$R *.res}

begin
  Application.Initialize;
{$IFDEF DELPHI2007_UP}
  Application.MainFormOnTaskbar := True;
{$ENDIF}
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.

Delphi-Quellcode:
unit Unit1;

interface

{$INCLUDE google/gmConfig.inc}

uses
  Windows, Messages, SysUtils, Variants, Classes,
  Graphics, Controls, Forms, Dialogs, OleCtrls, SHDocVw, ExtCtrls, DocHostUIHandler,
  BrowserTools, gmAPI, gmBase, gmMap, StdCtrls, RotImg, gmPolylinePolygon, gmEvents,Unit2, math;


Die die nicht funktioniert schauts so aus:

Delphi-Quellcode:
program FSXControl;

uses
  FastShareMem,
  Forms,
  UnitMain in 'UnitMain.pas' {FormMain},
  UnitSplashScreen in 'UnitSplashScreen.pas' {FormSplashScreen},
  dllheaders in 'dllheaders.pas',
  UnitAirplaneOverlay in 'UnitAirplaneOverlay.pas' {FormAirplaneOverlay},


  // Google JScripts
  DocHostUIHandler in 'google\DocHostUIHandler.pas',
  BrowserTools in 'google\BrowserTools.pas',
  DispObject in 'google\DispObject.pas',
  JScriptObjects in 'google\JScriptObjects.pas',
  HTMLObjects in 'google\HTMLObjects.pas',

  // Google APIs
  gmAPI in 'google\gmAPI.pas',
  gmBase in 'google\gmBase.pas',
  gmDirectionsRenderer in 'google\gmDirectionsRenderer.pas',
  gmMVC in 'google\gmMVC.pas',
  gmEvents in 'google\gmEvents.pas',
  gmDirectionsService in 'google\gmDirectionsService.pas',
  gmMap in 'google\gmMap.pas',
  gmStreetView in 'google\gmStreetView.pas',
  gmMarker in 'google\gmMarker.pas',
  gmPolylinePolygon in 'google\gmPolylinePolygon.pas',
  gmElevationService in 'google\gmElevationService.pas',
  gmGeocoder in 'google\gmGeocoder.pas',
  gmLayers in 'google\gmLayers.pas',
  gmOverlays in 'google\gmOverlays.pas',
  gmInfoWindow in 'google\gmInfoWindow.pas';


{$R *.res}

begin
  Application.Initialize;
{$IFDEF DELPHI2007_UP}
  Application.MainFormOnTaskbar := True;
{$ENDIF} 
  Application.CreateForm(TFormSplashScreen, FormSplashScreen);
  Application.CreateForm(TFormMain, FormMain);
  Application.Run;
end.
Delphi-Quellcode:
unit UnitMain;

interface

{$INCLUDE google/gmConfig.inc}

uses
  FastShareMem, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls, jpeg, Menus, math, OleCtrls, DBCtrls,
  FPCUser, dllheaders, ColorGrd, clipbrd, mmSystem, SHDocVw,
  DocHostUIHandler, BrowserTools, gmAPI, gmBase, gmMap, RotImg, gmPolylinePolygon, gmEvents;
Hoffe das bringt dir etwas, wenn nicht sag bescheid was du noch brauchst,
oder wir treffen uns ma bei Skype dann kann ich dirs direkt zeigen?
Christoph

Thom 27. Mai 2011 20:47

AW: Problems with Google API
 
Hallo Christoph,

keine Ursache! :-D

Tja - die von Dir geposteten Programmteile sind leider wenig aussagekräftig, da daraus nicht hervorgeht, wie Du Google Maps verwendest.

Benutzt Du mehrere TWebBrowser-Komponenten? Falls Ja, mußt Du auf die korrekte Verwendung der Script-Objekte achten, da jede Browser-Komponente ein eigenes besitzt (siehe Demo 9 - Multi Maps). Dann kann bzw. darf keinesfalls die globale Variable Script verwendet werden!

Du kannst - wenn Du möchtest - den kompletten Quelltext als Anhang posten. Dann könnte ich ihn bei mir durch den Debugger jagen. Falls Du nicht möchtest, daß jeder den Quelltext herunterladen kann, könntest Du ihn mir auch als Email-Anhang schicken. Meine Email-Adresse ist im Profil ersichtlich (vCard). Skype besitze ich nicht... :pale:

BlueLiquidCell 27. Mai 2011 20:58

AW: Problems with Google API
 
Hallo Thomas

Ja das hab ich fast befürchtet das das nicht reicht ;-)

Ich schau mir das mit den mehrern Webbrowser Komponenten mal an und schreib dir sonst morgen mal ne mail!

Vielen Dank
Christoph

Thom 27. Mai 2011 21:00

AW: Problems with Google API
 
Ok. 8-)

nuclearping 27. Mai 2011 21:00

AW: Problems with Google API
 
[OT]

Wird das was für den MS Flight Simulator X? Wenn ja, was? :mrgreen:

[/OT]

BlueLiquidCell 27. Mai 2011 21:17

AW: Problems with Google API
 
Hey

Mist hab ich die Headline dringelassen ;-)

Ja wirds bzw. soll es werden.

Der Teil mit Google ist nur ein kleiner Teil des ganzen Programms, welches Folgende Funktionen hat:

Flight Tracking, Anzeige des Flugtracks, Differenzberechnung zwischen zwei Punkten, Umschaltung zwischen KartenTyps, Zoom (some more to come)

Der Rest des Programms ist sozusagen nen 2tes Cockpit mit allen schaltern, leichtere eingabe etc und erweiterten möglichkeiten, und ist fürn Touchscreen gedacht(kann aber auch so genutz werden)

Reicht dir das als info :-P

Christoph

nuclearping 27. Mai 2011 22:03

AW: Problems with Google API
 
Cool. :) Danke für die Info und viel Glück beim Realisieren. :thumb:

Hab vor 'ner Weile auch mal'n "kleines" AddOn in (Turbo) Delphi angefangen, sowas wie FS Passengers, weil mir das teilweise zu eingeschränkte Funktionen hatte und ich damit zB keine Cargo Airlines simulieren konnte: http://vax.108bits.de/ - Bastel aber nur in meiner Freizeit dran run, wenn ich Lust und Laune hab.

Ist auf jeden Fall 'n spannendes und auch spaßiges Betätigungsfeld. 8-)

BlueLiquidCell 30. Mai 2011 19:25

AW: Problems with Google API
 
So dank tatkräfiger Unterstützung von Thomas konnte das Problem lokalisiert werden.

Und damit die, die das gleiche haben auch die Lösung haben, werd ich die ma kurz posten.

Zitat:

Zum Typ TPoint:
Den gibt's ein mal in den Units Windows und Types: Dort ist es ein Record aus den Werten X und Y. Dann gibt es für das Google Maps API noch einmal diesen Typ in der Unit gmBase: Allerdings ist es dort ein (JavaScript)Objekt.

Bindest Du jetzt beide (bzw. alle drei) Units in Deine uses-Klauses ein, muß Du in Deinem Quelltext einfach davor schreiben, welchen Type der Compiler verwenden soll:

Delphi-Quellcode:
Delphi-Quellcode:
var
  Point1: Types.TPoint;
  Point2: gmBase.TPoint;
begin
  //...
  Point1.X:=2;
  Point2.X:=2;
  //...
end;
Vielen Dank nochmal Thomas!

Schöne Grüße
Christoph

@ nuclearping
Ja das ist es, ich arbeite aber auch nur in der Freizeit dran, deswegen gehts meistens auch nur langsam vorwärts ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz