Что нового

[Элементы GUI] Использование Image листа в кнопках

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Здравствуйте, на сей раз у меня вопрос к данным элементам:
Код:
_GUIImageList_Create() and _GUIImageList_AddIcon()
_GUICtrlButton_Create() and _GUICtrlButton_SetImageList()

как приложить каждую иконку из листа изображений к кнопке, если иконок к примеру - 10 и кнопок столько же и для каждой кнопки иную иконку. Пример из сапорта "вроде" бы понятно но не слишком, там как понимаю создается ~2 листов изображений. Меня интересует как бы это можно сделать немого компактней без лишних манипуляций.


Добавлено:
Сообщение автоматически объединено:

Немного пораскинув серым веществом, покопался в сапортовском примере "соорудив" подобный скрипт:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <guibutton.au3>
#include <guiimagelist.au3>
Dim $Button[4], $Position[4] = [0, 32, 64], $icolist[4] = ["44.ico", "12.ico", "10603.ico"]
$Window = GUICreate("Form1", 111, 552, 886, 42)
For $i = 0 To 3
	$Button[$i] = GUICtrlCreateButton('', 0, $Position[$i], 32, 32)
Next
For $k = 0 To 3
	setimagelist($Button[$k], $icolist[$k])
Next
GUISetState(@SW_SHOW, $Window)
While 1
	$msg = GUIGetMsg()
	Switch $msg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
Func setimagelist(ByRef $buttons, ByRef $icon)
	Local $listim
	$listim = _GUIImageList_Create(26, 26, 5)
	_GUIImageList_AddIcon($listim, $icon)
	_GUICtrlButton_SetImageList($buttons, $listim, 4)
EndFunc

Снова немного не задачка, в первую кнопку не вставляется изображение :(


Добавлено:
Сообщение автоматически объединено:

Просьба извинить, это у меня промашка вышла с массивами)
Код:
Global $Button[3], $Position[3] = [0, 32, 64], $icolist[3] = ["44.ico", "12.ico", "10603.ico"] ; обьявление не по 4 а по 3 надо (1-ая позиция в массиве уходит на 0 т.е. от 0)
_ArrayDisplay($icolist)
$Window = GUICreate("Form1", 111, 552, 886, 42)
For $i = 0 To 2 ;и тут в циклах по всей видимости не то выходило =)
	$Button[$i] = GUICtrlCreateButton('', 0, $Position[$i], 32, 32)
Next
For $k = 0 To 2
	setimagelist($Button[$k], $icolist[$k])
Next

тема решена :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, ваш Администратор.





Это касается и заголовка темы в том числе.
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
смутно понял что нужно, но вроде присвоить кнопке иконку
я бы сделал так
Код:
Dim  $Position[3][2] = [[0,"44.ico"], [32,"12.ico"], [64 , "10603.ico"]]
$Window = GUICreate("Form1", 111, 552, 886, 42)
For $i = 0 To UBound($Position) - 1
  $Button = GUICtrlCreateButton($i, 0, $Position[$i][0], 32, 32)
	GUICtrlSetImage($Button,$Position[$i][1])
Next
GUISetState(@SW_SHOW, $Window)
While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
 
Автор
MnM

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Код:
Dim  $Position[3][2] = [[0,"44.ico"], [32,"12.ico"], [64 , "10603.ico"]]
$Window = GUICreate("Form1", 111, 552, 886, 42)
For $i = 0 To UBound($Position) - 1
  $Button = GUICtrlCreateButton($i, 0, $Position[$i][0], 32, 32)
    GUICtrlSetImage($Button,$Position[$i][1])
Next
GUISetState(@SW_SHOW, $Window)
While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
Joiner, безусловно, ваш пример более компактней(на счет массива), но я думаю что при создании кнопки не стоит присваивать ей в Caption её порядковый №, да и к тому же GUICtrlSetImage() по моему мнению превращает кнопку в сплошную не красивую иконку :-[ _GUICtrlButton_SetImageList() с этим справляется чуть лучше :whistle:
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
MnM
это всего лишь пример, как можно сделать компактнее. :smile:
и создание и присвоение иконок все в одном цикле. двумерный массив позволяет это сделать
Код:
For $i = 0 To UBound($Position) - 1
  $Button = GUICtrlCreateButton('', 0, $Position[$i][0], 32, 32)
    setimagelist($Button,$Position[$i][1])
Next
 
Верх