Windows 10 64 ビット開発マシンで GMLib v3 Google マップ コンポーネントを使用して Delphi ベルリンを使用しています。GMMarker コンポーネントの LoadFromDataSet 関数を使用しているときに、マーカーまたはグリッドをクリックしたときに位置をアニメーション化できるようにしたいと考えています。これについてどうすればよいかわかりません。
私の ERP アプリケーションは、入力された住所をジオコーディングし、返された緯度と経度を取得して、それらの値をデータベースに保存することにより、入力された住所を検証しようとします。ジオコーディングが複数の値を返す場合、グリッドとジオコーディング結果の場所を示すマップを含む画面を表示します。
これを実現するには、最初にすべての結果を Listview コンポーネントに追加してから、各 Listview アイテムを処理し、出現ごとに GMMarker を次のように追加します。
for I := 0 to ListView.Items.Count-1 do
begin
GMMarker1.Add(StrToFloat(ListView.Items[I].SubItems[2]),StrToFloat(ListView.Items[I].SubItems[1]),ListView.Items[I].Caption);
end;
次に、バウンス アニメーション メソッドにアクセスし、次のようにマーカーがクリックされたときに GMMarker のインデックスを使用してリストビューを配置できます。
procedure TfrmGeoCodeAdd.GMMarker1Click(Sender: TObject; LatLng: TLatLng;Index: Integer; LinkedComponent: TLinkedComponent);
begin
inherited;
if ListView.ItemIndex = Index then
HandleAnimation(Index)
else
ListView.ItemIndex := Index;
end;
procedure TfrmGeoCodeAdd.HandleAnimation(Index: integer);
begin
inherited;
if (AnimationIndex >= 0) then
begin
GMMarker1[AnimationIndex].Animation.Bounce := False;
end;
if (AnimationIndex = index) then
AnimationIndex := -1
else
begin
if GMMarker1[Index].Animation.Bounce then
GMMarker1[Index].Animation.Bounce := False
else
GMMarker1[Index].Animation.Bounce := True;
AnimationIndex := Index;
end;
end;
これは、場所を個々の GMMarker にロードするときに非常にうまく機能します。ただし、データベースが更新されたら、特定の日のすべての配達場所を Google マップに表示することで、同様のことを実現したいと考えています。これを行うには、次のように GMMarker の LoadfromDataset 関数を使用します。
GMMarker1.LoadFromDataSet(cdsDeliveries, 'Latitude', 'Longitude', 'SO_NO', 'Marker', True);
GMMarker1.ZoomToPoints;
これも非常にうまく機能し、次のマップが生成されます。
私が抱えている問題は、LoadFromDataSet を使用すると、マップ上に多数のマーカーがあるにもかかわらず、GMMarker.Count が 1 になることです。したがって、GMMarker の VisualObjects プロパティを使用する必要があると思います。ただし、GMMarker.VisualObjects.Count も 1 です。
私の質問は:
GMMarkers.LoadFromDataset 関数を使用するときに、画面上のマーカーの Animation.Bounce プロパティにアクセスするにはどうすればよいですか?
どんな助けでも大歓迎です。
レナード