2016-11-15 14 views
0

Windows 10 64 비트 개발 시스템에서 GMLib v3 Google지도 구성 요소와 함께 Delphi Berlin을 사용하고 있습니다. GMMarker 구성 요소의 LoadFromDataSet 기능을 사용할 때 마커 또는 눈금을 클릭 할 때 위치를 애니메이션으로 만들 수 있어야합니다. 나는 이것에 대해 어떻게 가야할지 모르겠다.GMLib 및 LoadFromDataset을 사용하여 마커를 애니메이트하는 방법

내 ERP 응용 프로그램은 입력 된 주소를 지오 코딩하고 반환 된 위도와 경도를 잡고 데이터베이스에 저장함으로써 입력 된 주소의 유효성을 검사합니다. 지오 코딩이 여러 값을 반환하면 그리드가있는 화면과 지오 코딩 결과의 위치를 ​​보여주는지도를 표시합니다.

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; 

는 I가 다음 수 이니

enter image description here

I 먼저리스트 뷰 컴포넌트 모든 결과를 가산하고, 각리스트 뷰 아이템을 처리하고 다음과 같이 각각의 경우에 대해 GMMarker를 추가함으로써이를 달성 바운스 애니메이션 메소드에 액세스하고 다음과 같이 마커를 클릭 할 때 GMMarker의 인덱스를 사용하여 Listview의 위치를 ​​지정합니다.

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; 

개별 GMMarkers에 위치를로드 할 때 매우 효과적입니다. 그러나 일단 데이터베이스가 업데이트되면 Google지도에서 특정 날짜의 모든 게재 위치를 표시하여 비슷한 결과를 얻고 싶습니다. 다음지도 이것은 또한 아주 잘 작동

GMMarker1.LoadFromDataSet(cdsDeliveries, 'Latitude', 'Longitude', 'SO_NO', 'Marker', True); 
GMMarker1.ZoomToPoints; 

및 생산 : 다음과 같이 나는 GMMarker의 LoadfromDataset 기능을 사용하여이 작업을 수행하려면

enter image description here

내가 가진 문제를 LoadFromDataSet이 때 GMMarker.Count는 맵에 많은 마커가 있더라도 1입니다. 따라서 GMMarker의 VisualObjects 속성을 사용해야한다고 가정합니다. 그러나 GMMarker.VisualObjects.Count 1.

내 질문도입니다 :

어떻게이 GMMarkers.LoadFromDataset 기능을 사용할 때 화면에 마커의 Animation.Bounce 속성에 액세스 할 수 있습니다?

도움을 주시면 대단히 감사하겠습니다.

답변

0

레너드 나는 내 문제를 해결하지만 난 질문을하기 전에이 시도하지 않은 이유를 알고하지 않습니다. 어쩌면 내 대답이 다른 사람을 도울 것입니다.

내 HandleAnimation 함수에 OnClick 이벤트에서 마커를 통과하고 다음과 같이 애니메이션 메소드에 액세스하기 위해 전달 된 매개 변수를 사용하여 문제를 해결하려면

procedure TfrmDeliveryMap.GMMarker1Click(Sender: TObject; LatLng: TLatLng; Index: Integer; LinkedComponent: TLinkedComponent); 
begin 
    inherited; 

    if cdsDeliveries.RecNo = Index then 
    HandleAnimation((Sender as TGMMarker), Index) 
    else 
    cdsDeliveries.RecNo := Index; 
end; 

procedure TfrmDeliveryMap.HandleAnimation(Marker: TGMMarker; Index: integer); 
begin 
    inherited; 

    if (AnimationIndex >= 0) then 
    Marker[AnimationIndex].Animation.Bounce := False; 

    if (AnimationIndex = index) then 
     AnimationIndex := -1 
    else 
    begin 
    if Marker[Index].Animation.Bounce then 
     Marker[Index].Animation.Bounce := False 
    else 
     Marker[Index].Animation.Bounce := True; 

    AnimationIndex := Index; 
    end; 
end;