471,119 Members | 1,436 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,119 software developers and data experts.

Q: GIF image on a form

Hi

I have a form on which I have a picture box. I have placed a GIF as the
image for this picture box. The GIF has a transparent background.

If I change the background color of the form, then the GIF appears on the
form correctly i.e. the background of the form shows through the transparent
part of the gif.

However, if I place a BackgroundImage on the form, the transparent part of
the form does not show the BackgroundImage of the form, rather is shows the
back color of the form. This obviously make the GIF not to be "transparent".

Can anybody help?

Thanks

G
May 19 '06 #1
7 1674
What you need to do is make a user control and then modify it's transparent
property on window construction. You then need to handle "InvalidateEx"
messages in order to force the parent to redraw your background, rather than
you. Funny you mention this because I had to do this with a "working....."
animation yesterday.

This sample is in C# but it's easy to convert. You won't be needing a
picture box. Just use DrawImage to render your GIF on the control surface
but overriding the paint event.

http://www.devnewsgroups.net/link.as...rol&lang=en%3E

"G .Net" <no********@email.com> wrote in message
news:Jf********************@pipex.net...
Hi

I have a form on which I have a picture box. I have placed a GIF as the
image for this picture box. The GIF has a transparent background.

If I change the background color of the form, then the GIF appears on the
form correctly i.e. the background of the form shows through the
transparent part of the gif.

However, if I place a BackgroundImage on the form, the transparent part of
the form does not show the BackgroundImage of the form, rather is shows
the back color of the form. This obviously make the GIF not to be
"transparent".

Can anybody help?

Thanks

G

May 19 '06 #2
Hi Fred

Ah, looks like exactly what I need!!!

However, bit of newbie so need help in exactly what to do. Could I trouble
you to give the steps I need?

G

"Fred Hedges" <do******@spammuch.com> wrote in message
news:e4*******************@news.demon.co.uk...
What you need to do is make a user control and then modify it's
transparent property on window construction. You then need to handle
"InvalidateEx" messages in order to force the parent to redraw your
background, rather than you. Funny you mention this because I had to do
this with a "working....." animation yesterday.

This sample is in C# but it's easy to convert. You won't be needing a
picture box. Just use DrawImage to render your GIF on the control surface
but overriding the paint event.

http://www.devnewsgroups.net/link.as...rol&lang=en%3E

"G .Net" <no********@email.com> wrote in message
news:Jf********************@pipex.net...
Hi

I have a form on which I have a picture box. I have placed a GIF as the
image for this picture box. The GIF has a transparent background.

If I change the background color of the form, then the GIF appears on the
form correctly i.e. the background of the form shows through the
transparent part of the gif.

However, if I place a BackgroundImage on the form, the transparent part
of the form does not show the BackgroundImage of the form, rather is
shows the back color of the form. This obviously make the GIF not to be
"transparent".

Can anybody help?

Thanks

G


May 19 '06 #3
(1) Create a new User Control

(2) Override it's CreateParms property with this:

Protected Overrides ReadOnly Property CreateParams() As CreateParams

Get

Dim cp As CreateParams = MyBase.CreateParams
cp.ExStyle = cp.ExStyle Or WS_EX_TRANSPARENT

Return cp

End Get

End Property

(3) In Sub New(), add the following code:
Me.SetStyle(ControlStyles.SupportsTransparentBackC olor, True)
Me.UpdateStyles()
Me.BackColor = Color.Transparent
(4) Override the OnPaintBackground event, but don't put anything into it:

Protected Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs)
'
End Sub
(5) Import the GIF into your resources (Project Properties, Resources,
Images, Add Image...).

This will basically give you a transparent surface. Now you can draw your
..GIF onto this transparent surface any way you want, eg:

(6) Override the OnPaint event and use it to draw your image:
Protected Overrides Sub OnPaint(byval e As PaintEventArgs)

' Render our image here, no stretch, modify to stretch to fill
' the control if required.
e.Graphics.DrawImage ( My.Resources.WhateverMyGIFImageIsCalled, 0,
0 )

End Sub

Hope this helps.

"G .Net" <no********@email.com> wrote in message
news:jZ******************************@pipex.net...
Hi Fred

Ah, looks like exactly what I need!!!

However, bit of newbie so need help in exactly what to do. Could I trouble
you to give the steps I need?

G

