Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi Überladen von TGeocoder (https://www.delphipraxis.net/183957-ueberladen-von-tgeocoder.html)

Mavarik 16. Feb 2015 10:18

Überladen von TGeocoder
 
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 :coder:

Der schöne Günther 16. Feb 2015 10:36

AW: Überladen von TGeocoder
 
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
Delphi-Quellcode:
TGeoCoder.Current
einen TWindowsGeocoder zurückliefern.

Das Problem ist, dass man bei
Delphi-Quellcode:
System.Win.Sensors.TPlatformGeocoder
zwar die Methode
Delphi-Quellcode:
GetGeocoderImplementer(): TGeocoderClass
überschreiben kann, die Klasse
Delphi-Quellcode:
TWindowsGeocoder
allerdings im
Delphi-Quellcode:
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
Delphi-Quellcode:
TGeoCoder
schreiben (oder den Code aus System.Win.Sensors kopieren). Das kann es doch nicht sein...

Daniel 16. Feb 2015 11:01

AW: Überladen von TGeocoder
 
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;

Der schöne Günther 16. Feb 2015 11:10

AW: Überladen von TGeocoder
 
Ja, eben. Aber wie soll man da herauskommen?

Delphi-Quellcode:
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.

Daniel 16. Feb 2015 11:23

AW: Überladen von TGeocoder
 
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?

Mavarik 16. Feb 2015 12:17

AW: Überladen von TGeocoder
 
Zitat:

Zitat von Daniel (Beitrag 1290043)
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:24 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