Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/vhosts/cadetill.com/domains/cadetill.com/public_html/wp-content/plugins/qtranslate-x/qtranslate_frontend.php on line 497

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/vhosts/cadetill.com/domains/cadetill.com/public_html/wp-content/themes/suffusion/functions/media.php on line 666

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/vhosts/cadetill.com/domains/cadetill.com/public_html/wp-content/themes/suffusion/functions/media.php on line 671

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/vhosts/cadetill.com/domains/cadetill.com/public_html/wp-content/themes/suffusion/functions/media.php on line 684

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/vhosts/cadetill.com/domains/cadetill.com/public_html/wp-content/themes/suffusion/functions/media.php on line 689

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/vhosts/cadetill.com/domains/cadetill.com/public_html/wp-content/themes/suffusion/functions/media.php on line 694
delphi – Página 5 – El blog de cadetill
sep 182012
 

Stack Exchange Q&A site proposal: Stack Overflow in Spanish Buenas,

Hace poco más de un mes hice una entrada referente a una propuesta realizada por nuestro compañero Juan Antonio (o jachguate como se hace llamar en la red) en el Area51 para la creación de un StackOverflow en español. Para que no sea una propuesta que caiga en saco roto, hoy vuelvo a escribir sobre ella y animar a la gente que se una a la propuesta.

Vamos a ver qué tal anda el proyecto a estas alturas. Las normas de Area51 dicen que, para que un proyecto supere el estatus de definicion, éste deve cumplir unos requisitos:

  1. Tener 60 seguidores: a fecha de hoy estamos en 71, así que esta meta está superada (en principio, luego veremos que aun faltan).
  2. Tener 40 preguntas de ejemplo con al menos 10 votos netos cada una (un voto neto es la suma entre votos positivos y negativos):  aquí es donde andamos cojos dado que sólo tenemos 14 preguntas que cumplan con esta condición.

Dado que necesitamos 40 (o más) preguntas con 10 votos (ésto es un mínimo de 400 votos) y cada seguidor puede votas a 5 preguntas, esto implica que necesitamos al menos 80 seguidores. Dado que hay preguntas que tienen más de 10 votos, necesitamos más de 80 segudores.

A los que estéis interesados en el proyecto tenéis que tener esto presente, necesitamos preguntas con 10 votos, pero no hace falta que tengan más de 10! Así que votar por las preguntas que tengan menos de 10 votos 😉

Además, y dado que tenemos 71 seguidores, se podrían haber emitido 355 votos. Si asumimos que no hay votos negativos (que sería lo lógico en este caso) y que se han realizado 172 votos, tenemos a unos 36 seguidores que no han votado ninguna pregunta. Animo a éstos a hacerlo 🙂

Vamos, que ya queda poco para superar esta primera fase!

Nos leemos

sep 122012
 

Buenas,

Estoy aquí de nuevo con otra versión de los componentes GMLib para Delphi/C++ Builder. En esta ocasión no tenemos nuevo componentes (es lo que tiene venir de vacaciones jejejeje), pero al menos he puesto al día los existentes con las nuevas características de la API de Google Maps y les he añadido alguna que otra mejora.

También he incluido un par de librerías OpenSource, la MarkerWithLabel y la StyledMarker. No descarto que en próximas versiones se incluya alguna otra de estas magníficas librerías.