"Fred Hedges" <do******@spammuch.com> wrote in message
news:e4*******************@news.demon.co.uk...
What you need to do is make a user control and then modify it's
transparent property on window construction. You then need to handle
"InvalidateEx" messages in order to force the parent to redraw your
background, rather than you. Funny you mention this because I had to do
this with a "working....." animation yesterday.

This sample is in C# but it's easy to convert. You won't be needing a
picture box. Just use DrawImage to render your GIF on the control
surface but overriding the paint event.

http://www.devnewsgroups.net/link.as...rol&lang=en%3E

"G .Net" <no********@email.com> wrote in message
news:Jf********************@pipex.net...
Hi

I have a form on which I have a picture box. I have placed a GIF as the
image for this picture box. The GIF has a transparent background.

If I change the background color of the form, then the GIF appears on
the form correctly i.e. the background of the form shows through the
transparent part of the gif.

However, if I place a BackgroundImage on the form, the transparent part
of the form does not show the BackgroundImage of the form, rather is
shows the back color of the form. This obviously make the GIF not to be
"transparent".

Can anybody help?

Thanks

G



May 19 '06 #4
gs
that looks more like VB than c#
I think you will have to fresh out the last stub for OnPaintBackground
with painting you GB image
Imports System
Imports System.Windows.Forms

Public Class TransparentControl
Inherits Control

Private Const WS_EX_TRANSPARENT As Int32 = &H20

Public Sub New()
Me.SetStyle(ControlStyles.SupportsTransparentBackC olor, True)
Me.UpdateStyles()
Me.BackColor = Color.Transparent
End Sub

Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams
cp.ExStyle = cp.ExStyle Or WS_EX_TRANSPARENT
Return cp
End Get
End Property

Protected Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs)
' fresh out this partto pain the gb image
End Sub
a primitive example is from the vb help
Private Sub pictureBox1_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs)
' Create a local version of the graphics object for the PictureBox.
Dim g As Graphics = e.Graphics

' Draw a string on the PictureBox.
g.DrawString("This is a diagonal line drawn on the control", _
New Font("Arial", 10), Brushes.Red, New PointF(30.0F, 30.0F))
' Draw a line in the PictureBox.
g.DrawLine(System.Drawing.Pens.Red, pictureBox1.Left, _
pictureBox1.Top, pictureBox1.Right, pictureBox1.Bottom)
End Sub 'pictureBox1_Paint

but then if you already the GB image in some format (tif, bmp,) you may be
better off looking for some picture control to take care of that for you.
Hey, I am newbie to vb too. so I can help very much beyon what I can find by
goole or built help.

you may also want to look at the game snippets or starter kit/template. I
am sure there are plenty of examples for handling graphics

"G .Net" <no********@email.com> wrote in message
news:jZ******************************@pipex.net...
Hi Fred

Ah, looks like exactly what I need!!!

However, bit of newbie so need help in exactly what to do. Could I trouble
you to give the steps I need?

G

"Fred Hedges" <do******@spammuch.com> wrote in message
news:e4*******************@news.demon.co.uk...
What you need to do is make a user control and then modify it's
transparent property on window construction. You then need to handle
"InvalidateEx" messages in order to force the parent to redraw your
background, rather than you. Funny you mention this because I had to do
this with a "working....." animation yesterday.

This sample is in C# but it's easy to convert. You won't be needing a
picture box. Just use DrawImage to render your GIF on the control
surface but overriding the paint event.

http://www.devnewsgroups.net/link.as...rol&lang=en%3E

"G .Net" <no********@email.com> wrote in message
news:Jf********************@pipex.net...
Hi

I have a form on which I have a picture box. I have placed a GIF as the
image for this picture box. The GIF has a transparent background.

If I change the background color of the form, then the GIF appears on
the form correctly i.e. the background of the form shows through the
transparent part of the gif.

However, if I place a BackgroundImage on the form, the transparent part
of the form does not show the BackgroundImage of the form, rather is
shows the back color of the form. This obviously make the GIF not to be
"transparent".

Can anybody help?

Thanks

G



May 19 '06 #5
Many thanks Fred for your comprehensive help.

G

"Fred Hedges" <do******@spammuch.com> wrote in message
news:e4******************@news.demon.co.uk...
(1) Create a new User Control

(2) Override it's CreateParms property with this:

Protected Overrides ReadOnly Property CreateParams() As CreateParams

Get

Dim cp As CreateParams = MyBase.CreateParams
cp.ExStyle = cp.ExStyle Or WS_EX_TRANSPARENT

