Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Можно ли сделать ComboBox с иконками (http://forum.oszone.net/showthread.php?t=143391)

malev 24-06-2009 14:31 1150671

Можно ли сделать ComboBox с иконками
 
Можно ли сделать ComboBox с иконками наподобие такого:

если можно подскажите как, возможно и через редактор KODA есть варианты?

похоже сам нашел, попробую _GUICtrlComboBoxEx_AddString($hWnd, $sText[, $iImage = -1[, $iSelecteImage = -1[, $iOverlayImage = -1[, $iIndent = -1[, $iParam = -1]]]]]) из GuiComboBoxEx.au3

Creat0R 24-06-2009 15:59 1150746

Код:

#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 1150759

Спасибо 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 1150767

Цитата:

Цитата malev
если можно поясни
комментарии »

Так там же есть комментарии, и чем описания из справки не устраивают? :)

Цитата:

Цитата malev
как код цветным сделать »

Au3ToPost.

malev 24-06-2009 16:47 1150786

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

Creat0R 24-06-2009 23:40 1151061

Цитата:

Цитата malev
хочу знать правильно ли я понимаю код »

Правильно, вот только много лишнего...

Код:

#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 1151216

Спасибо, вопрос решен.

malev 25-06-2009 14:27 1151443

возник один ньюанс, какой стиль использовать чтобы получился курсор выделения на весь Combo, у меня получается курсор только на текст с иконкой.

Creat0R 25-06-2009 14:43 1151459

Цитата:

Цитата malev
чтобы получился курсор выделения на весь Combo »

Что значит "курсор выделения"? Выделяется только необходимая часть (пустоту же нельзя выделить :) ), и это вроде стилями (или другими методами) не изменить.

malev 25-06-2009 16:51 1151556

а как же пример выше, в 1С, на рисунке выделена полностью вся строка до границы выпадающего списка, да и в стандартном Combo тоже также работает выделение?

Creat0R 25-06-2009 17:14 1151577

Цитата:

Цитата malev
на рисунке выделена полностью вся строка »

Поэтому я и спросил; «Что значит "курсор выделения"?»

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

malev 26-06-2009 08:24 1152047

не знаю или я что то не понимаю или неправильно спрашиваю
у меня получается так:

а надо так

Выделение по ширине равно длине текста а мне надо чтобы выделение было равно ширине выпадающего списка.

Вот что выдает 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


Время: 21:21.

Время: 21:21.
© OSzone.net 2001-