Archivo

Archivo para la categoría ‘iOS’

Visualizando y utilizando Mapas (Componente TMapView)

miércoles, 21 de diciembre de 2016 44 comentarios


En Delphi podemos utilizar diferentes componentes que nos permitan visualizar mapas en nuestras aplicaciones. El más básico, es el componente TWebBrowser del que ya he hablado otras veces en el blog. Al final un la visualización de un Mapa (utilizando los diferentes servicios existentes) no es más que la visualización de una página web.

Si queréis ver entradas anteriores relacionadas con esto, aquí os dejo una lista:

Aparte de esto, si queréis más información sobre el tema, os puedo recomendar las webs de:

Leer más…

Hablando del tiempo… (OpenWeatherMap) 2/2

lunes, 21 de diciembre de 2015 2 comentarios

Para complementar la entrada anterior (Hablando del tiempo… (OpenWeatherMap) 1/2)  y «acabarla» me queda publicar el desarrollo móvil correspondiente a la aplicación que vimos anteriormente.
Como ya os comenté en la entrada anterior, el código a utilizar es prácticamente el mismo que hemos utilizado en las aplicaciones para windows (VCL). La mayor diferencia que me he encontrado en el tratamiento de la respuesta JSON que obtenemos del servidor.

Para versiones antiguas de Delphi, podéis utilizar si lo necesitáis la misma librería que ya he recomendado aquí otras veces. Se trata de lkJSON que podéis encontrar en Sourceforge.
En las nuevas versiones de Delphi ya está disponible la unit System.JSON, con lo necesario para no utilizar librerías externas.

function TForm1.ParseTiempoCiudadesHist(AObjResp: TlkJSONobject; var ATiempoProxHoras: TTiempoProxHoras): Boolean;
var
  i, j, num, index:integer;
  oHorasList, OWList:TlkJSONlist;
  oHora, oCoord, oMain, oWind, oWeather:TlkJSONobject;
  Str:String;
begin
  // ini
  Result := False;
  // Si no está asignado salimos..
  if not Assigned(AobjResp) then begin
    Exit;
  end;
    // Si hay error no parseamos
    if IsErrorResponse(AObjResp, errCode, ErrMsg) then begin
    Exit;
  end;
 
  // proteccion para el parseo
  try
    // cod. devuelto (datos principales
    ATiempoProxHoras.Cod := errCode;
 
    num := AObjResp.IndexOfName('count');
    if (num <> -1) then begin
      num := GetAsInteger(AObjResp.Field['count'].Value);
    end;
 
    // si no hay ciudades
    if (num = 0) then begin
      MessageDlg('No hay ninguna ciudad que coincida con ese código [nombre,pais].', mtWarning, [mbOK], 0);
      Exit;
    end;
 
    // Lista de horas (Lista)
    TlkJSONBase(oHorasList) := AObjResp.Field['list'];
    // array de elementos
    SetLength(ATiempoProxHoras.TiempoHora, oHorasList.Count);
    // Quedarse con el primier elemento de la lista...
    for i := 0 to (oHorasList.Count - 1) do begin
      // datos de la primera ciudad
      TlkJSONBase(oHora) := oHorasList.Child[i];
      // datos básicos
      ATiempoProxHoras.TiempoHora[i].dt_text := GetAsString(oHora.Field['dt_txt'].Value);
      // convertir fecha-Hora
      Str := ATiempoProxHoras.TiempoHora[i].dt_text;
      ATiempoProxHoras.TiempoHora[i].dt := EncodeDateTime(
        StrToIntdef(Copy(Str, 1, 4), 0),
        StrToIntdef(Copy(Str, 6, 2), 0),
        StrToIntdef(Copy(Str, 9, 2), 0),
        StrToIntdef(Copy(Str, 12, 2), 0),
        StrToIntdef(Copy(Str, 15, 2), 0),
        StrToIntdef(Copy(Str, 18, 2), 0), 0);
 
      // Load Main
      TlkJSONBase(oMain) := oHora.Field['main'];
      ATiempoProxHoras.TiempoHora[i].Main.temp := GetAsFloat(oMain.Field['temp'].Value);
      ATiempoProxHoras.TiempoHora[i].Main.tempmin := GetAsFloat(oMain.Field['temp_min'].Value);
      ATiempoProxHoras.TiempoHora[i].Main.tempmax := GetAsFloat(oMain.Field['temp_max'].Value);
      ATiempoProxHoras.TiempoHora[i].Main.pressure := GetAsFloat(oMain.Field['pressure'].Value);
      ATiempoProxHoras.TiempoHora[i].Main.humidity := GetAsInteger(oMain.Field['humidity'].Value);
 
      // Load weather
      TlkJSONBase(OWList) := oHora.Field['weather'];
      TlkJSONBase(oWeather) := oWList.Child[0];
      ATiempoProxHoras.TiempoHora[i].Weather.id := GetAsInteger(oWeather.Field['id'].Value);
      ATiempoProxHoras.TiempoHora[i].Weather.main := GetAsString(oWeather.Field['main'].Value);
      ATiempoProxHoras.TiempoHora[i].Weather.desc := GetAsString(oWeather.Field['description'].Value);
      ATiempoProxHoras.TiempoHora[i].Weather.icon := GetAsString(oWeather.Field['icon'].Value);
    end;
 
    Result := True;
  except
    // si hay error, FALSe
    Result := False;
  end;
end;

Leer más…

Categories: Android, Código, Delphi, iOS, JSON Tags: , , ,

Actualización de PAServer (4.0.1.10)

miércoles, 18 de septiembre de 2013 Sin comentarios

Platform Assistant Server (PAServer) es la utilidad en línea de comandos para Windows y Mac OSX.  Instalando esta utilidad en un equipo de la misma red que el equipo de desarrollo, permitirá que ambos equipos se comuniquen, de forma que se puede desarrollar en otras Imagen653plataformas (OSX).

Utilizando PAServer podrá realizar un “debug remoto” de la aplicación.

La instalación de PAServer cuando se configura el entorno para trabajar con OSX/iOS la expliqué en detalle en una entrada anterior. concretamente en esta, junto con el resto de pasos para configurar el entorno de XE4 (que son válidos para XE5).

Si lo hicisteis en su momento, y ahora habéis probado con la trial de Delphi XE5 (como yo) habréis obtenido un error en la conexión, debido a la versión del PAServer.

La dirección de descarga de la nueva versión (compatible con XE5) es la siguiente.

<Descarga PAServer>

Esta versión de descarga a día de hoy es la v. 4.0.1.10.

Categories: Delphi, iOS, OSX Tags: , ,

Últimos videos en Embarcadero Tech…

viernes, 21 de junio de 2013 4 comentarios

Imagen546Para los que no lo conozcáis, Embarcadero Tech posee un canal de Youtube dónde se publican videos sobre las últimas versiones y novedades de los productos de embarcadero.

Complementa los otros recursos que se publican desde la empresa, pero este (al menos para mi) tiene algo especial, porque el carácter de las publicaciones, dado que son videos son especialmente prácticos y gráficos. Recordad aquel refrán que dice… “más vale una imagen que 1000 palabras” (pues aquí lo podemos aplicar a los vídeos).

Leer más…

Categories: Delphi, iOS, XE4 Tags: , ,

Firemonkey Mobile Application (XE4 / iOS)

viernes, 24 de mayo de 2013 11 comentarios

Continuando con la última entrada dónde vimos cómo configurar el entorno de desarrollo para generar aplicaciones móviles para iOS, vamos a realizar una primera aplicación paso a paso para ver algunas funcionalidades básicas.

En este caso testearemos el componente TWebBrowser, que hasta esta versión sólo estaba disponible para la plataforma Windows, y que ahora ya se puede utilizar en iOS.

Para empezar seleccionamos el tipo de proyecto “Firemonkey Mobile Application – Delphi”. Una vez en el asistente podemos escoger (y probar) entre los diferentes tipos de aplicaciones prediseñadas, que ya nos crearán un esqueleto de una “aplicación tipo” con unos determinados componentes, según lo que escojamos.

Imagen504

Leer más…

Categories: Delphi, iOS, XE4 Tags: , , ,

Configuración del entorno de trabajo iOS/OSX (Delphi XE4)

lunes, 29 de abril de 2013 22 comentarios

Las últimas versiones de Delphi incluyen, tal y como podéis leer en las características del producto, soporte para dispositivos iOS y OSX (MAC). Hace tiempo que deseaba probar estas características, así que aprovechando que estos día he tenido acceso a una máquina Apple, he probado a “poner en marcha” el entorno de desarrollo y a hacerlo funcionar.

En general el proceso ha sido más sencillo de lo que pensaba (aunque tal vez también con más pasos de los que esperaba…). Hay que realizar varias operaciones, pero en sí, ninguno complicada.

Todavía no dispongo de un dispositivo iOS, así que me he tenido que quedar (conformar) en el punto de ejecutar la aplicación en OSX (en la versión 10.8) utilizando los simuladores correspondientes a estos dispositivos.

Según la documentación necesitamos tener instalada una versión OS X 10.7 Lion o 10.8 Mountain Lion en nuestro MAC. A partir de ahí, para dispositivos móviles, es necesario contar con una versión iOS 5.1 o superior.

Leer más…

Categories: Delphi, iOS, OSX, XE4 Tags: , ,