Tuesday, 11 November 2008

Componentes Delphi : DevExpress QuantumGrid (Dibujando iconos en una celda)

Para poder realizar lo siguiente:



Debemos sustituir el valor que tengamos en la celda, por unos iconos preseleccionados, que estaran guardados en un TImageList:


Luego, en el evento OnCustomDrawCell, buscaremos la celda seleccionada, y sustituiremos el valor numérico o texto (en mi caso tengo un valor numérico de 1 a 5 que indica una clasificación), y lo intercambiaremos por un conjunto de iconos.

El código fuente es el siguiente:


procedure TfInformation.tvInfCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
AImageRect: TRect;
iIndex1, i: integer;
begin
//Buscamos la columna para dibujar los iconos
if AViewInfo.Item.Caption = 'Classificació' then
begin
ACanvas.Brush.Color := AViewInfo.Params.Color;
ACanvas.FillRect(AViewInfo.Bounds);
//Cogemos el índice de la columna
iIndex1 := tvinf.GetColumnByFieldName('Classificacio').Index;
AImageRect := AViewInfo.ContentBounds;
if AViewInfo.GridRecord.Values[iIndex1] = 0 then
begin
for i := 1 to 5 do
begin
ACanvas.DrawImage(ImageList1, AImageRect.Left, AImageRect.Top, 2);
AImageRect.Left := AImageRect.Left + 16;
end;
end
else
begin
for i := 1 to AViewInfo.GridRecord.Values[iIndex1] do
begin
ACanvas.DrawImage(ImageList1, AImageRect.Left, AImageRect.Top, 1);
AImageRect.Left := AImageRect.Left + 16;
end;
for i := AViewInfo.GridRecord.Values[iIndex1] to 4 do
begin
ACanvas.DrawImage(ImageList1, AImageRect.Left, AImageRect.Top, 2);
AImageRect.Left := AImageRect.Left + 16;
end;
end;
ADone := True;
end;
end;



Localizamos el valor del registro y en función de este ponemos las estrellas una detras de otra, y en función de su valor ponemos más o menos de las doradas.

0 comments:

Post a Comment