Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Graphic Buttons


  • Please log in to reply
18 replies to this topic
corrupt
  • Members
  • 2558 posts
  • Last active: Nov 01 2014 03:23 PM
  • Joined: 29 Dec 2004
Here's a generic function that can be used to add graphic buttons to AutoHotkey GUI scripts that should offer a bit of flexibility. Enjoy :)

Posted Image

Download version 2.2 (sample scripts, functions)
Download custom dll (Includes a function for extracting images in the dll - Use ResHacker to add images - type: RCDATA)

Updated to version 2.2

[*:2g01qlxz] compatible with previous release (2.1)
[*:2g01qlxz] added support for image types: .bmp, .gif, .jpg, .wmf, .emf, .ico when loaded from a custom dll file
[*:2g01qlxz] added a download for the custom dll file that contains a function for retrieving images stored in the dll
[*:2g01qlxz] added option to resize icons using custom dll method
[*:2g01qlxz] added AGB.ahk file - containing optional functions for loading images for use with the AddGraphicButton function
[*:2g01qlxz] added the ability to change images without having to load from source each time (specify image HWND)
[*:2g01qlxz] added a second demo scriptversion 2.1
[*:2g01qlxz] simplified usage
[*:2g01qlxz] image types currently supported: .bmp, .ico
[*:2g01qlxz] added the ability to change images
[*:2g01qlxz] added image rollover example for SampleButton1 in the demo script
[*:2g01qlxz] sample images will be downloaded by the script if not found in the Working directory
; ********************************
; Basic Demo Script (download contains additional functionality)
; ********************************

; Download sample images if necessary
IfNotExist %A_WorkingDir%\testbmp.bmp
{
    SplashTextOn, 300, 30, !, Downloading images. Please wait...
	URLDownloadToFile http://www.autohotkey.net/~corr/ahk.bmp, ahk.bmp
	URLDownloadToFile http://www.autohotkey.net/~corr/testbmp.bmp, testbmp.bmp
	URLDownloadToFile http://www.autohotkey.net/~corr/test2.bmp, test2.bmp
    SplashTextOff
}
; Create the buttons  
Gui, Add, Button, h30 w140 gNbutton, Normal Button  
AddGraphicButton("SampleButton1", A_WorkingDir . "\testbmp.bmp", "h30 w140 gMyButton", 30, 140)
AddGraphicButton("SampleButton2", A_WorkingDir . "\ahk.bmp", "h30 w140 gMyButton", 80, 140) 
Gui, Add, Button, h30 w140 gNbutton, Another Normal Button 
AddGraphicButton("SampleButton3", A_WorkingDir . "\test2.bmp", "h30 w140 gMyButton", 20, 130) 

; Show the window 
Gui, Show,, Bitmap Buttons 

; Image rollover for SampleButton1
OnMessage(0x200, "MouseMove")
OnMessage(0x2A3, "MouseLeave")
OnMessage(0x202, "MouseLeave") ; Restore image on LBUTTONUP
Return 

MouseLeave(wParam, lParam, msg, hwnd)
{
  Global
  If (hwnd = SampleButton1_hwnd)
    AddGraphicButton("SampleButton1", A_WorkingDir . "\testbmp.bmp", "h30 w140 gMyButton", 30, 140) 
  Return
}
MouseMove(wParam, lParam, msg, hwnd)
{
  Global
  Static _LastButtonData = true
  If (hwnd = SampleButton1_hwnd)
    If (_LastButtonData != SampleButton1_hwnd)
      AddGraphicButton("SampleButton1", A_WorkingDir . "\ahk.bmp", "h30 w140 gMyButton", 60, 120) 
  _LastButtonData := hwnd
  Return
}

MyButton: 
MsgBox, Graphic button clicked :) 
return 

Nbutton: 
MsgBox, Normal button Clicked :)
AddGraphicButton("SampleButton3", A_WinDir . "\clouds.bmp", "h30 w140 gMyButton", 20, 130)
Return 

GuiClose: 
ExitApp 



; ******************************************************************* 
; AddGraphicButton.ahk 
; ******************************************************************* 
; Version: 2.2 Updated: May 20, 2007 
; by corrupt 
; ******************************************************************* 
; VariableName = variable name for the button 
; ImgPath = Path to the image to be displayed 
; Options = AutoHotkey button options (g label, button size, etc...) 
; bHeight = Image height (default = 32) 
; bWidth = Image width (default = 32) 
; ******************************************************************* 
; note: 
; - calling the function again with the same variable name will 
; modify the image on the button 
; ******************************************************************* 
AddGraphicButton(VariableName, ImgPath, Options="", bHeight=32, bWidth=32) 
{ 
Global 
Local ImgType, ImgType1, ImgPath0, ImgPath1, ImgPath2, hwndmode 
; BS_BITMAP := 128, IMAGE_BITMAP := 0, BS_ICON := 64, IMAGE_ICON := 1 
Static LR_LOADFROMFILE := 16 
Static BM_SETIMAGE := 247 
Static NULL 
SplitPath, ImgPath,,, ImgType1 
If ImgPath is float 
{ 
  ImgType1 := (SubStr(ImgPath, 1, 1)  = "0") ? "bmp" : "ico" 
  StringSplit, ImgPath, ImgPath,`. 
  %VariableName%_img := ImgPath2 
  hwndmode := true 
} 
ImgTYpe := (ImgType1 = "bmp") ? 128 : 64 
If (%VariableName%_img != "") AND !(hwndmode) 
  DllCall("DeleteObject", "UInt", %VariableName%_img) 
If (%VariableName%_hwnd = "") 
  Gui, Add, Button,  v%VariableName% hwnd%VariableName%_hwnd +%ImgTYpe% %Options% 
ImgType := (ImgType1 = "bmp") ? 0 : 1 
If !(hwndmode) 
  %VariableName%_img := DllCall("LoadImage", "UInt", NULL, "Str", ImgPath, "UInt", ImgType, "Int", bWidth, "Int", bHeight, "UInt", LR_LOADFROMFILE, "UInt") 
DllCall("SendMessage", "UInt", %VariableName%_hwnd, "UInt", BM_SETIMAGE, "UInt", ImgType,  "UInt", %VariableName%_img) 
Return, %VariableName%_img ; Return the handle to the image 
} 
 
Download previous version (2.1) working sample script (images included)

Rajat
  • Members
  • 1904 posts
  • Last active: Jul 17 2015 07:45 AM
  • Joined: 28 Mar 2004
cool !

MIA

CleanNews.in : Bite sized latest news headlines from India with zero bloat


Chris
  • Administrators
  • 10727 posts
  • Last active:
  • Joined: 02 Mar 2004
That's a great script. It also teaches me how to add this feature to the program, so I've made a note do so for a future version.

Thanks.

bob3150
  • Members
  • 44 posts
  • Last active: Apr 09 2006 11:15 AM
  • Joined: 03 May 2005
This is a really cool feature to use in guis. But is it also possible to use it with .png instead of .bmp?

corrupt
  • Members
  • 2558 posts
  • Last active: Nov 01 2014 03:23 PM
  • Joined: 29 Dec 2004
Sorry, the current code will not support .png AFAIK

Thalon
  • Guests
  • Last active:
  • Joined: --
THX a lot!

This is the code I searched for my programm!

2 thumbs up for corrupt!

Thalon

  • Guests
  • Last active:
  • Joined: --
@corrupt
can u please tell me how did u find the DllCall functions u used in here because i want to do somethings with it too ,.,, but dont have any info.. or any website address where i can find it...
Thanks

corrupt
  • Members
  • 2558 posts
  • Last active: Nov 01 2014 03:23 PM
  • Joined: 29 Dec 2004
Sorry for the delayed response. I missed your post somehow :oops: . Here's a good starting point. Feel free to ask if you get stuck with anything specific :) .

hps
  • Members
  • 14 posts
  • Last active: Nov 07 2007 06:34 PM
  • Joined: 19 Aug 2005
Hello,

I've tried to change
IMAGE_BITMAP
to
IMAGE_ICON
without success.

What does
+0x80
mean ?

I would like to make my transparent icons real buttons, but if I convert them to bmps the transparancy get lost.

Chris
  • Administrators
  • 10727 posts
  • Last active:
  • Joined: 02 Mar 2004
0x80 is BS_BITMAP, which is a style that specifies that the button displays a bitmap.

By contrast, 0x40 is BS_ICON, which specifies that the button displays an icon.

By the way, thanks to corrupt's work in this topic, I hope to add support for picture buttons soon.

AGU
  • Guests
  • Last active:
  • Joined: --
How do I have to adjust the code, that it shows an icon instead of a bitmap?

Replacing:

0x80 with 0x40
IMAGE_BITMAP with IMAGE_ICON

didn't do the job. I don't know anything about DllCall, so it's very hard to understand what the code does at all.

corrupt
  • Members
  • 2558 posts
  • Last active: Nov 01 2014 03:23 PM
  • Joined: 29 Dec 2004
Updated the code in the first post to support using icons. Thanks for the suggestion AGU :) .

corrupt
  • Members
  • 2558 posts
  • Last active: Nov 01 2014 03:23 PM
  • Joined: 29 Dec 2004

By the way, thanks to corrupt's work in this topic, I hope to add support for picture buttons soon.

:twisted: My master plan is working... hehe... hehe... :twisted:

:lol:

Thanks Chris :D

AGU
  • Guests
  • Last active:
  • Joined: --
thanks for your work concerning icon support.

And I hail to the master plan of corrupt. :wink:

btw. reading this thread I played a little bit around at these API websites and found these.

http://www.mentalis.... ... maps.shtml
http://msdn2.microso...y/ms647998.aspx

Is it about those icons beside menu items? How about integrating it in your evil ;) masterplan?

BrandonHotkey
  • Members
  • 691 posts
  • Last active: Oct 21 2015 09:41 PM
  • Joined: 21 May 2012

Hello, I cannot find working archive under the link Download version 2.2 (sample scripts, functions)

also, is it possible to create icons from png file? Also images.dll looks damaged - resource hacker cannot find any images (v3.6.0.92 running on Win XP).