Aquí la lista de cambios:

  • error: algún memory leak corregido (aun queda alguno que miraré de ir corrigiendo) (gracias Donovan)
  • cambio: TGMCircle -> modificados métodos Set y ShowElement para que usen el nuevo método ChangeProperties heredado de TLinkedComponent
  • cambio: GMFunctions -> añadidas nuevas funciones de transformación de tipos
  • cambio: TGMGeoCode-> añadida propiedad booleana PaintMarkerFound. A true se generarán automáticamente los marcadores (si hay un TGMMarker asociado) (por Luis Joaquin Sencion)
  • cambio: TGMGeoCode-> en DoMarkers se codifica la URL generada en UTF8 para evitar problemas con carácteres especiales (ñ, acentos, ….)
  • cambio: TGMMap.TNonVisualProp -> añadida propiedad MapMaker. A true si queremos que los mosaicos de Map Marker se muestren en lugar de los normales
  • cambio: TLatLngEvent -> los eventos de este tipo ahora reciben un nuevo parámetro, X y Y, de tipo Real, con la información del punto (X,Y)
  • cambio: TLinkedComponent -> añadida propiedad booleana ShowInfoWinMouseOver. A true, se mostrará el InfoWindows mientras el ratón esté encima del objeto. Actualmente válido sólo para TMarker (por Luis Joaquin Sencion).
  • cambio: TLinkedComponent -> añadido método protegido ChangeProperties para centralizar en un sólo sitio el cambio de las propiedades de los objectos.
  • cambio: TGMMarker -> modificados métodos Set y ShowElement para que usen el nuevo método ChangeProperties heredado de TLinkedComponent
  • cambio: suprimida clase TMarkerLatLng. Ahora se usa directamente la clase TLatLng
  • cambio: TMarker -> la pripiedad Position ahora es de tipo TLatLng.
  • cambio: TMarker -> añadida propiedad MarkerType para especificar el tipo de marcador a mostrar (mtStandard, mtColored, mtStyledMarker).
  • cambio: TMarker -> añadida propiedad ColoredMarker para especificar la forma del marcador si MarkerType = mtColored.
  • cambio: TMarker -> añadida propiedad StyledMarker para especificar la forma del marcador si MarkerType = mtStyledMarker.
  • cambio: TGMMarker -> añadido método público LoadFromCSV para una carga masiva de marcadores que estén en un archivo CSV (unos 50 marcadores/seg.).
  • cambio: TGMMarker-> 4 nuevos eventos: OnLoadFile y AfterLoadFile para el procesado del fichero CSV, y OnColoredMarkerChange y OnStyledMarkerChange para el cambio de las propiedades
  • cambio: TGMPolygon -> modificados métodos Set y ShowElement para que usen el nuevo método ChangeProperties heredado de TLinkedComponent
  • cambio: creada clase intermedia (TBasePolyline) entre TLinkedComponent y TPolyline. TPolygon desciende ahora de TBasePolyline.
  • cambio: creada clase intermedia (TGMBasePolyline) entre TGMLinkedComponent y TGMPolyline. TGMPolygon desciende ahora de TGMBasePolyline.
  • cambio: TGMPolyline -> modificados métodos Set y ShowElement para que usen el nuevo método ChangeProperties heredado de TLinkedComponent
  • cambio: TPolyline -> nueva propiedad Icon para definir el tipo de linea de la polilinea.
  • cambio: TGMRectangle -> modificados métodos Set y ShowElement para que usen el nuevo método ChangeProperties heredado de TLinkedComponent

Como siempre, podéis ver más explicaciones y descargar los componentes en su página.

Qué los disfrutéis!

Nos leemos

ago 222012
 

Buenas,

Salgo de mi letargo solamente para daros esta noticia. Imagino que ya la habréis visto en algunos foros/blogs, pero quizás lo que no habéis visto es el vídeo introductorio de las novedades, así que aquí os lo dejo (lo puso el compañero fredycc en DelphiAccess).

También os dejo un enlace a todas las fechas del RAD Studio XE3 World Tour, así como al formulario para incribirse a las que se realizan en España (yo espero ir, así que, a ver si nos vemos).

Nos leemos (o vemos) pronto 😉

ago 142012
 

Buenas,

Hace ya algún tiempo que quería poner esta entrada, pero como ando liado con el tema de la GMLib, lo había estado dejando de lado hasta hoy.

Aun recuerdo cuando, programando en versiones antiguas de Delphi (Delphi 3, 6 y 7), para saber ciertas carpetas de sistema tenías que recurrir al API de Windows, o al manipular carpetas, esas típicas funciones recursivas recorriendolas para listar o saber archivos,….

