PDA

Показать полную графическую версию : [решено] Можно ли сделать ComboBox с иконками


malev
24-06-2009, 14:31
Можно ли сделать 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

Creat0R
24-06-2009, 15:59
#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

malev
24-06-2009, 16:08
Спасибо 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???

Creat0R
24-06-2009, 16:19
если можно поясни
комментарии »
Так там же есть комментарии, и чем описания из справки не устраивают? :)

как код цветным сделать »
Au3ToPost (http://creator-lab.ucoz.ru/load/3-1-0-18).

malev
24-06-2009, 16:47
ну комментарии то я сам и писал, вот и хочу знать правильно ли я понимаю код, в некоторых ставил знаки вопросов в которых сомневаюсь, про справку будет глупая отмазка - английский понимаю частично.

Creat0R
24-06-2009, 23:40
хочу знать правильно ли я понимаю код »
Правильно, вот только много лишнего...

#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

malev
25-06-2009, 09:28
Спасибо, вопрос решен.

malev
25-06-2009, 14:27
возник один ньюанс, какой стиль использовать чтобы получился курсор выделения на весь Combo, у меня получается курсор только на текст с иконкой.

Creat0R
25-06-2009, 14:43
чтобы получился курсор выделения на весь Combo »
Что значит "курсор выделения"? Выделяется только необходимая часть (пустоту же нельзя выделить :) ), и это вроде стилями (или другими методами) не изменить.

malev
25-06-2009, 16:51
а как же пример выше, в 1С, на рисунке выделена полностью вся строка до границы выпадающего списка, да и в стандартном Combo тоже также работает выделение?

Creat0R
25-06-2009, 17:14
на рисунке выделена полностью вся строка »
Поэтому я и спросил; «Что значит "курсор выделения"?»

Этот эффект замечается также в моём первом примере, там используется $CBS_DROPDOWNLIST.
Но ввод текста будет недоступен, а иначе в принципе никак не получится.

malev
26-06-2009, 08:24
не знаю или я что то не понимаю или неправильно спрашиваю
у меня получается так:
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