Make the "white" areas of a bitmap transparent?

I have a bitmap (17 actually) that I am loading onto a form. Each bitmap has its own picture box. I am animating each one with a function I wrote...the only problem is that I want the the color white (inside each bitmap) to be transparent so that you can see the background art on the form that all the picture boxes, etc. sit on.

Any help or direction would be greatly appreciated...and also, please avoid "vague" descriptions...specifics are important to the way I digest information.

I am using VB Pro 4 32Bit.


Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Hello !

I had this problem, I didn`t found to it a solution
I think that you should to by a OCX or VBX to do it!
Hello !

I had this problem, I didn`t found any solution to it
I think that you should by a OCX or VBX to do it!
summersetAuthor Commented:
Did you buy a third party OCX? If so, which one?

The Ultimate Tool Kit for Technolgy Solution Provi

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy for valuable how-to assets including sample agreements, checklists, flowcharts, and more!

No I didn`t bought any OCX or VBX.
You Can Read about it in
"Component Objects and Companion Products for Visual Basic" Book
Provided by Microsoft.

Don't listen to these messages about VBX/OCXs.  Go into paintbrush.  Load one of the bitmaps in.  Make sure under Options... DrawOpaques is NOT checked.  Save the picture again (you might need to refill the white/blank areas.)  You now won't be able to use the white as a color, but all white areas will be transparent.  In all pictureboxes/imagecontrols that have these pictures that have transparent spots, make sure that backstyle is set to transparent.  This should do it!
summersetAuthor Commented:
That didn't work (loading the bitmap into paint and then saving it again). Instead I found a way to make it work using an Image List, hDC and setting a mask color. The areas I want transparent are now transparent...however, I am stuck now trying to make the Picture Boxes transparent...anyone know how to make the Picture Box transparent? I have a bitmap loaded in the form as a background, the picture boxes (17 of them) sit on a form. I am using VB Pro 4 32Bit.
I wouldnt of thought you can do that to a picture box (it is effectively a window (i.e. has its own hdc)). Have you tried an image control ? Probably not it doesnt have a hdc property.

Alternatively use the stretchdibits api to blit to the form and use one of the combination flags i.e. srccopy, notsrcopy etc. The definitions are in the api documentation. You will need to load the bitmap to memory first (using an api such as hread with globalalloc, globallock etc for the memory). I have done this before, it took a while, but the resultant bitmap manipulation power (considering it was vb and I didnt use any 3rd party stuff) was pretty good. If you want an algorithm to do this let me know.

Its called bitmap masking.  You have to effectively create
three bitmaps.  Your picture, a mask for that picture, and
a background.

If you want to see the background of the form you'll have to
simulate it by copying the forms background (a clipping) to
the bitmap (picture box) and then apply the mask and original

The Microsoft site has a knowledge base on this.  Or if you
have the knowledge base help files for VB, you can find it in there.  Here is the knowledge base article:
A transparent image shows the background behind it instead of the image
itself. You can use an icon editor such as the IconWorks sample program
provided with Visual Basic to create icons that contain transparent parts.
This article shows you how to make certain parts of a bitmap transparent.

More Information:

Here are the six general steps required to create a transparent bitmap:

1. Store the area, or background, where the bitmap is going to be drawn.
2. Create a monochrome mask of the bitmap that identifies the transparent
   areas of the bitmap by using a white pixel to indicate transparent areas
   and a black pixel to indicate non-transparent areas of the bitmap.
3. Combine the pixels of the monochrome mask with the background bitmap
   using the And binary operator. The area of the background where the
   non-transparent portion of the bitmap will appear is made black.

4. Combine an inverted copy of the monochrome mask (step 2) with the source
   bitmap using the And binary operator. The transparent areas of the
   source bitmap will be made black.
5. Combine the modified background (step 3) with the modified source bitmap
   (step 4) using the Xor binary operator. The background will show through
   the transparent portions of the bitmap.
6. Copy the resulting bitmap to the background

Example Code
1. Run Visual Basic, or from the File menu, choose New Project (ALT, F, N)
   if Visual Basic is already running. Form1 is created by default.
2. Add the following controls to Form1 with the associated property values:

   Control          Name (or CtlName)  Property Settings
   Picture          pictSource         Picture ="WINDOWS\THATCH.BMP"
   Picture          pictDest           Picture ="WINDOWS\ARCHES.BMP"

   Command button   cmdCopy            Caption ="Copy"

3. From the File menu, choose New Module (ALT, F, M). Module1 is created.
4. Add the following code to the cmdCopy_Click event procedure of Form1.
   This code calls the TransparentBlt() function to copy a source bitmap
   to a destination (background) picture control. White (QBColor(15)) areas
   of the bitmap are made transparent against the background bitmap.

   Sub cmdCopy_Click ()
      Call TransparentBlt(pictDest, pictSource.Picture, 10, 10, QBColor(15))
   End Sub

5. Add the following code the general declarations section of Module1. Enter
   each Declare as a single line:

   Type bitmap
      bmType As Integer
      bmWidth As Integer
      bmHeight As Integer
      bmWidthBytes As Integer

      bmPlanes As String * 1
      bmBitsPixel As String * 1
      bmBits As Long
   End Type
   Declare Function BitBlt Lib "GDI" (ByVal srchDC As Integer, ByVal srcX
      As Integer, ByVal srcY As Integer, ByVal srcW As Integer, ByVal srcH
      As Integer, ByVal desthDC As Integer, ByVal destX As Integer, ByVal
      destY As Integer, ByVal op As Long) As Integer
   Declare Function SetBkColor Lib "GDI" (ByVal hDC As Integer, ByVal
      cColor As Long) As Long
   Declare Function CreateCompatibleDC Lib "GDI" (ByVal hDC As Integer)
      As Integer
   Declare Function DeleteDC Lib "GDI" (ByVal hDC As Integer) As Integer
   Declare Function CreateBitmap Lib "GDI" (ByVal nWidth As Integer, ByVal
      nHeight As Integer, ByVal cbPlanes As Integer, ByVal cbBits As
      Integer, lpvBits As Any) As Integer
   Declare Function CreateCompatibleBitmap Lib "GDI" (ByVal hDC As Integer,

      ByVal nWidth As Integer, ByVal nHeight As Integer) As Integer
   Declare Function SelectObject Lib "GDI" (ByVal hDC As Integer, ByVal
      hObject As Integer) As Integer
   Declare Function DeleteObject Lib "GDI" (ByVal hObject As Integer) As
   Declare Function GetObject Lib "GDI" (ByVal hObject As Integer, ByVal
      nCount As Integer, bmp As Any) As Integer
   Const SRCCOPY = &HCC0020
   Const SRCAND = &H8800C6
   Const SRCPAINT = &HEE0086
   Const NOTSRCCOPY = &H330008

6. Add the following Sub procedure to the general declarations section of
   Module1. TransparentBlt() accepts six parameters: a destination picture
   control (dest), a source bitmap to become transparent (srcBmp), the X,Y
   coordinates in pixels where you want to place the source bitmap on the

   destination (destX and destY), and the RGB value for the color you want
   to be transparent. TransparentBlt() copies the source bitmap to any X,Y
   location on the background making areas transparent.

   Sub TransparentBlt (dest As Control, ByVal srcBmp As Integer, ByVal
      destX As Integer, ByVal destY As Integer, ByVal TransColor As Long)
      Const PIXEL = 3
      Dim destScale As Integer
      Dim srcDC As Integer  'source bitmap (color)
      Dim saveDC As Integer 'backup copy of source bitmap
      Dim maskDC As Integer 'mask bitmap (monochrome)
      Dim invDC As Integer  'inverse of mask bitmap (monochrome)
      Dim resultDC As Integer 'combination of source bitmap & background
      Dim bmp As bitmap 'description of the source bitmap
      Dim hResultBmp As Integer 'Bitmap combination of source & background

      Dim hSaveBmp As Integer 'Bitmap stores backup copy of source bitmap
      Dim hMaskBmp As Integer 'Bitmap stores mask (monochrome)
      Dim hInvBmp As Integer  'Bitmap holds inverse of mask (monochrome)
      Dim hPrevBmp As Integer 'Bitmap holds previous bitmap selected in DC
      Dim hSrcPrevBmp As Integer  'Holds previous bitmap in source DC
      Dim hSavePrevBmp As Integer 'Holds previous bitmap in saved DC
      Dim hDestPrevBmp As Integer 'Holds previous bitmap in destination DC
      Dim hMaskPrevBmp As Integer 'Holds previous bitmap in the mask DC
      Dim hInvPrevBmp As Integer  'Holds previous bitmap in inverted mask DC
      Dim OrigColor As Long  'Holds original background color from source DC
      Dim Success As Integer 'Stores result of call to Windows API
      If TypeOf dest Is PictureBox Then 'Ensure objects are picture boxes

        destScale = dest.ScaleMode 'Store ScaleMode to restore later
        dest.ScaleMode = PIXEL 'Set ScaleMode to pixels for Windows GDI
        'Retrieve bitmap to get width (bmp.bmWidth) & height (bmp.bmHeight)
        Success = GetObject(srcBmp, Len(bmp), bmp)
        srcDC = CreateCompatibleDC(dest.hDC)    'Create DC to hold stage
        saveDC = CreateCompatibleDC(dest.hDC)   'Create DC to hold stage
        maskDC = CreateCompatibleDC(dest.hDC)   'Create DC to hold stage
        invDC = CreateCompatibleDC(dest.hDC)    'Create DC to hold stage
        resultDC = CreateCompatibleDC(dest.hDC) 'Create DC to hold stage
        'Create monochrome bitmaps for the mask-related bitmaps:
        hMaskBmp = CreateBitmap(bmp.bmWidth, bmp.bmHeight, 1, 1, ByVal 0&)

        hInvBmp = CreateBitmap(bmp.bmWidth, bmp.bmHeight, 1, 1, ByVal 0&)
        'Create color bitmaps for final result & stored copy of source
        hResultBmp = CreateCompatibleBitmap(dest.hDC, bmp.bmWidth,
        hSaveBmp = CreateCompatibleBitmap(dest.hDC, bmp.bmWidth,
        hSrcPrevBmp = SelectObject(srcDC, srcBmp)     'Select bitmap in DC
        hSavePrevBmp = SelectObject(saveDC, hSaveBmp) 'Select bitmap in DC
        hMaskPrevBmp = SelectObject(maskDC, hMaskBmp) 'Select bitmap in DC
        hInvPrevBmp = SelectObject(invDC, hInvBmp)    'Select bitmap in DC
        hDestPrevBmp = SelectObject(resultDC, hResultBmp) 'Select bitmap
        Success = BitBlt(saveDC, 0, 0, bmp.bmWidth, bmp.bmHeight, srcDC,
           0, 0, SRCCOPY) 'Make backup of source bitmap to restore later

        'Create mask: set background color of source to transparent color.
        OrigColor = SetBkColor(srcDC, TransColor)
        Success = BitBlt(maskDC, 0, 0, bmp.bmWidth, bmp.bmHeight, srcDC,
           0, 0, SRCCOPY)
        TransColor = SetBkColor(srcDC, OrigColor)
        'Create inverse of mask to AND w/ source & combine w/ background.
        Success = BitBlt(invDC, 0, 0, bmp.bmWidth, bmp.bmHeight, maskDC,
          0, 0, NOTSRCCOPY)
        'Copy background bitmap to result & create final transparent bitmap
        Success = BitBlt(resultDC, 0, 0, bmp.bmWidth, bmp.bmHeight,
           dest.hDC, destX, destY, SRCCOPY)
        'AND mask bitmap w/ result DC to punch hole in the background by
        'painting black area for non-transparent portion of source bitmap.
        Success = BitBlt(resultDC, 0, 0, bmp.bmWidth, bmp.bmHeight,

           maskDC, 0, 0, SRCAND)
        'AND inverse mask w/ source bitmap to turn off bits associated
        'with transparent area of source bitmap by making it black.
        Success = BitBlt(srcDC, 0, 0, bmp.bmWidth, bmp.bmHeight, invDC,
           0, 0, SRCAND)
        'XOR result w/ source bitmap to make background show through.
        Success = BitBlt(resultDC, 0, 0, bmp.bmWidth, bmp.bmHeight,
           srcDC, 0, 0, SRCPAINT)
        Success = BitBlt(dest.hDC, destX, destY, bmp.bmWidth, bmp.bmHeight,
           resultDC, 0, 0, SRCCOPY) 'Display transparent bitmap on backgrnd
        Success = BitBlt(srcDC, 0, 0, bmp.bmWidth, bmp.bmHeight, saveDC,
           0, 0, SRCCOPY) 'Restore backup of bitmap.
        hPrevBmp = SelectObject(srcDC, hSrcPrevBmp) 'Select orig object
        hPrevBmp = SelectObject(saveDC, hSavePrevBmp) 'Select orig object

        hPrevBmp = SelectObject(resultDC, hDestPrevBmp) 'Select orig object
        hPrevBmp = SelectObject(maskDC, hMaskPrevBmp) 'Select orig object
        hPrevBmp = SelectObject(invDC, hInvPrevBmp) 'Select orig object
        Success = DeleteObject(hSaveBmp)   'Deallocate system resources.
        Success = DeleteObject(hMaskBmp)   'Deallocate system resources.
        Success = DeleteObject(hInvBmp)    'Deallocate system resources.
        Success = DeleteObject(hResultBmp) 'Deallocate system resources.
        Success = DeleteDC(srcDC)          'Deallocate system resources.
        Success = DeleteDC(saveDC)         'Deallocate system resources.
        Success = DeleteDC(invDC)          'Deallocate system resources.
        Success = DeleteDC(maskDC)         'Deallocate system resources.
        Success = DeleteDC(resultDC)       'Deallocate system resources.
        dest.ScaleMode = destScale 'Restore ScaleMode of destination.

      End If
   End Sub

7. From the Run menu, choose Start (ALT, R, S) to run the program.
8. Click the Copy button. The thatched pattern in the first picture is
   copied onto the second picture (an image of arches) making the arches
   show through areas of the previously white thatched pattern.
This should derserve an A, right?
summersetAuthor Commented: "A." Why would you deserve an 'A' for cutting and pasting from the Knowledge Base? :-) Honestly, no offense meant. I came to the experts exchange for the purpose of gaining knowledge from your experiences as an expert, not from what we read in text books or FAQs. The knowledge base was the second place I looked after I searched and tried everything in the "help" files. Then (after the knowledge base) I checked every known Visual Basic hot spot on the Internet...then I did a major search with most of the search engines...then I posted it in the vb.misc news group.

Then I came here.

You see...I want to know an easier, less complicated way to do things. I'll bet you 50 points that you've never even used the solution you cut and pasted from the knowledge base. If you had you would have noticed that it won't compile under VB4 32Bit because it wasn't written for 32bit...there are some clunkers in the knowledge base.

You's the deal. I want "real-life" working solutions that are practicle and make sense from a programmers point of view and from a business point of view. Fewer dll's and Ocx's make smaller distribution packages. Simpler code makes for less bugs...less bugs mean fewer support calls, etc.

I like andyb's answer, but it isn't practicle. I'm not using sprite animation, but remember...each one of my 17 picture boxes has animation in it, but the animation is stationary (its somewhat different from sprite animation) and uses 3 separate bmps each to create the effect after mousedown on each one....then it returns to its original shape after fullfilling two other they must remain separate picture boxes...all the picture boxes sit on a form which has a bmp for a background. How do I make the top picture boxes transparent after I have made parts of the bmps (inside the picture boxes) transparent?

Thanks in advance for any help...

mheacockCommented: about this...

You have background art on the it in an Image box of its own??  Or drawn right on the form??

Either way...

You know the locations and dimensions of your picture boxes on the form.  Why don't you copy (clip rectangular) areas from the art background into the picture boxes then draw your transparent animations over the clipped backgrounds??  Even if your picture boxes are draggable, the right code will always copy the correct section of your art background into each picture box.

As for the Knowledge Base thing...I have used it...not with VB4 though...I figured it would work since it appeared to me that all the code was upwards compatible.  And besides, how was I to know you were intelligent enough to look in the knowledge base.  You'd be amazed at how many people do not even know there's a knowledge base in their VB help files.  It's not like I tried to deceive you and pass off the cut-and-paste as my own.  Plus, I don't think the KB stuff comes with the Standard editions of MS's VB, so you might not even have owned the KB, thus my cut-and-paste might have proved to valuable.


Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
summersetAuthor Commented:
OKay...that was the answer I came up with on Saturday. I'll be honest though...I feel there must be a more efficient way to handle the whole thing. Using the image list is adding almost 400K to my distribution media because of the dll, etc.

As for the version of VB I am using, I clearly stated I was using the Pro version of VB4 and in 32 Bit.

I appreciate your quick and honest come-back, so I'll fork over the 50 points, but if you ever run into a more efficient way to handle these things...please drop me a line...I will do likewise.


I don't know why my last suggestion is adding 40K to your EXE.  If you are adding the art background to your picture boxes at design-time, then it will.  But if you add the background clippings into your picture boxes at run-time, there should be that kind of increase...perhap 10K max for the code.  But the viability of my run-time suggestion really depends on the container you are using to store the background at design-time.
I don't think there is another viable alternative if you wish to stick the the built in PictureBox that comes with VB.  The VB picturebox was not designed with this transparency requirement, thus it can't be done.  You'd either have to write your own OCX to do the job or find a thrid-party OCX that already does the job.

I realize where you're coming from in not wanting to much overhead to transport with your program.  VB is really really bad in this respect.
summersetAuthor Commented:
I didn't mean that your answer was adding the extra space to my distribution...I was pointing out that the direction 'I' have gone on this animation, making the bitmaps transparent, et al has increased my distribution by 400K (prior to compression) with the need for extra support files.

I just think VB can sometimes be kinda' clunky when dealing with graphics. :-)

Your last answer appears to be the best bet in avoiding 3rd party files.

Thanks again...say...know anything about controlling the print size and position of a bitmap being printed from inside a picture box? ;-)

No to yuor last question.  To tell you the truth I just popped in here to see if there were any questions I might be able to answer.  I don't use VB anymore.  I just got sick of it.  Too much hassle.  I moved on to Delphi.  But I'll spare you a whole lot of preaching on the two development apps.
summersetAuthor Commented:
hehehehehe...interesting you should say that. I got VB5 Enterprise a little while ago...and...well...just felt I got took, you know?  Last Wednesday I downloaded Delphi (the demo version). I haven't installed it yet totake a look at it, but I'd be very interested in any free preaching about the subject.

I have only been programming for Windows (with VB) for about a year. My background is in Unix, shell scripts, perl and C.

Thanks in advance. :-)

VB, I find is too limiting and clunky.  Delphi is very powerful, almost equal to C++.  What you wanted to do above would be a hell of a lot easier in Delphi.  Of course it is a whole new langauge to learn...Object Pascal.

If you are more comnfortable with C/C++, Borland jus released C++ Builder...which is a VB/Delphi thing, but for C++.  I've been fiddling with it a bit and it is very simple if you know C(++).  It uses the exact same IDE as Delphi and has some tight integration with can use Delphi compiled units in your C++ projects if you don't feel like porting them to C++.

I just can't stand the MS development tools.  I'm pretty much pro Borland.  But for power, Delphi is the route.  I started off with VB, so I figure I now what I'm talking about.  But I always found it limiting.  As soon as Delphi came along I immediately bought it and began distancing myself from VB.

Employment-wise it is valuable to know VB (upper-management types usually don't have much of a clue, since they aren't the ones using the tools...they just read all the fancy trade magazines and fall for all the hype)...anyhow...if you're able to learn another language (Pascal is pretty straightforward and allows you all kinds of nice C features...casting...pointers...C++ features...classes...inheritance (not mulitple)...).

The Delphi group on the Exchange here is very good and pretty active.  The newsgroups more so.
I'd be willing to offer you help if you decide to go to Delphi.  I'm always happy to help VB-to-Delphi convertees.

VB5 is a joke by the way.  It creates 'true compiled code', yet
you still have to give the VB Run Time DLL with your EXE's?  (Oops, I mean the VB Virtual Machine...MS is using all of the cute terminology these days, aren't they).

BTW, the new Delphi 3 (due out in May) will allow you to create true ActiveX components very will allow you to create CGI apps that automatically conform to the Netscape and MS server has code help...type in a function name and it will automatically tell you the variables that function expects (no more searching your code to see how you defined will also type 'if', it will show you a drop-dwn box and allow you to choose an if..then..else template...saves lots of typing...does this for many reserved words and also lets you create your own code templates...can't say enough good things about D3).
summersetAuthor Commented:
Well...I will try Delphi when version 3 comes out in May. One of my business partners told me he really likes Pascal...also said it is much easier to program with than VC++...

My real concern is information. The lion share of books, FAQS and info out there is Pro VB. I'm also curious about third party is that? Do you ever feel limited to your own code?

You sound like someone who has an advance copy of Delphi3? I actually had an advance copy of VB5 in November 96...

I appreciate your time.

No...there are tonnes of Delphi resources.  I've found the OpebGL definitions converted from C++ to Delphi...the latest DirectX components have been converted and there are numerous repositories for components...

The other great thing about Delphi components are that they become part of your VBX./OCX's to ship around.  It's even easy to design your own components from within Delphi.  Unlike VB, in which you have to use C++ to design VBX/OCXs.  With Delphi 3, you'll be able to design OCXs for the VB masses.

The address of the Delphi Super Page (a huge repository of components...lots of freeware here too):

Here is an article on Delphi 3 with related URLs:

April 14, 1997

Delphi 3:
  Productivity for the Business
  Productivity for the Enterprise
  Productivity for the Developer

It's been 15 months since the high-speed, scalable, rapid
application, standard setting Delphi 2 release.  And now
the Delphi team has solicited customer feedback, analyzed
the competition, ignored their families, gone through three
beta tests, one gamma, and two hotsites.  So finally we are
surfacing to tell you about the most exciting release of
Delphi ever! The end result -- a truly truly amazing
Delphi 3.  A release that offers you and your business a
measurable return on investment.

1.  Delphi 3
2.  What the Press is Saying About Delphi 3
3.  Delphi 3 in the News
4.  Delphi Customer Case Studies
5.  Where Do I Get Additional Information on Delphi 3?
6.  Other Delphi News
7.  Internet Sources for Delphi

1.  Delphi 3

New programmer? Professional developer?
Internet developer?  Client/Server Developer?
Commercial Software House?  Enterprise Developer?
Intranet your specialty?  Distributed computing
architect?  Delphi 3 has well over 50 new
technologies to meet the demands of the most
critical developer and business.

Delphi 3 continues to set the standard for the
highest productivity, most rapid development of
high performance client, server and multi-tier
applications through the enterprise and across
the Internet.  Delphi 3's Golden Gate
implementation bridges enterprise wide
client/server development and the Internet
by building upon a it's unique combination
of technologies, including rapid application
development, scalable multi-tier database
development, true object-oriented reusability
and high-performance native-code compiler.

Delphi 3 will deliver on five key solution areas:
  Enterprise and Internet -- Client and Server Solutions
  Open, scalable multi-tier architectures
  Enterprise Component Foundry
  High speed dissemination of Database information over the Web
  Improved ease and productivity.

Delphi 3 reduces application complexity created
by the increased demands of the enterprise and
the Internet.  New enabling technologies, such as
Remote Data Broker, Packages, OLEnterprise, and
Internet enablement allow for thin client
applications to be easily distributed, configured,
and maintained, thereby reducing costs.  Built in
support for Microsoft systems technology including
COM and ActiveX support, allow for language
interoperability so that you can leverage your
existing investments and extend them across
the enterprise.  High-speed native SQL Links
drivers and access to Entera, intelligent
middleware, allow you to integrate legacy data
so that the company's knowledge base can be
fully utilized.

Delphi is the only scalable and open multi-tier
architecture that puts your business at the
center of development.

2.  What the Press is Saying About Delphi 3

"Delphi's third time around is more than a
charm -- it's a technological tour de
force...", Konopka, Ray, Visual Developer
Delphi 3: Redefining Visual Programming.

"Delphi's Active Insight and Broker technologies
combine to give you a flexible and powerful
architecture for developing distributed
client/server applications.", Bosworth, Billy,
DBMS,  Delphi 3.

Delphi 3 gives you the choice of large or small
executables, server-side DLLs, Internet Controls,
easy Web deployment, code signing, component
templates and many other features not found
in VB5", Jewell, Dave, PC Pro, Delphi 97.

"Of the 12 major large-scale projects being
developed by my company, four are Delphi,
six are VB, one is C++ and one is a complete
Internet project... Of the 12 projects, only
the Delphi projects are on budget, on schedule,
are meeting the performance requirements and
have the highest customer satisfaction."
Machrone, Bill, PCWeek,  Borland is still a
powerful source.

3.  Delphi 3 in the News

Delphi 3.0 By Billy Bosworth
DBMS, April 1997
Delphi 3.0 Combines Speed With Many New,
Powerful Features.

Tests find Borland's beta blends developer
aids, near-C++ speed; multitier options
will add enterprise appeal By Peter Coffee

Two Paths To RAD
The differences between updates of Microsoft's
Visual Basic and Borland's Delphi development
tools are subtle but important
By Andy Feibus Issue date: March 31, 1997

Rapid application development tool
Delphi 3 closes in on Visual Basic 5.0
By Maggie Biggs

4.  Delphi Customer Case Studies

Delphi Customer Case Studies:
Read about the business success of many
market and industry leaders using Delphi
to build applications, from general-purpose
to mission-critical. Find out how various
industries use Delphi to solve different
problems. See what makes Delphi the perfect
complement to other development tools.

5.  Where Do I Get Additional Information?

To keep up to date while it all unfolds,

6.  Other Delphi News

February 28, 1997 Borland Ships Delphi 2.0 Arabic Enablement

Borland Ships Delphi/400 Client/Server Suite.

New support for FAT32  - Borland has updated the
BDE to support the FAT32 filesystem found in Win95B.

7.  Internet Sources for Delphi

There are many web sites that have additional information
and products for Delphi.  To see a list of these web sites
go to

(The links listed to other on-line sites are provided solely
as a courtesy. The views expressed are not
necessarily those of Borland. Borland does not
endorse any of the products or services discussed

I just had to solve this problem myself.  The biggest issue is that .BMP and .JPG files don't actually have "transparency" as an option -- but GIFs do.  I took my BMP file, opened it in PhotoEd (part of Microsoft Office), selected Tools --> Set Transparent Color, clicked on the white area, and -- Voila!  Worked like a champ - got my image without the white background.  Only catch is that it has to be saved as a .GIF.  Presumably other photo editors would have this option, as well.  Easy, easy, easy!
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Fonts Typography

From novice to tech pro — start learning today.