¡Ruido de campanas!

agosto 31, 2010 en Delphi, Noticias, Noticias Delphi, Ofertas, Presentaciones, Promociones

¡Ruido de campanas!.

Antaño en los pueblos, si existían eventos importantes, se podía escuchar el tañir incesante de las campanas, rasgando el infinito cielo. ¡Talán! ¡Talán! ¡Talán!… Los vecinos se asomaban a las balcones y ventanas, a ver que sucedía. Pudiera ser, incluso, que  les sobresaltasen las alegres y sonoras tracas y los cohetes. La gente, engalanada, salía a pasear por las calles para compartir aquel evento extraordinario. Los niños jugaban confiados y las risas y gritos de sus travesuras realzaban la belleza de la mañana. Un paisaje bucólico donde las palomas eran dueñas de las plazas y revoloteaban confiadas. Dia de fiesta…

:-)

Sinceramente, no creo que sea este el caso de hoy… que ha salido Rad Studio XE y ya se encuentra disponible en Embarcadero. Pero no deseo ser agorero y aguafiestas, sino todo lo contrario. La realidad se nos muestra bajo mil interpretaciones, y los que ven hoy en las campanas días gloriosos y festivos, comparten mesa y mantel con quienes solo escucharon las campanas y sirenas de los coches de bomberos apagando algún fastuoso incendio. Quienes creyeron reconocer a la gente paseando relajada, parten hoy el pan con quienes adivinaron la manifestación y el tumulto…

Somos libres de interpretar la realidad. Tal es la grandeza humana. 

Si quereis acceder a la información sobre el evento de lanzamiento de esta nueva versión:

Rad Studio XE

También hay disponibles 3 videos que recogen las novedades principales y que han sido publicados durantes estas semanas anteriores para que los futuros usuarios o compradores fueran conociendolas.

Preview #1 – Coding and Productivity

http://www.embarcadero.com/ch-e-video.php?file=75-12v5vmJ2yB45TvKA4R62gHp7JbcGzxiw-HD.mp4&vid=346 (link al video en español)

Preview #2 – Optimizing and Automating

http://www.embarcadero.com/ch-e-video.php?file=72-uHpwQMEUe9Wp02Dh92znw8b8qL6ulsf1-HD.mp4&vid=377 (link al video en español)

Preview #3 – Multi-tier, Cloud and Web

http://www.embarcadero.com/ch-e-video.php?file=75-zqhQqsFcx158aazs1fC3kUUy6RLpK5Y7-HD.mp4&vid=378 (link al video en inglés)

No me saques los colores

agosto 27, 2010 en Advertencia, Artículos, Delphi, Entrada Diario, Taller práctico

¿Qué tal estáis…?

Volvemos tras un verano de calor… Esta misma noche fue una de las mas calurosas que recuerdo. De hecho, ayer mismo, el termómetro se acerco a los 44º y la tarde fue asfixiante. La disfruté visitando una exposición temporal sobre arqueología Egipcia que se celebra en Alicante, en el Museo Arqueológico Marq, y aunque la capital mantiene unas temperaturas bastantes suaves y agradables por la cercanía del mar, hacía calor. Muy recomendable esta exposición si estáis en la zona, ya que no es demasiado habitual para nosotros ver de cerca una momia y conocer los ritos funerarios de la fascinante y enigmática civilizacion egipcia (El enigma de la momia). Aunque, para ser justos, el visitante se queda con ganas de mas, y no imagino lo agradable y enriquecedor que puede ser conocer el total de lo expuesto en el Louvre, puesto que lo visto en Alicante es tan solo una parte pequeña.

Pero dejemos las momias por el momento y permitid que me remonte varios días atrás, durante la semana anterior, cuando estaba pensando con qué iba a abrir el blog, tras las vacaciones…  ;-)

