Перейти к содержанию
Fire Monkey от А до Я

dim

Пользователи
  • Постов

    44
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные dim

  1. Воспользовался компонентом mEngine, при написании запускал на Lenovo все работало нормально, перенес на планшетник, все вроде работает

    только не геокодирует по координатам mEngine.Geocoding адрес не возвращает (при этом на ленове тут же все нормально показывает)

    не подскажете куда копать (проблема еще в том что планшет не могу подключить для отладки) 

    procedure TMasterDetailForm.OnLocationChange(Sender: TObject; const OldLocation,
      NewLocation: TLocationCoord2D);
    begin
      TThread.Synchronize(nil,
        procedure
        begin
          // перемещаемся по карте в текущие координаты, с зумом 14 (макс 16)
          myLoc := TMapCoordinate.Create(NewLocation.latitude, NewLocation.longitude);
          MapView1.Location := myLoc;
          MapView1.Zoom := 17;
    
          TTask.Run(
            procedure
            begin
              // геолокация
              mEngine.Geocoding(myLoc, myLocInfo); // геокодинг для записи заголовка в marker
    
              TThread.Synchronize(nil,
                procedure
                var
                  markDescriptor: TMapMarkerDescriptor;
                begin
                  // MyLocInfo хранит все данные геокодинга
                  Label6.Text := myLocInfo.FormattedAddress;
                  Label6.Text := Label6.Text+ ' -> '+KlLocInfo.FormattedAddress;
                  markDescriptor := TMapMarkerDescriptor.Create(myLoc, myLocInfo.FormattedAddress);
                  SetMarker(MapView1,myLoc,1,'',markDescriptor);
                end);
            end);
        end);
    end;

     

  2. Есть код который работает при смещении карты и получив координаты центра пытаюсь получить адрес по ним.

    procedure TMasterDetailForm.MapView3CameraChanged(Sender: TObject);
    var
      myCoordinat: TLocationCoord2D;
    begin
      inherited;
      myCoordinat.Create(MapView3.Location.Latitude,MapView3.Location.longitude);
      if (int(myCoordinat.Latitude)<>0) then begin //проверяю, что координаты определены
    
        if not Assigned(fGeocoder) then
        begin
          if Assigned(fGeocoder.Current) then
            fGeocoder := TGeocoder.Current.Create;
          if Assigned(fGeocoder) then
            fGeocoder.OnGeocodeReverse := OnGeocodeReverseEventStart;
        end;
        if Assigned(fGeocoder) and not fGeocoder.Geocoding then
          fGeocoder.GeocodeReverse(myCoordinat);
      end
    end;
    

    все работало до очередного обновления, а сейчас ругается "java.io.IOException: Service not Available" на fGeocoder.GeocodeReverse(myCoordinat);

    подскажите куда копать

  3. Сделал по типу "ScrollableForm". При открытии клавиатуры форма сдвигается, вроде все работает как надо, но если после набора текста нажать на кнопку "Сохранить" то происходит закрытие клавиатуры и смещение кнопки "Сохранить" и соответственно сохранение не происходит и требуется еще раз нажать на кнопку.

    Можно как то это обойти, например сделать задержку закрытия клавиатуры?

  4. как отобразить движение маркера без мигания. Пытаюсь сделать так:

            while not dateset.Eof do Begin
              bdcoord:=TMapCoordinate.Create(dateset.FieldByName('Latitude').AsFloat, dateset.FieldByName('longitude').AsFloat);
    		  IFind:=false;
              for Marker in FMarkers do
              begin
                if Marker.Descriptor.Snippet=dateset.FieldByName('driverid').AsString Then Begin
                  Marker.Remove;
                  SetMarker(MapView3,bdcoord,1,dateset.FieldByName('driverid').AsString);
                  IFind:=true;
                  Break;
                End;
              end;
              if not IFind then
                SetMarker(MapView3,bdcoord,1,dateset.FieldByName('driverid').AsString);
    
              dateset.Next;
            End;

    но просто еще один маркер добавляется, а старый не удаляет. Если делаю как написано на форуме: сначала удаляю все  

    for Marker in FMarkers do
      begin
          Marker.Remove;
      end;
      FMarkers.Clear;

    то работает, но идет мигание маркеров
     

  5. пока сделал так (очень криво):

    procedure TMasterDetailForm.MapView3CameraChanged(Sender: TObject);
    var
      myGeocoder: TGeocoder;
      myCoordinat: TLocationCoord2D;
    begin
    
      if not Assigned(myGeocoder) then
      begin
        if Assigned(myGeocoder.Current) then
          myGeocoder := TGeocoder.Current.Create;
        if Assigned(myGeocoder) then
          myGeocoder.OnGeocodeReverse := OnGeocodeReverseEventStart;
      end;
      // Translate location to address
      myCoordinat.latitude := MapView3.Location.Latitude;
      myCoordinat.longitude := MapView3.Location.longitude;
      if FMyMarkers<>nil then FMyMarkers.Remove;
        SetMarker(MapView3,TMapCoordinate.Create(myCoordinat.Latitude,myCoordinat.Longitude),0);
      if Assigned(myGeocoder) and not myGeocoder.Geocoding then
        myGeocoder.GeocodeReverse(myCoordinat);
    end;

    при смещении карты маркер всегда встает по центру, но не постоянно, а только после перемещения.

    помогите, неужели ни кто не делал определение адреса по карте.

  6. Подскажите как сделать. Нужно разместить маркер по центру компонента MapView и что бы при перемещении по карте он так и оставался видимым по центру и соответственно 

      myCoordinat.latitude := MapView3.Location.Latitude;
      myCoordinat.longitude := MapView3.Location.longitude;

    выдавал координаты под этим маркером
    и второй вопрос: по полученным координатам я получаю адрес myGeocoder.GeocodeReverse(myCoordinat) , но он не соответствует КЛАДР (да и вообще много ошибок в названии улиц), а мне надо привязать к своей базе адресов. Посоветуйте кто как выходил из ситуации, или как получить из него список всех улиц по городу 

  7. как сделать переход между контролами?

    почитал про returnkeytype=Next но у меня не работает, максимум KillFocusByReturn если true закрывает клаву, но хотелось бы сделать переход.

    если SetFocus ставить то работает, но это не правильно для каждого Edita прописывать, раньше (для винды) делал

    procedure TForm.FormKeyPress(Sender: TObject; var Key: Char);
    begin
    if (Key = #13)then
      begin
            Key := #0;
            Perform(WM_NEXTDLGCTL, 0, 0);
      end;
    end;

     

    Есть ли что то подобное для андроида?

  8. есть сервер DataSnap, если после подключения к нему клиента сервер выключит и включить снова то клиент выдает ошибку

    если отловив ее на клиенте делаю    

    SQLConnection1.Connected:= False; 

    SQLConnection1.Connected:= True;

    все равно не работает дальше, надо закрыть программу и снова открыть

    как избавится от этого?

    xe10.1

  9. Создаю динамически ListBoxItem и размещаю на них кнопу

      lbi:=TListBoxItem.Create(ListBox2);
      lbi.Parent:=ListBox2;
      lbi.StyleLookup:='listboxitembottomdetail';
      lbi.Height:=57;
      lbi.ItemData.Text:='Добавить';
      lbi.ItemData.Detail:='';
    
      SpeedButton2:=TSpeedButton.Create(lbi);
      SpeedButton2.Action:=del_adres;
      SpeedButton2.Align:=TAlignLayout.Right;
      SpeedButton2.StyleLookup:='trashtoolbutton';
      SpeedButton2.Width:=48;
      SpeedButton2.Parent:=lbi;
      SpeedButton2.Tag:=ListBox2.Count-2;

    как при нажатии на кнопку получить ее ListBoxItem чтобы удалить

×
×
  • Создать...