Delphi Can
Mapview mark Kaldırma - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7)
+--- Konu Başlığı: Mapview mark Kaldırma (/showthread.php?tid=4693)



Mapview mark Kaldırma - arsl01 - 04-04-2020

Merhaba Tmapview ile daire çizdiriyorum her yeni daire eklemeden önce önceki daireyi şu şekilde temizliyorum
FmapDaire.DisposeOf;

Fakat Mark ekleyip her seferinde Mark'ı temizlemek istediğimde tepki vermiyor Remove komutunu denediğimde ise uygulama kapanıyor.
Yeni Mark oluşturmadan önce nasıl bir önceki mark'ı temizlerim?


Cvp: Mapview mark Kaldırma - Fesih ARSLAN - 04-04-2020

Merhaba,
Marker tipinde global bir TList oluşturun ve oluşturduğunuz her marker'ı da List'e ekleyin. Böylece sonradan istediğiniz bir marker değerine ulaşabilirsiniz.
Bir önceki marker'ı silmek için remove işleminde List'in son elemanından bir önceki (list.count-1) değerini kullanın (Yeni marker'ı eklemeden silmek isterseniz list.count değerini kullanın). Sonrasında List'ten işlem yaptığınız marker'ı da silin.


Mapview mark Kaldırma - arsl01 - 04-04-2020

Teşekkür ederim hocam sonucu paylaşacağım


Cvp: Mapview mark Kaldırma - Fesih ARSLAN - 04-04-2020

Merhaba,
Çalışmanızı biraz daha hızlı sonuçlandıracağına inandığım ve
birçok harita işlemlerinde kullandığım kod yapısını paylaşayım. 
 public
   FMarkers: TList<TMapMarker>;

 ...

procedure TformAna.FormCreate(Sender: TObject);
begin
 FMarkers := TList<TMapMarker>.Create;
end;

procedure TformAna.FormDestroy(Sender: TObject);
begin
 if Assigned(FMarkers) then
   FreeAndNil(FMarkers);
end;

procedure TformAna.SetArsMapViewYenile();
begin
 If FMarkers.Count > 0 Then frmHarita.MapView1.Location := FMarkers.Last.Descriptor.Position; // else sizin belirleyeceğiniz varsayılan bir konum. 
end;

procedure TformAna.SetArsMarkerSilTumu;
Var
 Marker: TMapMarker;
begin
 Try
   if (FMarkers <> Nil) And (FMarkers.Count > 0) then
   Begin
     for Marker in FMarkers do
       Marker.Remove;
     FMarkers.Clear;
     SetArsMapViewYenile();
   End;
 Except

 End;
end;

Marker eklemek için de aşağıdaki gibi bir metod kullanıyorum.
procedure TfrmHarita.SetArsMarkerEkle(const Position: TMapCoordinate; const Baslik: String; TumunuSil: Boolean);
var
 MyMarker: TMapMarkerDescriptor;
 Yer: TMapMarker;
begin
 if TumunuSil then
   formAna.SetArsMarkerSilTumu();
 MyMarker := TMapMarkerDescriptor.Create(Position, 'Yeni Konum');
 MyMarker.Draggable := False;
 MyMarker.Visible := True;
 MyMarker.Title := Baslik;
 MyMarker.Snippet := '(' + Position.Latitude.ToString + ' - ' + Position.Longitude.ToString + ')';
 Yer := MapView1.AddMarker(MyMarker);
 formAna.FMarkers.Add(Yer);
 MapView1.Location := Yer.Descriptor.Position;
 MapView1.Zoom := 11;
end;
Kullanım şekli
SetArsMarkerEkle(Position, 'Adresim', True);



Mapview mark Kaldırma - arsl01 - 05-04-2020

Hocam gerçekten harikasınız Smile çok teşekkür ederim