Mentiría si os dijera que no me sobresaltó el móvil. Mientras estamos concentrados en resolver nuestras tareas rutinarias,  a veces perdemos la  noción temporal y espacial, abstraídos en seguir el hilo al código escrito y entender lo que en ese momento falla, o no hace lo que deseamos, que también sucede. Así que al volver a la realidad, tras la sacudida de la melodía marchosa que había alertado a media oficina, lo primero que se escuchó a medida que iba acercándome el auricular a mi oreja, era una serie de gruñidos ininteligibles que iban creciendo, hasta obligarme a retirarlo prudencialmente. No estaba demasiado contento el interlocutor desconocido o quizás se hubiera atragantado en un almuerzo improvisado. :-?

-grrrrrrrrr… me cago en su p. madre….  me cago en tooo… en tooooo… grrrrrrrrrrr… -iba adivinando en el tumultuoso sonido de mi auricular. Se oían de fondo como golpes secos que yo imaginaba eran los puños de aquella persona contra alguna mesa…

-¿si..? ¿Pero quién eres… ?- pregunté esperando quizás que fuera alguna equivocación o malentendido o cruce de lineas.

-¡Manuel!… -respondió atropelladamente el desconocido- ¡qué soy yo!… Manuel… -¿Dónde estás ahora? ¿Puedes hablar?

-Joder… -asentí con la cabeza como si Manuel pudiera verme- Sí puedo hablar. ¿qué pasa?

-Nada tío… ¡Que estoy intentando cambiar el color del título de una columna del dbgrid y me dice que naranjas de la china… ¡Qué asco…!. Cuatro horas perdí ayer en la empresa con esta tontería. ¡Increible! Si tuviera cerca a esos de la Barca les… (ruido de fondo, ggggggererereerttweqwqfgafsdsfoooofsdfoafodrrgrgrgrgrgrgrgr)…

Manuel aumentaba su indignación a medida que me narraba sus cuitas.

-¡No jodas! -exclamé con aspavientos.

Y ahí se quedó la cosa…

Así que tras colgar, mi curiosidad por ver cual era el problema iba creciendo. Revisé la nota que había escrito y la guarde en la cartera hasta que al llegar a casa pudiera ver de cerca el problema. Con independencia de que no tenga mayor importancia, pues a fin de cuentas es trivial que el usuario no pueda cambiar el color del titulo de la columna de un tdbgrid, no parece algo de vida o muerte. Eso si, sí parece cierto que la mayoría de las veces, resolvemos cosas de esa forma. Otras veces ni siquiera se resuelven y nos vemos obligados a tomar atajos o parchear para evitar los problemas, o buscamos componentes que resuelvan eso que el que tenemos en las manos no nos da. A veces somos nosotros los que estamos a un lado de la linea y en ocasiones estamos en el otro lado. Y los foros y las relaciones de amistad cubren para ser justos, muchos de estos problemas que o bien no están bien documentados ni registrados o bien forman parte de expedientes X, dignos de Iker Jimenez en 4º Milenio…  :-D

(por cierto… y hablando de otra cosa y ya que estáis aquí:  ya veis que se ha cambiado el tema de wordpress en el blog… en mi pensamiento: el móvil y los posibles conexiones al blog desde éstos, en un Mundo donde cada vez tiene mas peso esta posibilidad. Ha supuesto perder algo de estética. El tema anterior me gustaba). También ha tenido peso intentar conseguir menor tiempo de carga de la página. Eliminar pluggins que retrasaban la carga de la página: ¿seguridad frente a velocidad?, etc. etc. Aunque ni yo mismo me lo crea, llevo varias semanas con estos detalles. ¡Increible, che!. También y ya para acabar, ando en el intento de enlazar mi FaceBook con el blog, que me permitirá compartir las entradas también desde la cuenta que he abierto a tal efecto. Ya he visto que existen bastantes pluggins aunque por problemas puntuales de Facebook todavía no he podido crear una aplicación para activar el conector).
Veamos… ¿por dónde iba? Ahhh. Sí.

Lo del color del título de la columna en el componente TDBGrid debe ser una tontería pero por lo que he podido ver funcionaba hasta Delphi 2007. No lo he probado en Delphi 2009, pero lo que es en Delphi 2010 parece que da problemas. Introdujeron algunos cambios para incorporar los temas de windows y los gradiantes, con el fin de mejorar la estética de la rejilla de datos, pero lo que se consigue es que con el flag gdsClassic todas las columnas se repinten del color fijo y no del color persistente individual.