Return cp

End Get

End Property

(3) In Sub New(), add the following code:
Me.SetStyle(ControlStyles.SupportsTransparentBackC olor, True)
Me.UpdateStyles()
Me.BackColor = Color.Transparent
(4) Override the OnPaintBackground event, but don't put anything into it:

Protected Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs)
'
End Sub
(5) Import the GIF into your resources (Project Properties, Resources,
Images, Add Image...).

This will basically give you a transparent surface. Now you can draw your
.GIF onto this transparent surface any way you want, eg:

(6) Override the OnPaint event and use it to draw your image:
Protected Overrides Sub OnPaint(byval e As PaintEventArgs)

' Render our image here, no stretch, modify to stretch to fill
' the control if required.
e.Graphics.DrawImage ( My.Resources.WhateverMyGIFImageIsCalled, 0,
0 )

End Sub

Hope this helps.

"G .Net" <no********@email.com> wrote in message
news:jZ******************************@pipex.net...
Hi Fred

Ah, looks like exactly what I need!!!

However, bit of newbie so need help in exactly what to do. Could I
trouble you to give the steps I need?

G

"Fred Hedges" <do******@spammuch.com> wrote in message
news:e4*******************@news.demon.co.uk...
What you need to do is make a user control and then modify it's
transparent property on window construction. You then need to handle
"InvalidateEx" messages in order to force the parent to redraw your
background, rather than you. Funny you mention this because I had to do
this with a "working....." animation yesterday.

This sample is in C# but it's easy to convert. You won't be needing a
picture box. Just use DrawImage to render your GIF on the control
surface but overriding the paint event.

http://www.devnewsgroups.net/link.as...rol&lang=en%3E

"G .Net" <no********@email.com> wrote in message
news:Jf********************@pipex.net...
Hi

I have a form on which I have a picture box. I have placed a GIF as the
image for this picture box. The GIF has a transparent background.

If I change the background color of the form, then the GIF appears on
the form correctly i.e. the background of the form shows through the
transparent part of the gif.

However, if I place a BackgroundImage on the form, the transparent part
of the form does not show the BackgroundImage of the form, rather is
shows the back color of the form. This obviously make the GIF not to be
"transparent".

Can anybody help?

Thanks

G



May 20 '06 #6
Thanks gs.

G

"gs" <gs@nomail.nil> wrote in message
news:ej**************@TK2MSFTNGP05.phx.gbl...
that looks more like VB than c#
I think you will have to fresh out the last stub for OnPaintBackground
with painting you GB image
Imports System
Imports System.Windows.Forms

Public Class TransparentControl
Inherits Control

Private Const WS_EX_TRANSPARENT As Int32 = &H20

Public Sub New()
Me.SetStyle(ControlStyles.SupportsTransparentBackC olor, True)
Me.UpdateStyles()
Me.BackColor = Color.Transparent
End Sub

Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams
cp.ExStyle = cp.ExStyle Or WS_EX_TRANSPARENT
Return cp
End Get
End Property

Protected Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs)
' fresh out this partto pain the gb image
End Sub
a primitive example is from the vb help
Private Sub pictureBox1_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs)
' Create a local version of the graphics object for the PictureBox.
Dim g As Graphics = e.Graphics

' Draw a string on the PictureBox.
g.DrawString("This is a diagonal line drawn on the control", _
New Font("Arial", 10), Brushes.Red, New PointF(30.0F, 30.0F))
' Draw a line in the PictureBox.
g.DrawLine(System.Drawing.Pens.Red, pictureBox1.Left, _
pictureBox1.Top, pictureBox1.Right, pictureBox1.Bottom)
End Sub 'pictureBox1_Paint

but then if you already the GB image in some format (tif, bmp,) you may be
better off looking for some picture control to take care of that for you.
Hey, I am newbie to vb too. so I can help very much beyon what I can find
by goole or built help.

you may also want to look at the game snippets or starter kit/template. I
am sure there are plenty of examples for handling graphics

"G .Net" <no********@email.com> wrote in message
news:jZ******************************@pipex.net...
Hi Fred

Ah, looks like exactly what I need!!!

However, bit of newbie so need help in exactly what to do. Could I
trouble you to give the steps I need?

G