A partir de Delphi 2010, en el que Embarcadero incluyó la nueva unit IOUtils, estos «dolores de cabeza» terminaron y todas estas funciones que teníamos almacenados en units de «funciones generales» pasan a una mejor vida.

Esta unit tiene tres clases, la TDirectory, la TPath y la TFile, todas ellas repletas de procedimientos y funciones de clase, por lo que no necesitaremos instanciar ningún objeto, facilitándonos, aun más, la programación.

Por ejemplo, si queremos saber la carpeta temporal de Windows, simplemente haremos lo siguiente

uses System.IOUtils;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(TPath.GetTempPath);
end;

O si queremos saber los archivos contenidos en una carpeta

uses System.IOUtils, System.Types;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  Files: TStringDynArray;
begin
  Files := TDirectory.GetFiles('C:\Archivos de programa\Embarcadero\RAD Studio\7.0', '*.*', TSearchOption.soAllDirectories);

  Memo1.Lines.Clear;
  for i := Low(Files) to High(Files) do
    Memo1.Lines.Add(Files[i]);
end;

O si queremos saber la fecha/hora de creación de un fichero

uses System.IOUtils;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(DateTimeToStr(TFile.GetCreationTime('c:\prueba.txt')));
end;

Y así podríamos seguir con cantidad de procedimientos/funciones que nos harán la vida (al menos la de programador) más simple.

Os animo a que reviséis el código fuente de esta unit por dos principales motivos. El primero y fundamental es el de conocer qué hace internamente, qué APIs se lleman,…. Y el segundo para que veáis algunas técnicas de programación que quizás algunos desconozcan (yo el primero hasta que lo vi aquí) como la «referencia a funciones» (ver, por ejemplo, la función «class function TDirectory.DoGetFiles«).

Pues nada, espero que os sea de utilidad.

Nos leemos

 

ago 082012
 

Stack Exchange Q&A site proposal: Stack Overflow in Spanish

Buenas,

Leo en el blog del compañero Neftalí, que otro compañero, jachguate (o Juan Antonio para los colegas jejeje) ha abierto una propuesta en Area51 para crear un StackOverflow en Español.

La verdad es que me parece de lo más interesante para la comunidad hispana y en especial para todos aquellos que el nivel de inglés nos impide hacer uso extensivo de comunidades como stackoverflow.com.

Como dice el compañero Juan Antonio, si no sabes de qué te estoy hablando, te invito a leer esta entrada en su blog, donde lo explica todo, todo y todo 😉

Pasa la voz!!

Nos leemos

ago 072012
 

Buenas,

