Se acerca Freepascal 2.4.0 / Lazarus 0.9.28

Como nos comenta el amigo Vincent Snijders en la lista de correo de lazarus en su version en ingles se han habilitado las ramas en el svn para centrar el esfuerzo en la correccion de errores.

La direccion para freepascal es :

http://svn.freepascal.org/svn/fpc/branches/fixes_2_4/

y para lazarus :

http://svn.freepascal.org/svn/lazarus/branches/fixes_0_9_28/

Tambien se pueden usar los snapshots si no se quiere usar el svn y reportar todos los errores que se encuentren para realizar una buena version estable ;)

ACTUALIZACION : Se me paso por alto comentar que Jesus Reyes hizo lo propio para la lista de correo en castellano

Lazarus 0.9.26.2 en la calle!

Despues de 5 meses del lanzamiento de la version 0.9.26 tenemos una nueva version estable que viene con fpc 2.2.2 y con muchos errores corregidos.

Vincent Snijders nos hace el anuncio del lanzamiento en el foro y en la lista de correo . A continuacion pequeño extracto de rigor de los cambios mas importantes :

Highlights / Major changes:
IDE:
====
* Application icon has been added to the Project Options.
* Environment, Editor and CodeTools options has been merged into one dialog. A new api is introduced to add custom ide settings into ide options dialog.
* Application icon, Version information and XP manifest are merged into one .rc file which has the same name as project main file (.lpi)
* .lrs files can now be saved/auto created in the project output directory (disable in Project / Project Options / Miscellaneous / save .lrs file in the output directory). This way you no longer need to store the .lrs files in the svn/cvs repository, if you build your application with Lazarus or Lazbuild. They are still required if compile using Makefile that calls fpc directly.

LCL:
====
* TPen has been improved. For more information, see http://lazarus-dev.blogspot.com/2008/11/new-tpen-properties.html
* TColorBox, TColorListBox has been rewritten. Now they are more delphi compatible.
* TColorDialog.CustomColors has been added.
* Implemented TCalendar on Windows CE.

Y para terminar la release notes :) 

Muerte a lazSVN , larga vida a lazSVNPkg!

En un post anterior comentaba mi intecion de portar delphisvn a fpc/lazarus manteniendo la misma filosofia pero como iba algo apretado de tiempo hice publico el inicio del port por si alguien se animaba a ir avanzando y de paso me animaba a mi ;)

Durante este tiempo se ha subido a la rama trunk de lazarus ( desde la revision 17160, hace casi un mes ) un paquete llamado lazSVNPkg que ya hace lo que iba a hacer lazSVN con la diferencia de que LazSVNPkg es un wrapper del binario svn sin ningun interes en los bindings.

La verdad es que pinta muy bien ( solo lo he probado sobre linux ) pero se ve que Darius Blaszyk esta activo y con ganas de madurar el proyecto :)

Podeis encontrar informacion en el wiki de lazarus en la pagina referente a LazSVNPkg.

PD : Con esta nota doy por estancado el desarrollo de los bindings hasta nueva orden.

miniTip : Extendiendo el TIdleTimer de Lazarus

Escenario: Se requiere lanzar un proceso cada cierto tiempo que la aplicacion este sin hacer nada, o sea, en Idle :)

Como TIdleTimer no tiene “memoria” creamos nuestra clase TContador ( en honor a nuestro campeon ;P ) dotandole de memoria.

{TContador}
TContador = class(TIdleTimer)
procedure Contando(Sender :TObject);
procedure Inicio(Sender :TObject);
procedure Fin(Sender :TObject);
private
  Acum, tMax : Integer;
public
  constructor Create(AOwner : TComponent ;Maximo : Integer; curr : TCurrante);
end;

Implementamos el constructor…

{TContador}
constructor TContador.Create(AOwner : TComponent; Maximo : Integer);
begin
  inherited Create(AOwner);
  Self.Enabled:=false;
  Self.OnStartTimer:=@Inicio;
  Self.OnStopTimer:=@Fin;
  Self.OnTimer:=@Contando;
  Self.Acum:=0;
  Self.tMax:=Maximo;
  Self.AutoEnabled:=true;
end;

Cada ver que se produzca el evento OnStartTimer pondremos el acumulador a 0

procedure TContador.Inicio(Sender :TObject);
begin
  Self.Acum:=0;
  DebugLn('Inicio');
end;

Aqui simplemente queria saber cuando se lanza OnStopTimer ;)

procedure TContador.Fin(Sender :TObject);
begin
  DebugLn('Fin');
