Hallo Thom
seit einiger Zeit setzt ich Deine super Komponente in einer freien Software ein.
Habe aber leider Probleme eine Geocode Funktion zu erstellen.
Das Problem ist das die Rückmeldung von Tfrm_map.GeocoderCallback erst kommt wenn
if DM.gpsdata_validate(var_lelat, var_lelng)=true then
dies schon aufgerufen wurde.
Was ich nicht weiss ist wie warte ich bei diesem Aufruf
Geocoder.Geocode(TGeocoderRequest.Create(Address.Text),GeocoderCallback);
auf Antwort und mache erst dann weiter.
Habe auch schon eine ganze weile im Forum nach einer Möglichkeit gesucht...
Bin Dankbar für Tipps oder wonach ich im Forum suchen könnte.
Shalom
Manfred
Delphi-Quellcode:
procedure Tfrm_test.btn_geocodeClick(Sender: TObject);
begin
if POS_LAT.Field.Text = '' then
begin
frm_map.Address.Text:= CITY.Field.DisplayText +', '+ STR.Field.DisplayText;
frm_map.btn_GeocodeClick(Sender);
end
else
case MessageDlg('Would you like to update the GPS-Data?', mtConfirmation, [mbYes, mbNo], 0)
of
mrYes:
begin
frm_map.Address.Text:= CITY.Field.DisplayText +', '+ STR.Field.DisplayText;
frm_map.btn_GeocodeClick(Sender);
end;
mrNo:
begin
abort;
end;
end;
if DM.gpsdata_validate(var_lelat, var_lelng)=true then
begin
DM_hotel.hotel.Edit;
POS_LAT.Field.Text := var_lelat;
POS_LNG.Field.Text := var_lelng;
DM_hotel.hotel.Post;
end;
end;
Delphi-Quellcode:
procedure Tfrm_map.btn_GeocodeClick(Sender: TObject);
begin
Geocoder.Geocode(TGeocoderRequest.Create(Address.Text),GeocoderCallback);
end;
Delphi-Quellcode:
procedure Tfrm_map.GeocoderCallback(Sender: TObject; Results: TGeocoderResultArray; Status: String);
var
MarkerOptions: TMarkerOptions;
begin
with Script do
begin
if Status=Google.Maps.GeocoderStatus.OK then
begin
Maps[0].SetCenter(Results[0].Geometry.Location);
MarkerOptions:=TMarkerOptions.Create;
with MarkerOptions do
begin
Map:=Self.Map;
Position:=Results[0].Geometry.Location;
end;
New(Google.Maps.Marker(MarkerOptions));
var_lelat:= FloatToStr(Results[0].Geometry.Location.lat);
var_lelng:= FloatToStr(Results[0].Geometry.Location.lng);
// only for debug
POS_LAT.Text := var_lelat;
POS_LNG.Text := var_lelng;
//
end else ShowMessage('Geocode was not successful for the following reason: '+Status);
end;
end;