Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2002
  • Last Modified:

TDbCtrlGrid: how to draw a transparent image?

Hi,
I've a TDBGrid-component and want to draw images on it depending from an integer-value in the database. It'works well, but I can't make the images transparent. There are simple images, I put the images-background to color clBtnFace and draw i.e a green rectangle. On the CtrlGrid the background of the image is always white. I tried to set the "TransparentColor" but without success. The images are 24Bit. Her's my code:

procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
  Index: Integer);
var
  bitmap : TBitmap;
  fixRect : TRect;
  vTyp : integer;
begin
    vTyp :=  DBCtrlGrid.DataSource.DataSet.FieldByName('Typ').AsInteger;
    if vTyp < ImageList1.Count then
    begin
      bitmap := TBitmap.Create;
      try
        ImageList1.GetBitmap(vTyp,bitmap);
        fixRect.Top := 0;
        fixRect.Bottom := fixRect.Top+32;
        fixRect.Left := E_Typ.Left+ E_Typ.Width + 3;
        fixRect.Right := fixRect.Left+32;
        DBCtrlGrid.Canvas.StretchDraw(fixRect,bitmap);
      finally
        FreeAndNil(bitmap);  
      end;
    end;
end;

Thanks for your help, Peter
0
formi
Asked:
formi
  • 2
1 Solution
 
atul_parmarCommented:
Hi, add the following line before you draw the image. I've attached the resultant snippet also.

DBCtrlGrid.Canvas.CopyMode := cmMergeCopy;

Atul
procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
  Index: Integer);
var
  bitmap : TBitmap;
  fixRect : TRect;
  vTyp : integer;
begin
    vTyp :=  DBCtrlGrid.DataSource.DataSet.FieldByName('Typ').AsInteger;
    if vTyp < ImageList1.Count then
    begin
      bitmap := TBitmap.Create;
      try
        ImageList1.GetBitmap(vTyp,bitmap);
        fixRect.Top := 0;
        fixRect.Bottom := fixRect.Top+32;
        fixRect.Left := E_Typ.Left+ E_Typ.Width + 3;
        fixRect.Right := fixRect.Left+32;
        DBCtrlGrid.Canvas.CopyMode := cmMergeCopy;
        DBCtrlGrid.Canvas.StretchDraw(fixRect,bitmap);
      finally
        FreeAndNil(bitmap);  
      end;
    end;
end;

Open in new window

0
 
formiAuthor Commented:
Great, it works. Thank a lot!
0
 
formiAuthor Commented:
Yes, it works! Great and thanks a lot! (I'm new in experts-exchange and so I didn't saw the button to accept the solution and to send comments to you, so I added a small comment). Peter
0
 
CodedKCommented:
Hi formi,

Give it a show with icons.
TICon.Create  etc...

Alternative solution is to use TMS components.
http://www.tmssoftware.com/site/gridpack.asp
They have very good components (but expensive).

Another solution is to try with Bergsoft
http://www.bergsoft.net/
Overview : http://www.bergsoft.net/component/next-dbgrid/overview.htm
you can download a demo to see for yourself...

Hope this helps :)
0

Featured Post

Receive 1:1 tech help

Solve your biggest tech problems alongside global tech experts with 1:1 help.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now