Sign in to follow this  
Followers 0

IconChooser UDF

8 posts in this topic

#1 ·  Posted (edited)

LAST VERSION - 1.1

13-May-11

This library contains only one function which displays a dialog box that allows the user to choose an icon from the selection available embedded in a resource such as an executable or DLL file. Of course, there is a PickIconDlg() API function but the dialog box created by this library has the following advantages:

  • Ability to resize the displayed icons.
  • Ability to resize the dialog box.
  • Ability to save the window's settings (size, position, etc.) in the registry.
  • Fully customizable appearance a dialog box.
  • More pleasing appearance.

IMPORTANT This library registers the following Windows Message (WM):

WM_COMMAND

WM_CONTEXTMENU

WM_GETMINMAXINFO

WM_NOTIFY

WM_SYSCOMMAND

If you use in your code one of these messages, you should call handlers from this library until returns from your handlers, otherwise, the dialog box will not work properly, for example:

Func MY_WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    Local $Result = IC_WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    If $Result <> $GUI_RUNDEFMSG Then
        Return $Result
    EndIf

    ...

EndFunc

As usualy, I will be glad to any feedback and suggestions.

 

IconChooser.png

IconChooser UDF Library v1.1

Previous downloads: 71

IconChooser.au3

Example

#Include <IconChooser.au3>

Global $Ico[2] = [@SystemDir & '\shell32.dll', 23]

$hForm = GUICreate('MyGUI', 160, 160)
$Button = GUICtrlCreateButton('Change Icon...', 25, 130, 110, 23)
$Icon = GUICtrlCreateIcon($Ico[0], -(1 + $Ico[1]), 64, 50, 32, 32)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case -3
            ExitLoop
        Case $Button
            $Data = _IconChooserDialog($Ico[0], $Ico[1], 32, -1, $hForm)
            If IsArray($Data) Then
                GUICtrlSetImage($Icon, $Data[0], -(1 + $Data[1]))
                $Ico = $Data
            EndIf
    EndSwitch
WEnd
Edited by Yashied

Share this post


Link to post
Share on other sites



#2 ·  Posted

Interesting, but FYI there seems to be lots of problems on x64.

The relosution dropdown, and the gui's icon isn't replaced. Probably more, but I don't have time to go over it all now, was just on my way out.

Question: If your main OS isn't x64, then why don't you install a vm so you can test stuff yourself instead of rely on my sleep-deprived reports? :unsure:

(I like VMware Workstation)

Share this post


Link to post
Share on other sites

#3 ·  Posted

Very nice, it will help me in choosing an icon for programs I create. Previously I'd just loop through them until I saw one I liked. Now I can pick one out a LOT easier. :unsure:


If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites

#4 ·  Posted

Interesting, but FYI there seems to be lots of problems on x64.

It's the same problem as

$tagNMITEMACTIVATE = $tagNMHDR & ';uint Aligment;int Index;int SubItem;uint NewState;uint OldState;uint Changed;int X;int Y;lparam lParam;uint KeyFlags'

Fixed.

Share this post


Link to post
Share on other sites

#5 ·  Posted

Wonderful!!!Much better than the native function in Windows...


http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!)

Somewhere Out ThereJames Ingram

somewh10.png

dropbo10.pngDownload Dropbox - Simplify your life!
Your virtual HD wherever you go, anywhere!

Share this post


Link to post
Share on other sites

#6 ·  Posted

The library has been updated to version 1.1.

Changes

  • Added icon cache (speeds up the display a few times), use $IC_FLAG_USECACHE flag. All cached icons are located in a temporary directory in the following format:

    %TEMP%\IC-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.cache

  • Improved logic save the window's parameters to the registry.
  • Improved alignment of the dialog window to the parent window in Windows Vista+.
  • Added a hotkey F5 to refresh the icons.
  • Fixed minor bugs in the code.

Share this post


Link to post
Share on other sites

#7 ·  Posted

I know this is a bit old post, but wanted to drop in my thanks for creating this.

We are working on a project that this will fit in very nicely and wanted to express my appreciation for the skill shown here.

Very amazing work, Yashied!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0