AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Überladen von TGeocoder

Ein Thema von Mavarik · begonnen am 16. Feb 2015 · letzter Beitrag vom 16. Feb 2015
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.135 Beiträge
 
Delphi 10.3 Rio
 
#1

Überladen von TGeocoder

  Alt 16. Feb 2015, 10:18
Hallo Zusammen...

Ich würde gerne die TGeocoder variable "überschreiben"

Wie bringe ich dem ganzen meine Routine bei... Egal was ich versuche Delphi nimmt immer die "leere" Windows Version.

Ich habe schon TPlattformGeocoder überladen und eine eigene Klasse von TGeocoder abgeleitet...
Da aber alle Felder von TGeocoder privat sind...

Sollte nicht ein
Delphi-Quellcode:
  TMyPlatformGeocoder = class(TPlatformGeocoder)
  protected
    class function GetGeocoderImplementer: TGeocoderClass; override;
  end;
Die Klasse von Windows überschreiben?

Muss ich echt die System.Sensors ändern?

Was übersehe ich gerade... (Hatte noch keine Kaffee)

Mavarik
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.135 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Überladen von TGeocoder

  Alt 16. Feb 2015, 10:36
System.Sensors.pas:

Delphi-Quellcode:
{$IFDEF ANDROID}
  System.Android.Sensors;
{$ENDIF ANDROID}
{$IFDEF IOS}
  System.iOS.Sensors;
{$ELSE}
{$IFDEF MACOS}
  System.Mac.Sensors;
{$ENDIF MACOS}
{$ENDIF IOS}
{$IFDEF MSWINDOWS}
  System.Win.Sensors;
{$ENDIF}
Ist deine Zielplattform Windows, wird TGeoCoder.Current einen TWindowsGeocoder zurückliefern.

Das Problem ist, dass man bei System.Win.Sensors.TPlatformGeocoder zwar die Methode GetGeocoderImplementer(): TGeocoderClass überschreiben kann, die Klasse TWindowsGeocoder allerdings im implementation -Teil der Unit deklariert ist und du von dieser nicht ableiten kannst.

Somit: Von TPlatformGeocoder ableiten wäre auch mein erster Schritt gewesen, dann weiß ich aber genauso wenig weiter: Ich müsste mir jetzt einen komplett neuen TGeoCoder schreiben (oder den Code aus System.Win.Sensors kopieren). Das kann es doch nicht sein...
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Überladen von TGeocoder

  Alt 16. Feb 2015, 11:01
Wird TGeocoder.GetGeocoderImplementer nicht aufgerufen?

Sollte doch genau dafür da sein:

Delphi-Quellcode:
    // descendants return here the class that implements the geocoder functionality
    class function GetGeocoderImplementer: TGeocoderClass; virtual; abstract;
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.135 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Überladen von TGeocoder

  Alt 16. Feb 2015, 11:10
Ja, eben. Aber wie soll man da herauskommen?

TGeoCoder.Current erzeugt folgenden Aufruf:

Code:
System.Win.Sensors.TPlatformGeocoder.GetGeocoderImplementer
System.Sensors.TGeocoder.GeocoderImplementer
System.Sensors.TGeocoder.GetCurrent
mit
Delphi-Quellcode:
class function TPlatformGeocoder.GetGeocoderImplementer: TGeocoderClass;
begin
  Result := TWindowsGeocoder;
end;
Was soll man da noch machen können? Man könnte bei TGeoCoder.GetCurrent ansetzen, aber die Methode ist statisch und privat. Eigentlich fiele mir nur ein, sich einen komplett neuen TGeoCoder zu schreiben und diesen halt zu direkt nutzen.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Überladen von TGeocoder

  Alt 16. Feb 2015, 11:23
Stimmt auffallend.
Aber wozu eigentlich das Ganze?
Was macht denn der Geocoder? Er wandelt zwischen Geokoordinaten und Adressen.


Wir nutzen ihn doch eh im Code:

Delphi-Quellcode:
  // Translate location to address
  if Assigned(FGeocoder) and not FGeocoder.Geocoding then
    FGeocoder.GeocodeReverse(NewLocation);
Warum nicht an genau dieser Stelle den eigenen Code einklinken?
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.135 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Überladen von TGeocoder

  Alt 16. Feb 2015, 12:17
Warum nicht an genau dieser Stelle den eigenen Code einklinken?
Hi D!

Klar... Kann ich an dieser Stelle ansetzen, dann mache ich das in jedem Projekt jedes mal.

Warum auch immer ich die Class Methode nicht von meiner Ableitung überschrieben wird...

Wenn es schon eine leere Windows Implementation gibt warum ist die nicht virtual?

Mavarik
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 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