 |
AutoHotkey Community Let's help each other out
|
| View previous topic :: View next topic |
| Author |
Message |
corrupt
Joined: 29 Dec 2004 Posts: 2446
|
Posted: Thu Jun 16, 2005 3:59 am Post subject: Graphic Buttons |
|
|
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
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
- compatible with previous release (2.1)
- added support for image types: .bmp, .gif, .jpg, .wmf, .emf, .ico when loaded from a custom dll file
- added a download for the custom dll file that contains a function for retrieving images stored in the dll
- added option to resize icons using custom dll method
- added AGB.ahk file - containing optional functions for loading images for use with the AddGraphicButton function
- added the ability to change images without having to load from source each time (specify image HWND)
- added a second demo script
version 2.1
- simplified usage
- image types currently supported: .bmp, .ico
- added the ability to change images
- added image rollover example for SampleButton1 in the demo script
- sample images will be downloaded by the script if not found in the Working directory
| Code: | ; ********************************
; 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)
Last edited by corrupt on Wed Jul 02, 2008 7:38 am; edited 22 times in total |
|
| Back to top |
|
 |
Rajat
Joined: 28 Mar 2004 Posts: 1687
|
Posted: Thu Jun 16, 2005 7:13 am Post subject: |
|
|
cool ! _________________
 |
|
| Back to top |
|
 |
Chris Site Admin
Joined: 02 Mar 2004 Posts: 10667
|
Posted: Thu Jun 16, 2005 12:08 pm Post subject: |
|
|
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. |
|
| Back to top |
|
 |
bob3150
Joined: 03 May 2005 Posts: 44
|
Posted: Sun Jul 03, 2005 1:06 pm Post subject: is it possible to use .png instead of .bmp |
|
|
| This is a really cool feature to use in guis. But is it also possible to use it with .png instead of .bmp? |
|
| Back to top |
|
 |
corrupt
Joined: 29 Dec 2004 Posts: 2446
|
Posted: Tue Jul 05, 2005 5:07 am Post subject: |
|
|
| Sorry, the current code will not support .png AFAIK |
|
| Back to top |
|
 |
Thalon Guest
|
Posted: Wed Jul 06, 2005 3:30 pm Post subject: |
|
|
THX a lot!
This is the code I searched for my programm!
2 thumbs up for corrupt!
Thalon |
|
| Back to top |
|
 |
Guest
|
Posted: Thu Jul 07, 2005 11:30 pm Post subject: |
|
|
@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 |
|
| Back to top |
|
 |
corrupt
Joined: 29 Dec 2004 Posts: 2446
|
Posted: Sun Aug 14, 2005 4:53 pm Post subject: |
|
|
Sorry for the delayed response. I missed your post somehow . Here's a good starting point. Feel free to ask if you get stuck with anything specific . |
|
| Back to top |
|
 |
hps
Joined: 19 Aug 2005 Posts: 14 Location: Germany
|
Posted: Fri Aug 19, 2005 3:46 pm Post subject: .ico ? |
|
|
Hello,
I've tried to change to without success.
What does mean ?
I would like to make my transparent icons real buttons, but if I convert them to bmps the transparancy get lost. |
|
| Back to top |
|
 |
Chris Site Admin
Joined: 02 Mar 2004 Posts: 10667
|
Posted: Sun Aug 21, 2005 12:13 pm Post subject: |
|
|
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. |
|
| Back to top |
|
 |
AGU Guest
|
Posted: Sun Aug 28, 2005 8:24 pm Post subject: |
|
|
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. |
|
| Back to top |
|
 |
corrupt
Joined: 29 Dec 2004 Posts: 2446
|
Posted: Sun Aug 28, 2005 9:54 pm Post subject: |
|
|
Updated the code in the first post to support using icons. Thanks for the suggestion AGU . |
|
| Back to top |
|
 |
corrupt
Joined: 29 Dec 2004 Posts: 2446
|
Posted: Sun Aug 28, 2005 9:56 pm Post subject: |
|
|
| Chris wrote: | | By the way, thanks to corrupt's work in this topic, I hope to add support for picture buttons soon. |
My master plan is working... hehe... hehe...
Thanks Chris  |
|
| Back to top |
|
 |
AGU Guest
|
|
| Back to top |
|
 |
corrupt
Joined: 29 Dec 2004 Posts: 2446
|
|
| Back to top |
|
 |
|
|
You can post new topics in this forum You can reply to topics in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|