Jump to content



Photo

IconChooser UDF


  • Please log in to reply
6 replies to this topic

#1 Yashied

Yashied

    Happy in Moscow

  • MVPs
  • 2,513 posts

Posted 09 May 2011 - 11:40 AM

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_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.


Posted Image


IconChooser UDF Library v1.1
(Previous downloads: 71)

Attached File  IconChooser.au3   38.44KB   594 downloads


Description

AutoIt         
; #FUNCTION# ==================================================================================================================== ; Name...........: _IconChooserDialog ; Description....: Creates a "Change Icon" dialog box that enables the user to select an icon. ; Syntax.........: _IconChooserDialog ( [$sFile [, $iIndex [, $iSize [, $iFlags [, $hParent [, $sTitle]]]]]] ) ; Parameters.....: $sFile   - The path of the file that contains the initial icon. ;                  $iIndex  - The zero-based index of the initial icon. If this value is a negative number, will be initialized the ;                             icon whose resource identifier is equal to the absolute value of this value. ;                  $iSize   - The size of the initial displaying icons. This parameter can be in the range from 8 to 256. ;                  $iFlags  - The flags that defines a style of the dialog box. This parameter can be zero, (-1), ;                             or combination of the following values. ; ;                             $IC_FLAG_BROWSEFIlE ;                             $IC_FLAG_ICONSIZE ;                             $IC_FLAG_ICONLABEL (Not currently used) ;                             $IC_FLAG_RESIZABLEWINDOW ;                             $IC_FLAG_USEREGISTRY ;                             $IC_FLAG_USECACHE ;                             $IC_FLAG_EXPLORERSTYLE ;                             $IC_FLAG_DEFAULT ; ;                  $hParent - Handle to the window that owns the dialog box. ;                  $sTitle  - Title of the dialog box. ; Return values..: Success  - The array containing the following parameters: ; ;                             [0] - The path of the file that contains the selected icon. ;                             [1] - The index of the selected icon. ; ;                  Failure  - 0. ; Author.........: Yashied ; Modified.......: ; Remarks........: If $IC_FLAG_USEREGISTRY flag is set, the dialog's settings (window size and position, file path, etc.) will be ;                  taken from the registry and saved in the registry after closing the window to the following hive: ; ;                  HKEY_CURRENT_USER\Software\Y's\Common Data\Icon Chooser\1.x ; ;                  If $IC_FLAG_USECACHE flag is set, the icons will be cached to improve display performance at the following ;                  shows. All cached icons are located in a temporary directory in the following format: ; ;                  %TEMP%\IC-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.cache ; ;                  The maximum cache size is 250 MB. ; Related........: ; Link...........: ; Example........: Yes ; ===============================================================================================================================


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, 13 May 2011 - 08:57 PM.








#2 AdmiralAlkex

AdmiralAlkex

    I'm on a boat

  • MVPs
  • 4,493 posts

Posted 09 May 2011 - 12:00 PM

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)

#3 BrewManNH

BrewManNH

    באָבקעס מיט קודוצ׳ה

  • MVPs
  • 7,044 posts

Posted 09 May 2011 - 03:03 PM

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:

How to ask questions the smart way!

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 editorGUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.

GUIToolTip UDF Demo - Demo script to show how to use the GUIToolTip UDF to create and use customized tooltips.

Posted Image


#4 Yashied

Yashied

    Happy in Moscow

  • MVPs
  • 2,513 posts

Posted 09 May 2011 - 03:18 PM

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

It's the same problem as here.

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

Fixed.

#5 JScript

JScript

    Goodbye everybody, I got tired of this system adopted here!

  • Active Members
  • PipPipPipPipPipPip
  • 1,062 posts

Posted 09 May 2011 - 05:15 PM

Wonderful!!!Much better than the native function in Windows...
http://notebook.forumais.com (Forum Maintenance Notebooks and Desktop)http://autoitbrasil.com/ (AutoIt v3 Brazil!!!)
Spoiler

Posted Image Download Dropbox - Simplify your life!Your virtual HD wherever you go, anywhere!       


#6 Yashied

Yashied

    Happy in Moscow

  • MVPs
  • 2,513 posts

Posted 13 May 2011 - 05:57 PM

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.


#7 xeroTechnologiesLLC

xeroTechnologiesLLC

    Prodigy

  • Active Members
  • PipPipPip
  • 158 posts

Posted 07 April 2012 - 05:50 PM

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!




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users