Antes de bajar la persiana por vacaciones, quiero presentaros una nueva versión de los componentes GMLib para Delphi. Hay bastantes novedades (sobretodo en el mapa al que se le han añadido varias capas -layers-) y un nuevo componente, el TGMDirections. Aquí la lista de las novedades:

  • Nuevo componente, el TGMDirection, para el cálculo de rutas. Dado que es un componente complejo (por el volumen de clases que intervienen -20 clases nuevas-), agradecería comentarios de funcionalidad.
  • Cambio: se translada a la clase base la función GetConvertedString.
  • Nuevo: TGMObjects -> nueva clase que hereda de TGMBase y de la que heredarán clases como TGMLinkedComponent o TGMDirection
  • Nuevo: TGMMaps -> añadida propiedad Layers para el acceso a las capas (layers) de Google Maps como:
    • Panoramio (clase TPanoramio)
    • Traffic (clase TTraffic)
    • Transit (clase TTransit)
    • Bicyclig (clase TBicycling)
    • Weather (clase TWeather)
  • Nuevo: TGMMaps -> añadidos eventos OnWeatherClick y FOnPanoramioClick.
  • Cambio: TGMMaps -> se cambian los métodos xxToStr y StrToxxx para reducir código.
  • Cambio: TGMMaps -> los métodos Printxxxx y SaveToJPGFile usan los métodos de la unidad WebControls.
  • Error: TGMPolyline -> corregido error cuando se intentaba mostrar una polilineasin TLinePoints.
  • Nuevo: Lang -> añadido el idioma francés (gracias Stéphane).
  • Nuevo: TWebControl -> Se añade método SaveToJPGFile.
  • Nuevo: TSizeable -> añadido método Assign.
  • Error: TSizeable -> cuando no era circular, el radio crecía más que el máximo.
  • Nuevo: TAddressComponent -> añadido método Assign.
  • Nuevo: TAddressComponentsList -> añadido método Assign.
  • Nuevo: TGeometry -> añadido método Assign.
  • Nuevo: TGeoResult -> añadido método Assign.
  • Nuevo: TGoogleBusiness -> añadido método Assign.
  • Nuevo: TGMGeoCode -> se sobreescribe el método Notification para controlar la propiedad Marker.
  • Cambio: TGMGeoCode -> se trasladan los métodos xxToStr y StrToxxx a la clase TTransform de la unidad GMFunctions.
  • Nuevo: TGMGeoCode -> añadido método Assign.
  • Nuevo: TTransform -> nueva clase con transformaciones xxxToStr y StrToxxx para transformar las propiedades tipo Set a string y de string a la propiedad tipo Set.
  • Nuevo: General -> el proyecto se ha dividido en 2 packages para poder compilar en 64 bits en XE2.
  • Nuevo: General -> Compilado para Delphi 2009 y C++ XE2

Como siempre, podéis ver más explicaciones y descargar los componentes en su página.

Qué los disfrutéis!

Nos leemos

jul 122012
 

Buenas,

Pues nada, ya estamos aquí con una nueva versón de la GMLib. Esta nueva versión viene con bastantes cambios y, como no, con un componente nuevo. Aquí tenéis la relación de las novedades:

  • Nuevo componente, el TGMGeoCode, para poder realizar Geocodificaciones (pasar de una dirección a una lat/lng o de una lat/lng a una dirección).
  • Error:  TGMBaseInfoWindow -> la función GetConvertedString ahora tiene en cuenta la comilla simple.
  • Cambio: TGMCircle -> la propiedad Radius pasa a ser un entero.
  • Nuevo: TGMCircle -> añadida propiedad AutoResize.
  • Error: TLatLng -> corregido error en la función LatLngToStr (gracias Erasmo).
  • Cambio: TLatLng -> se controla la posible excepción en la función StringToReal (cambio de string a real).
  • Cambio: TLatLngBounds -> se suprime la función GetCenter.
  • Error: TGMMarker -> se controlan la comilla simple en la propiedad Title.
  • Nuevo: TGMPolyline -> añadida propiedad CountLinePoints.
  • Nuevo: TLinePoint -> añadido método ToStr.
  • Nuevo: TLinePoint -> añadida método StringToReal.
  • Nuevo: TRectangle -> añadido método GetCenter.
  • Nuevo: TGMMap -> añadidos eventos OnActiveChange, OnIntervalEventsChange y OnPrecisionChange.
  • Error: TGMMap -> corregido error en RemoveLinkedComponent cuando se intentaba suprimir un objeto sin estar la lista creada.
  • Cambio: TGMMap -> se controlan los métodos Set de las propiedades Zoom y MapType para actualizar el mapa automáticamente.
  • Cambio: TGMMap -> Zoom, MaxZoom y MinZoom se limitan al rango de 0 a 15
  • Nuevo: TLinkedComponent -> se añade la propiedad Text (visible a todos sus descendientes menos a TMarker porque ya tiene la propiedad Title).
  • Nuevo: TGMLinkedComponent -> añadida propiedad Count.
  • Error: cuando había figuras de diferentes tipos juntas o superpuestas, daba un error de JavaScript al pasar el ratón sobre ellas (gracias Erasmo).
  • Nuevo: mega demo que incluye la gestión de todos los componentes.

Como siempre, más información en la página de los componentes.

Qué los disfrutéis

Nos leemos

jun 262012
 

Buenas,

Siguiendo con los GMLib, hoy os traigo la versión 0.1.4 Pre-Alpha, con los siguientes cambios y novedades:

  • Nuevo componente, el TCircle. Con este componente ya terminamos con las figuras.
  • Nuevo: se ha ampliado la funcionalidad del TGMMap haciéndolo imprimible mediante los métodos PrintNoDialog, PrintWithDialog, PrintPreview y PrintPageSetup, y también la posibilidad de guardar el mapa a un JPG mediante el método SaveToJPGFile.
  • Cambio: cambios en el JavaScript del mapa para evitar duplicidad de código.
  • Error: corregido error en el método LatLngToStr de la clase TLatLng (gracias Shaun)

Como siempre, más información en la página de los componentes.

Que los disfrutéis

Nos leemos

jun 212012
 

Buenas,

Hoy os traigo una nueva versión de los componentes GMLib, la versión 0.1.3 Pre-Alpha, con bastantes cambios internos y novedades:

  • Nuevo componente, el TRectangle que, como su nombre indica, no es más que un rectángulo.
  • Cambio: se ha cambiado la carpeta destino de los DCU. Ahora, cada versión de Delphi tiene la suya.
  • Nuevo: se ha añadido el evento OnChange en la clase TLatLng.
  • Nuevo: se ha añadido el método público StringToReal en la clase TLatLng. Este método tiene en cuenta la configuración regional en el momento de hacer el cambio. Con esta función se intenta corregir los problemas que había entre los países con diferente configuración regional.
  • Nuevo: se ha añadido el método GetCenter en la clase TLatLngBounds.
  • Cambio: se han publicado las propiedades NE y SW de la clase TLatLngBounds.
  • Nuevo: se ha añadido la propiedad Tag (entero) a la clase TLinkedComponent (por lo que afecta a todos los CollectionItems heredados de la misma como TMarker, TPolygon,….).
  • Nuevo: se ha añadido la propiedad FObject (TObject) a la clase TLinkedComponent.
  • Nuevo: se han añadido métodos protegidos (SetProperty) en la clase TLinkedComponent para generalizar el cambio de las propiedades y evitar la duplicidad de código.
  • Nuevo: se ha añadido la propiedad Icon al TMarker para poder especificar un icono a mostrar (en lugar del estándar). Éste puede ser un archivo en el PC o una imagen en la web. El componente lo que hace es comprobar si existe el dato especificado como archivo y, en caso de no existir, asume que es una URL (no me he complicado mucho la vida en hacer muchas comprobaciones). En blanco para la imagen por defecto.
  • Nuevo: se ha añadido el evento OnIconChange a la clase TGMMarker.
  • Cambio: se han cambiado todos los métodos Set de las clases descendientes de TLinkedComponent para evitar la duplicidad de código y hacer las llamadas a los nuevos métodos de TLinkedComponent (SetProperty).

Como siempre, más información en la página de los componentes.

Que los disfrutéis

Nos leemos

may 292012
 

Buenas,

Sigo con las nuevas actualizaciones de los componentes, hoy presentando la 0.1.2 Pre-Alpha. Las novedades de esta nueva versión son las siguientes:

  • Un nuevo componente, el TGMPolygon. Éste es como el TGMPolyline pero con la particularidad que el último punto se unirá con el primero.
  • Bug: corregido error en TGMMarker que hacía que al cambiar alguna de sus propiedades diera un error de JavaScript.
  • Cambio: cuando cambia la lat/lng de un TLinePoint, se actualiza en el mapa.
  • Bug: implementado SetPath en JavaScript.

Como siempre, más información en la página de los componentes.

Que los disfrutéis

Nos leemos