![]() |
Ü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:
Die Klasse von Windows überschreiben?
TMyPlatformGeocoder = class(TPlatformGeocoder)
protected class function GetGeocoderImplementer: TGeocoderClass; override; end; Muss ich echt die System.Sensors ändern? Was übersehe ich gerade... (Hatte noch keine Kaffee) Mavarik :coder: |
AW: Überladen von TGeocoder
System.Sensors.pas:
Delphi-Quellcode:
Ist deine Zielplattform Windows, wird
{$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}
Delphi-Quellcode:
einen TWindowsGeocoder zurückliefern.
TGeoCoder.Current
Das Problem ist, dass man bei
Delphi-Quellcode:
zwar die Methode
System.Win.Sensors.TPlatformGeocoder
Delphi-Quellcode:
überschreiben kann, die Klasse
GetGeocoderImplementer(): TGeocoderClass
Delphi-Quellcode:
allerdings im
TWindowsGeocoder
Delphi-Quellcode:
-Teil der Unit deklariert ist und du von dieser nicht ableiten kannst.
implementation
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:
schreiben (oder den Code aus System.Win.Sensors kopieren). Das kann es doch nicht sein...
TGeoCoder
|
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; |
AW: Überladen von TGeocoder
Ja, eben. Aber wie soll man da herauskommen?
Delphi-Quellcode:
erzeugt folgenden Aufruf:
TGeoCoder.Current
Code:
mit
System.Win.Sensors.TPlatformGeocoder.GetGeocoderImplementer
System.Sensors.TGeocoder.GeocoderImplementer System.Sensors.TGeocoder.GetCurrent
Delphi-Quellcode:
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.
class function TPlatformGeocoder.GetGeocoderImplementer: TGeocoderClass;
begin Result := TWindowsGeocoder; end; |
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:
Warum nicht an genau dieser Stelle den eigenen Code einklinken?
// Translate location to address
if Assigned(FGeocoder) and not FGeocoder.Geocoding then FGeocoder.GeocodeReverse(NewLocation); |
AW: Überladen von TGeocoder
Zitat:
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 10:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz