Circular Command Button

I have the need to make a round command button.  I have the image of the 'UP' or un-pressed state and the 'DOWN' or pressed state.  I've tried using the standard command button using the graphical style, however I don't want to see the square button itself.  I've also tried using picture and image boxes, and changing the picture on the mouse_down and mouse_up events. This works better, but once again it shows me the square outline of the box.  This technique would be ok if I could somehow set a transparency coler key for the image box (so that only the circle button is painted), however I can not think of any way of doing this.  Does anyone have any ideas on how I can do this.  I prefer using win32 API's as I am going to be porting the entire project to C++ once the proof of concept is complete.
rkneppAsked:
Who is Participating?
 
bobbit31Connect With a Mentor Commented:
they won't be there if you use the image control as stated above... at least they aren't there for me.
0
 
Maxim10553Commented:
try using the image control. you should be able to change the picture on the mouse events and no annoying outlines.
0
 
bobbit31Commented:
i don't know if you've tried this already but try playing around with something like this:

use the graphical style for the button and put image on it

Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, _
ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, _
ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As _
Long) As Long


Private Sub Form_Load()
   Dim fwidth As Long, fheight As Long
   Dim rval As Long, nhwnd As Long
   
   fwidth = Command1.Width / Screen.TwipsPerPixelX
   fheight = Command1.Height / Screen.TwipsPerPixelY
   
   'Create Elliptic Region
   'nhwnd = CreateEllipticRgn(0, 0, fwidth, fheight)
   'Create Circular Region
   nhwnd = CreateEllipticRgn(0, _
               0, fheight, fheight)
   'Set Created Elliptic Region on form
   rval = SetWindowRgn(Command1.hWnd, nhwnd, True)
   rval = DeleteObject(nhwnd)

End Sub

you'll just have to adjust the x1, y1, x2, y2 coordinates of the circle to make it look right.

good luck!
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
OtanaCommented:
Is the background of your up- and down-images transparent?
0
 
rkneppAuthor Commented:
The 'UP' and 'DOWN' states of the images are transparent in PaintShopPro however they don't seems to be that way when I put them in the image control.  Do I have to use a specific image type (GIF instead of BMP)?  I have thought of using the 'SetWindowRgn' API call, but haven't tried it yet.
0
 
bobbit31Commented:
have you also tried using gifs with transparent backgrounds and the image control and then code something like this?

Private Sub Form_Load()

    Image1.Visible = True
    Image2.Visible = False

End Sub

Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
   Image1.Visible = False
   Image2.Visible = True
End Sub

Private Sub Image1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
   Image2.Visible = False
   Image1.Visible = True
End Sub
0
 
bobbit31Commented:
yeah, use gif to make transparent
0
 
rkneppAuthor Commented:
The 'UP' and 'DOWN' states of the images are transparent in PaintShopPro however they don't seems to be that way when I put them in the image control.  Do I have to use a specific image type (GIF instead of BMP)?  I have thought of using the 'SetWindowRgn' API call, but haven't tried it yet.
0
 
rkneppAuthor Commented:
Also, I don't want any focus rectangle around the button once it's been click (plus it won't have tabstop).
0
 
rkneppAuthor Commented:
Also, I don't want any focus rectangle around the button once it's been click (plus it won't have tabstop).
0
 
Maxim10553Commented:
did you try using the image control rknepp or are you just avoiding it?
0
 
rkneppAuthor Commented:
The above code snippets really helped! Although the line:

nhwnd = CreateEllipticRgn(0, _
              0, fheight, fheight)

should read as follows:

nhwnd = CreateEllipticRgn(0, _
              0, fwidth, fheight)

hehehe :-)

Only problem is that it gives the focus rectangle.
0
 
bobbit31Commented:
so you do not want to use the image control? it's easier.
0
 
rkneppAuthor Commented:
I am going to try the Image control... I just need some time to make the GIF and it's tranparency...
0
 
rkneppAuthor Commented:
Well, how about that! All I really needed was the transparent GIF using the image control, NOT the picture control!
0
 
rkneppAuthor Commented:
Now that was quick service!
0
 
bobbit31Commented:
glad to help!
0
All Courses

From novice to tech pro — start learning today.