end;

Este proceso se ejecuta cuando la aplicacion esta Idle y lanza el proceso cuando el tiempo acumulado supera el tiempo maximo.

procedure TContador.Contando(Sender :TObject);
begin
  Inc(self.Acum);
  if self.Acum > self.tMax then
    begin
      Self.Enabled:=false;
      Self.Enabled:=true;
      DebugLn('Lanzamos proceso');
    end;
  DebugLn('Contando - ' + IntToStr(self.acum));
end;

Proceso sencillo aunque cuando eres un newbie no aparece en la mente de manera inmediata

lazSVN , Subversion bindings para freepascal/lazarus

La idea inicial de todo esto era proveer a Lazarus de un paquete que le hiciera capaz de interactuar con un servidor Subversion en relacion al proyecto con en el que se esta trabajando. Esto no es nada nuevo ya que IDE’s como SharpDevelop o tantos otros que ahora mismo no me vienen a la cabeza ya disponen de esta feature ;P

Antes de empezar a hacer nada comprobe que no hubiera nada hecho ( para no reinventar la rueda ) y con lo unico que me encontre fue con delphisvn, un proyecto con la misma funcionalidad que se requiere pero para Delphi.

Por el camino descubri la existencia de un componente svn hecho por Vincent que lo que hace es usar el output del comando svn, una muy buena manera de no complicarse demasiado con los bindings. El mismo me comento que Ido estaba tambien con los bindings aunque tampoco lo tiene terminado.

Lo “unico” que he hecho con delphisvn ha sido importar el paquete, quitar la dependencia a los bindings apr que vienen y usar los bindings de freepascal e ir quitando la dependencia a Windows. Publico el proyecto sin terminar por que se me avecinan unos meses intensos y me parece una idea interesante como para caer en saco roto.

Ahora mismo la intencion es mantener los bindings de Subversion y hacer un miniBrowser, mas que nada para testear. Si alguien se anima se puede bajar el codigo de la siguiente manera o con vuestro cliente de SVN favorito ;)

svn co svn://alasombra.net/lazSVN lazSVN

Si necesitais algo en referencia al proyecto o a cualquier otra cosa hacerme llegar unas lineas a mi correo en gmail.com

Instalar la ayuda offline en Lazarus

Con este articulo sabras como integrar la documentacion HTML existente sobre la  Run-Time Library (RTL) , la Free Component Library (FCL) y la Lazarus Component Library (LCL) en Lazarus.

Primero que nada nos bajamos el archivo ftp://ftp.freepascal.org/pub/fpc/dist/docs-2.2.2/doc-html.zip y lo descomprimiremos en el directorio $LAZARUS_DIR/docs/offline que previamente hemos creado.

A esa documentacion le falta la referente a la LCL con lo que tenemos varias opciones para obtenerla.

Si eres usuario de Linux ( imagino que para MacOS tambien sirve ) puedes ejecutar el script update_lcl_html.sh que se encuentra en $LAZARUS_DIR/docs/html. Al terminar el proceso habra creado el directorio lcl con la documentacion que moveremos a nuestro $LAZARUS_DIR/docs/offline .

Si eres usuario de Windows ( o quieres mantener actualizada tu documentacion HTML ) puedes descargarte el archivo ftp://ftp.freepascal.org/pub/lazarus/fpc-lazarus-doc-html-20080920.tar.bz2 que viene con la documentacion de la RTL, FCL y LCL . Fijarse que se actualiza cada dia, con lo que mañana ya no servira el link asi que tendreis que entrar a mano en ftp://ftp.freepascal.org/pub/lazarus/ y bajaros el fpc-lazarus-doc-html-*.tar.bz2 correspondiente ;)

Bien, en este punto ya tenemos toda la estructura con la documentacion offline en nuestro ordenador, ahora solo falta configurar Lazarus.

Para ello accedemos al menu “Ayuda > Configurar Ayuda”. En la pestaña “General” ponemos en el “FPC Doc HTML Path” el directorio $LAZARUS_DIR/docs/offline y en la pestaña “Base de Datos” , seleccionamos RTLUnits y en BaseURL ponemos el directorio $LAZARUS_DIR/docs/offline/rtl y asi con FCLUnits y LCLUnits con sus directorios correspondientes.

Ahora para comprobar que lo hemos hecho bien vamos al editor de codigo fuente, seleccionamos TForm (por ejemplo) apretamos F1 y voilà , se nos abre la ayuda local en el navegador :)