Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   DBCtrlGrid al final un mal invento (https://www.clubdelphi.com/foros/showthread.php?t=16907)

Aprendiz 16-12-2004 11:49:45

DBCtrlGrid al final un mal invento
 
Hola a todos de nuevo,

Esto del DBCtrlGrid me está trayendo más problemas que beneficios :(, pero es que no veo otra alternativa para hacer lo que intento.

Trabajo con Dephi 5 e Interbase 6. Tengo una tabla de permisos donde guardo también asociado al permiso una refencia a una tabla de imágenes, guardadas en la base de datos directamente y un texto.

Así para mostrar un menú principal solo tengo que hacer una consulta a la tabla de permisos concesido para un usuario y con un inner join a la tabla de permisos se la imagen y texto que tengo que mostrar en el menú principal.

Ahora bien, para mostrar el menú principal con estas características (imagen y texto al estilo escritorio de Windows), solo se me ha ocurrido utilizar un DBCtrlGrid donde en cada panel tengo un DBImage y un DBLabel. Hasta ahora todo bien, se cargan las imágenes y los textos según los permisos del usuario sin problemas.

La cosa está en que las imágenes tienen un colo de fondo estándar, (el verde creo recordar) y lo que habría que hacer es que este color del Bitmap fuera transparente y dejase ver el color de fondo del DBCtrlGrid, color configurable por los usuarios.

Esto se consigue mediante la utilización de:

Código:

  DBImage1.Picture.Bitmap.Transparent:=True;
  DBImage1.Picture.Bitmap.TransparentColor:=8421376;

Ahora bien, y aquí está el problema, como es un componente replicable solo existe uno en teoría, si aplico las instrucciones anteriores en el OnPaintPanel del DBCtrlGrid solo se me aplica correctamente al seleccionado, que funciona perfectamente eso sí, pero al resto de Paneles, correspondiente a las otras opciones de acceso concedida, no se aplica con lo cual quedán las imágenes con ese desagradable color verde de fondo. Solo cuando las selecciono desaparece el color de fondo.

He estado mirando eventos, procedimientos, forzando el repintado, accediendo a todos los componentes en tiempo de ejecución (lo malo es que solo hay un DBImage en realidad), inicializando el DBImage al principio, y no funciona de ninguna manera.

No se, se os ocurre algo...

Gracias por adelantado.

Saludos.

Héctor Randolph 16-12-2004 21:33:38

Hola Aprendiz!

Mi sugerencia es la siguiente:

Si el problema es que solamente existe un DBImage, entonces deberías utilizar el Canvas del DBCtrlGrid para dibujar tu imágen directamente sobre él y te olvidas del DBImage.

Es decir:

Código Delphi [-]
procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
  Index: Integer);
var
  Stream:TMemoryStream;
  Bitmap: TBitmap;
begin
  Stream:=TMemoryStream.Create;
  Bitmap:=TBitmap.Create;
  TBlobField(DBCtrlGrid.DataSource.DataSet.FieldByName('GRAPHIC')).SaveToStream(Stream);
  Bitmap.LoadFromStream(Stream);
  Bitmap.Transparent:=True;
  Bitmap.TransparentColor:=8421376;
  DBCtrlGrid.Canvas.Draw(4,4,Bitmap);
  Bitmap.Free;
  Stream.Free;
end;

Espero que te sea útil.

Un saludo


La franja horaria es GMT +2. Ahora son las 09:45:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi