Показать полную графическую версию : [решено] Можно ли сделать ComboBox с иконками
Можно ли сделать ComboBox с иконками наподобие такого:
http://fincapital.ucoz.ru/image/Combo.png
если можно подскажите как, возможно и через редактор KODA есть варианты?
похоже сам нашел, попробую _GUICtrlComboBoxEx_AddString($hWnd, $sText[, $iImage = -1[, $iSelecteImage = -1[, $iOverlayImage = -1[, $iIndent = -1[, $iParam = -1]]]]]) из GuiComboBoxEx.au3
#include <GUIConstants.au3>
#include <GUIComboBoxEx.au3>
#include <GUIImageList.au3>
;
$hMainGUI = GUICreate("ComboBox With Icons", 300, 150)
$hComboBox = _GUICtrlComboBoxEx_Create($hMainGUI, "", 20, 60, 260, 390, $CBS_DROPDOWNLIST)
$hImageList = _GUIImageList_Create(16, 16, 5, BitOr($ILC_MASK, $ILC_COLOR32), 1)
_GUICtrlComboBoxEx_SetImageList($hComboBox, $hImageList)
For $i = 0 To 50
$nImage = _GUIImageList_AddIcon($hImageList, "Shell32.dll", $i)
_GUICtrlComboBoxEx_AddString($hComboBox, "Icon " & $i, $nImage, $nImage)
Next
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
_GUIImageList_Destroy($hImageList)
Exit
EndSwitch
WEnd
Спасибо Creat0R, за оперативность у меня пример посложнее получился, если можно поясни
комментарии
#include <GUIConstants.au3>
#include <GuiComboBoxEx.au3>
#include <GuiImageList.au3>
#Region ### START Koda GUI section ### Form=
;~ создали форму
$Form1 = GUICreate("Test Form", 444, 222, 193, 115)
;~ создаем combo, указывая хэндл окна
$exCombo = _GUICtrlComboBoxEx_Create($form1,"",2, 2, 394, 100)
;~ создаем невидимый или виртуальный список картинок
;~ 16*16 будущий размер иконок, 5 - Use a 32 bit DIB section(видимо глубина цвета иконок)
;~ 1 - Use a mask (использовать маску,чтобы иконки казались на прозрачном фоне)
;~ 2 - The images in the lists are mirrored (не знаю что за параметр)
$IL=_GUIImageList_Create(16, 16, 5, 3)
;~ добавляем иконки, можно в цикле, если из библиотеки
For $x = 0 To 2
_GUIImageList_AddIcon ($IL, @SystemDir & "\shell32.dll", $x)
Next
;~ здесь по-видимому указывается цвет маски и рисунки накладываются??? для создания эффекта прозрачности
_GUIImageList_Add ($IL, _GUICtrlComboBoxEx_CreateSolidBitMap ($exCombo, 0xFF0000, 16, 16))
_GUIImageList_Add ($IL, _GUICtrlComboBoxEx_CreateSolidBitMap ($exCombo, 0x00FF00, 16, 16))
_GUIImageList_Add ($IL, _GUICtrlComboBoxEx_CreateSolidBitMap ($exCombo, 0x0000FF, 16, 16))
;~ три раза наверно потому что выпадающий список как раз на 3 элемента
;~ далее привязываем созданый список иконок/картинок к combo
_GUICtrlComboBoxEx_SetImageList ($exCombo, $IL)
;~ возможно кэшируем иконки???
_GUICtrlComboBoxEx_InitStorage ($exCombo, 150, 300)
;~ добавляем новую строку в combo с указанием индекса иконки из ImageList
_GUICtrlComboBoxEx_AddString($exCombo,"be-be-be",0,0)
_GUICtrlComboBoxEx_AddString($exCombo,"be-be-be",1,1)
_GUICtrlComboBoxEx_AddString($exCombo,"be-be-be",2,2)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
кстати как код цветным сделать, а то стыдно уже
Simple Text Colorizer???
если можно поясни
комментарии »
Так там же есть комментарии, и чем описания из справки не устраивают? :)
как код цветным сделать »
Au3ToPost (http://creator-lab.ucoz.ru/load/3-1-0-18).
ну комментарии то я сам и писал, вот и хочу знать правильно ли я понимаю код, в некоторых ставил знаки вопросов в которых сомневаюсь, про справку будет глупая отмазка - английский понимаю частично.
хочу знать правильно ли я понимаю код »
Правильно, вот только много лишнего...
#include <GUIConstants.au3>
#include <GuiComboBoxEx.au3>
#include <GuiImageList.au3>
;
#Region ### START Koda GUI section ### Form=
;~ создали форму
$Form1 = GUICreate("Test Form", 444, 222, 193, 115)
;~ создаем combo, указывая хэндл окна
$exCombo = _GUICtrlComboBoxEx_Create($Form1, "", 2, 2, 394, 100)
;~ создаем невидимый или виртуальный список картинок
;~ 16*16 будущий размер иконок, 5 - Use a 32 bit DIB section(видимо глубина цвета иконок)
;~ 1 - Use a mask (использовать маску,чтобы иконки казались на прозрачном фоне)
;~ 2 - The images in the lists are mirrored (не знаю что за параметр)
$IL = _GUIImageList_Create(16, 16, 5, 3)
;~ добавляем иконки, можно в цикле, если из библиотеки
For $x = 0 To 2
_GUIImageList_AddIcon($IL, @SystemDir & "\shell32.dll", $x)
;~ добавляем новую строку в combo с указанием индекса иконки из ImageList
_GUICtrlComboBoxEx_AddString($exCombo, "be-be-be", $x, $x)
Next
;~ далее привязываем созданый список иконок/картинок к combo
_GUICtrlComboBoxEx_SetImageList($exCombo, $IL)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
;
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
возник один ньюанс, какой стиль использовать чтобы получился курсор выделения на весь Combo, у меня получается курсор только на текст с иконкой.
чтобы получился курсор выделения на весь Combo »
Что значит "курсор выделения"? Выделяется только необходимая часть (пустоту же нельзя выделить :) ), и это вроде стилями (или другими методами) не изменить.
а как же пример выше, в 1С, на рисунке выделена полностью вся строка до границы выпадающего списка, да и в стандартном Combo тоже также работает выделение?
на рисунке выделена полностью вся строка »
Поэтому я и спросил; «Что значит "курсор выделения"?»
Этот эффект замечается также в моём первом примере, там используется $CBS_DROPDOWNLIST.
Но ввод текста будет недоступен, а иначе в принципе никак не получится.
не знаю или я что то не понимаю или неправильно спрашиваю
у меня получается так:
http://fincapital.ucoz.ru/image/Combo2.png
а надо так
http://fincapital.ucoz.ru/image/Combo.png
Выделение по ширине равно длине текста а мне надо чтобы выделение было равно ширине выпадающего списка.
Вот что выдает AU3Info по 1С окну:
>>>> Control <<<<
Class: ComboBox
Instance: 1
ClassnameNN: ComboBox1
Advanced (Class): [CLASS:ComboBox; INSTANCE:1]
ID: 4356
Text:
Position: 11, 21
Size: 135, 24
ControlClick Coords: 85, 18
Style: 0x50030013
ExStyle: 0x00000004
Handle: 0x002403A8
Стили моего combo: Style: 0x56000413 ExStyle: 0x00000000
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.