"Fred Hedges" <do******@spammuch.com> wrote in message
news:e4*******************@news.demon.co.uk...
What you need to do is make a user control and then modify it's
transparent property on window construction. You then need to handle
"InvalidateEx" messages in order to force the parent to redraw your
background, rather than you. Funny you mention this because I had to do
this with a "working....." animation yesterday.

This sample is in C# but it's easy to convert. You won't be needing a
picture box. Just use DrawImage to render your GIF on the control
surface but overriding the paint event.

http://www.devnewsgroups.net/link.as...rol&lang=en%3E

"G .Net" <no********@email.com> wrote in message
news:Jf********************@pipex.net...
Hi

I have a form on which I have a picture box. I have placed a GIF as the
image for this picture box. The GIF has a transparent background.

If I change the background color of the form, then the GIF appears on
the form correctly i.e. the background of the form shows through the
transparent part of the gif.

However, if I place a BackgroundImage on the form, the transparent part
of the form does not show the BackgroundImage of the form, rather is
shows the back color of the form. This obviously make the GIF not to be
"transparent".

Can anybody help?

Thanks

G



May 20 '06 #7
Yes thats correct. I couldn't find the C# version I used the other day, so
pasted the first VB version I came across, but did not edit the message to
take account of this. Actually, it turns out that this one is better.

"gs" <gs@nomail.nil> wrote in message
news:ej**************@TK2MSFTNGP05.phx.gbl...
that looks more like VB than c#
I think you will have to fresh out the last stub for OnPaintBackground
with painting you GB image
Imports System
Imports System.Windows.Forms

Public Class TransparentControl
Inherits Control

Private Const WS_EX_TRANSPARENT As Int32 = &H20

Public Sub New()
Me.SetStyle(ControlStyles.SupportsTransparentBackC olor, True)
Me.UpdateStyles()
Me.BackColor = Color.Transparent
End Sub

Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams
cp.ExStyle = cp.ExStyle Or WS_EX_TRANSPARENT
Return cp
End Get
End Property

Protected Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs)
' fresh out this partto pain the gb image
End Sub
a primitive example is from the vb help
Private Sub pictureBox1_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs)
' Create a local version of the graphics object for the PictureBox.
Dim g As Graphics = e.Graphics

' Draw a string on the PictureBox.
g.DrawString("This is a diagonal line drawn on the control", _
New Font("Arial", 10), Brushes.Red, New PointF(30.0F, 30.0F))
' Draw a line in the PictureBox.
g.DrawLine(System.Drawing.Pens.Red, pictureBox1.Left, _
pictureBox1.Top, pictureBox1.Right, pictureBox1.Bottom)
End Sub 'pictureBox1_Paint

but then if you already the GB image in some format (tif, bmp,) you may be
better off looking for some picture control to take care of that for you.
Hey, I am newbie to vb too. so I can help very much beyon what I can find
by goole or built help.

you may also want to look at the game snippets or starter kit/template. I
am sure there are plenty of examples for handling graphics

"G .Net" <no********@email.com> wrote in message
news:jZ******************************@pipex.net...
Hi Fred

Ah, looks like exactly what I need!!!

However, bit of newbie so need help in exactly what to do. Could I
trouble you to give the steps I need?

G

"Fred Hedges" <do******@spammuch.com> wrote in message
news:e4*******************@news.demon.co.uk...
What you need to do is make a user control and then modify it's
transparent property on window construction. You then need to handle
"InvalidateEx" messages in order to force the parent to redraw your
background, rather than you. Funny you mention this because I had to do
this with a "working....." animation yesterday.

This sample is in C# but it's easy to convert. You won't be needing a
picture box. Just use DrawImage to render your GIF on the control
surface but overriding the paint event.

http://www.devnewsgroups.net/link.as...rol&lang=en%3E

"G .Net" <no********@email.com> wrote in message
news:Jf********************@pipex.net...
Hi

I have a form on which I have a picture box. I have placed a GIF as the
image for this picture box. The GIF has a transparent background.

If I change the background color of the form, then the GIF appears on
the form correctly i.e. the background of the form shows through the
transparent part of the gif.

However, if I place a BackgroundImage on the form, the transparent part
of the form does not show the BackgroundImage of the form, rather is
shows the back color of the form. This obviously make the GIF not to be
"transparent".

Can anybody help?

Thanks

G



May 22 '06 #8

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

6 posts views Thread by lawrence | last post: by
3 posts views Thread by dave | last post: by
2 posts views Thread by Don Tucker | last post: by
3 posts views Thread by jackiepatti | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.