Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-12-2004
Aprendiz Aprendiz is offline
Miembro
 
Registrado: may 2003
Posts: 78
Poder: 21
Aprendiz Va por buen camino
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.
__________________
[Aprendiz]: Por que siempre hay algo nuevo que aprender.

Última edición por Aprendiz fecha: 16-12-2004 a las 12:09:51.
Responder Con Cita
  #2  
Antiguo 16-12-2004
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:30:47.


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
Copyright 1996-2007 Club Delphi