Cuando llegué a casa, y con ánimo de echarle una mano a Manuel, escribí unas lineas muy sencillas de código para reproducir el problema, y las probé tanto en Delphi 2007 como en Delphi 2010.

Descargar el código: Aquí.

Esta es una imagen que aparecen las dos ventanas que estaba contrastando.

captura del problema


procedure TForm1.bnColorClick(Sender: TObject);
begin
Rejilla.Columns[0].Title.Color:= clRed;
end;

Pues lo dicho. Algo tan sencillo como eso, no funcionaba en Delphi 2010 tras los cambios. O por lo menos, yo tampoco lo sabía corregir, si es que era un tema de cambiar alguna de las opciones del componente.

Lo siguiente… ir poniendo puntos de parada para intentar comprender cual era el problema y de lo visto, creo entender que una de las lineas introduce a piñon el color fijo (fixedcolor), error que se produce al invocar la siguiente llamada:

DrawCellBackground(TitleRect, FixedColor, AState, ACol, ARow – FTitleOffset);

dentro del código del procedimiento

procedure DrawTitleCell(ACol, ARow: Integer; Column: TColumn; var AState: TGridDrawState);

Éste (DrawTitleCell), declarado en el interior del método  TCustomDBGrid.DrawCell, queda acotado al ámbito local del mismo.

A lo tonto a lo tonto (expresión que expresa que aunque parezca increible sucedió  :-D) me zampé parte de la tarde y de la noche jugueteando con esta tontería.  ;-)  Acompañado de un vaso grande de Horchata, muy rica, extraordinariamente rica, y de varios fartons y congrets, deliciosos… Ummmmmmmm.. (me puse como el tio quico!!!!!!) .

(*) Fartons (una imagen para que sepais que es un farton)  ;-)

Y resolví finalmente por crear un descendiente de la clase TDBGrid añadiendo un método que  pudiera redefinir DrawCellBackground y poder así cambiar el comportamiento, ya que parecía entre las distintas posibilidades la mas sencilla . El crear un descendiente era simplemente porque este método es declarado como protegido.

Escribí unas lineas de código, que veis a continuación.

unit ColorearColumnaD2010;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, ADODB, DB, DBClient, TConnect, Provider, StdCtrls,
  ExtCtrls, DBCtrls;

const
  kseparacion = 5;
type
  TRejilla = class(TDBGrid)
  protected
    procedure DrawCellBackground(const ARect: TRect; AColor: TColor;
  AState: TGridDrawState; ACol, ARow: Integer); override;
  end;

  TForm1 = class(TForm)
    dsData: TDataSource;
    Button1: TButton;
    data: TClientDataSet;
    dataID: TIntegerField;
    Navegador: TDBNavigator;
    procedure RejillaTitleClick(Column: TColumn);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    Rejilla: TRejilla;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Rejilla.Columns[0].Title.Color:= clGreen;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  fColumn: TColumn;
begin
  Rejilla:= TRejilla.Create(self);
  Rejilla.Parent:= self;
  Rejilla.Top:= Navegador.Top + Navegador.Height + Kseparacion;
  Rejilla.Left:= Navegador.Left;
  Rejilla.DataSource:= dsData;
  Rejilla.DrawingStyle:= gdsClassic;
  Rejilla.OnTitleClick:= RejillaTitleClick;
  data.Open;
  fColumn:= Rejilla.Columns.Add;
  fColumn.FieldName:= 'ID';
  fColumn.Title.Color:= clRed;
end;

procedure TForm1.RejillaTitleClick(Column: TColumn);
begin
  ShowMessage('Pulsaste la columna '+ IntToStr(Column.ID));
end;

{ TRejilla }

procedure TRejilla.DrawCellBackground(const ARect: TRect; AColor: TColor;
  AState: TGridDrawState; ACol, ARow: Integer);
begin
  if ACol < 0 then
    inherited DrawCellBackground(ARect, AColor, AState, ACol, ARow)
  else inherited DrawCellBackground(ARect, Columns[ACol].Title.Color, AState, ACol, ARow);
end;

end.

Para aclarar un poco, simplemente comentar que dado que no lo tenía instalado en la paleta de componentes, existen esas lineas de creación y asignación de propiedades en el evento de OnCreate del formulario. Otra opción sencilla, hubiera sido interponer la clase. Ya lo vimos en uno de los capítulos de la serie de los mayores, cuando hablábamos de la unidad UGrids.

Respecto al método sobrescrito, solo si el índice del parámetro que representa a la columna (ACol) es menor que cero se deja el color por defecto (estaríamos dibujando sobre la columna de indicadores). En caso contrario, entregamos el color del título de la columna, para que se repinte de la forma deseada.

Ahhh… la conversación figurada que he descrito con mi amigo es como podéis imaginar figurada… :-) para darle un poco de emoción y vida a esta entrada. Pero sí es cierto que él andaba molesto por la perdida de tiempo que suponen este tipo de problemas. Lo cual nos lleva a reflexionar sobre algo que quizás pase desapercibido pero que en mi opinión nos está afectando y es el mantenimiento y mejora de la propia VCL. A nadie se le escapa que a pesar de los esfuerzos que se han podido hacer en ese sentido, existen todavía muchos trabajo que hacer.

Este tema sí me parece importante. Tanto como lo pueda ser que el día de mañana aparezca Delphi para 64 bits o para multiplataforma. Seguro que vosotros tenéis opinión formada sobre eso. En la mía quedan preguntas en el aire que son dificiles de responder…

¿Seguir avanzando y dotar al entorno de nueva funcionalidad sin reforzar el mantenimiento de lo construido a la fecha?

¿Qué papel juega la comunidad realmente en todo esto?

¿Qué responsabilidad moral de la empresa sobre lo que sabe que no funciona?

Se me ocurren mil preguntas, a cada cual más difícil de responder…

RAD Studio XE: Mejoras sobre la productividad.

agosto 14, 2010 en Delphi, Delphi Prism, Entrada Diario, Noticias, Noticias Delphi, Presentaciones, Promociones, Roadmap, Videos

Tenemos algunas novedades…

Embarcadero inicia la semana con la promoción pública de las nuevas características que van a incorporarse al próximo relaease de Rad Studio, a través de una campaña de videos y artículos en blogs de la comunidad. Los vídeos están siendo traducidos a varios idiomas por lo que, como viene siendo habitual, el español nos llega de la mano de Andreano Lanusse.

Durante varias semanas vamos a conocer estas novedades. Esta semana, se ha centrado principalmente en la integración del control de versiones, algo que en mi opinión era inexcusable que no existiera a la fecha actual. Me parece muy bueno que se haya hecho realidad.

Podéis ampliar la información consultando la siguiente entrada de embarcadero, en la que aparecen multiples enlaces a esta información publica que está siendo liberada:

http://www.embarcadero.com/rad-studio-xe-preview

Asimismo y en referencia al estado actual del mapa de ruta de Rad Studio existe el siguiente link

http://edn.embarcadero.com/article/39934

encontrado desde la lectura del blog de Michael Rozlog, en la que se comenta la actualización de este mapa de ruta

http://blogs.embarcadero.com/michaelrozlog/2010/08/12/37159/

Ahhh… olvidaba una cosa… quizás os esteis preguntando el por qué del nuevo nombre “XE”, “sufijo” o marca con el que están nombrando los últimos productos de Embarcadero. La respuesta, la deja David Intersimone en una de las entradas de su blog:  http://blogs.embarcadero.com/davidi/2010/08/11/40088/

En dicha entrada, David I expresa la idea que quiere resaltar Embarcadero aludiendo a lo heterogeneo, a una linea de productos y herramientas heterogeneas, de desarrollo de acceso a datos, con multiplicidad de tipos distintos de bases de datos y plataformas. Esa es la idea que subyace al nacimiento de este término, dentro de la estrategia de marketing que ha sido concebida por la empresa para diferenciar sus productos respecto al de sus competidores.

* Mas información:

Blogs de la comunidad hispana:

http://jachguate.wordpress.com/2010/08/13/nuevo-roadmap-para-rad-studio/#more-234

http://jachguate.wordpress.com/2010/08/10/rad-studio-xe/