Solved

TDbCtrlGrid: how to draw a transparent image?

Posted on 2008-10-20
4
1,910 Views
Last Modified: 2013-11-23
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
Comment
Question by:formi
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 
LVL 10

Accepted Solution

by:
atul_parmar earned 250 total points
ID: 22783546
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
 

Author Comment

by:formi
ID: 22783677
Great, it works. Thank a lot!
0
 

Author Closing Comment

by:formi
ID: 31507785
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
 
LVL 16

Expert Comment

by:CodedK
ID: 22784020
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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article will show, step by step, how to integrate R code into a R Sweave document
When we want to run, execute or repeat a statement multiple times, a loop is necessary. This article covers the two types of loops in Python: the while loop and the for loop.
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

717 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question