Buenas,
Vimos en un mensaje anterior cómo funcionaban las clases creadas para manejar la estructura JSON devuelta por el API de Google Maps. Ahora veremos cómo usarlas en una aplicación.
Para el ejemplo crearemos una aplicación nueva, pondremos un TEdit (eDireccion) para introducir la dirección a buscar, un TButton (bSearch) para realizar el proceso, un TMemo (mJson) para visualizar los datos recibidos – estructura JSON -, y un TValueListEditor (vlData) para visualizar el contenido del JSON de una forma más amigable.
A nivel de código, vamos a definir una variable de tipo TGeoCode en la parte privada del objeto TForm y, también en la misma sección, definiremos los manejadores de los eventos de la variable declarada que queramos manejar, en este caso los de «After»
private GC: TGeoCode; procedure AfterGetData(Sender: TObject; AllData: string); procedure AfterGetValues(Sender: TObject; AllValues: TStrings);
Otra cosa que haremos es, o bien sobreescribir constructor y destructor para crear y liberar el objeto GC o bien usar los eventos OnCreate y OnDestroy del formulario. Personalmente tengo la costumbre de sobreescribir los métodos, así que vamos a ello.
Primero la declaración (en la parte pública, claro está)
public constructor Create(aOwner: TComponent); override; destructor Destroy; override;
Y ahora la implementación (aunque obvia para muchos)
constructor TForm1.Create(aOwner: TComponent); begin inherited; // creación del objeto GC := TGeoCode.Create; // asignación de los eventos GC.AfterGetData := AfterGetData; GC.AfterGetValues := AfterGetValues; eDireccion.Text := ''; mJson.Lines.Text := ''; end; destructor TForm1.Destroy; begin if Assigned(GC) then FreeAndNil(GC); inherited; end;
Lo que haremos en los eventos no es más que rellenar los componentes que hemos puesto en pantalla. En el AfterGetData rellenaremos el memo con la estructura JSON devuelta por el API de Google Maps y en el AfterGetValues rellenaremos el TValueListEditor.
AfterGetData tiene el parámetro AllData que contiene la estructura JSON, así que será una simple asignación.
AfterGetValues tiene el parámetro AllValues de tipo TStrings que contiene una lista formateada con los diferentes valores del estilo propiedad=valor, vamos, lo que necesita cualquier TValueListEditor para ser rellenado, así que también será una sencilla asignación.
procedure TForm1.AfterGetData(Sender: TObject; AllData: string); begin mJson.Lines.Text := AllData; end; procedure TForm1.AfterGetValues(Sender: TObject; AllValues: TStrings); begin vlData.Strings.Text := AllValues.Text; end;
Y para terminar sólo nos queda ver el código del botón de búsqueda que, por otra parte, será algo muy sencillo dado que la clase se encarga de todo
procedure TForm1.bSearchClick(Sender: TObject); begin tsPlaces.Tabs.Clear; GC.Clear; GC.Direccion := eDireccion.Text; GC.Execute; end;
Con esto ya tenemos el programa terminado y, el usuario podrá ver de forma clara los resultados devueltos por el API de Google Maps.
Puedes descargarte la implementación de lo que llevamos explicado aquí.
Continuará…
Nos leemos