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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Картинки в окне, переключатель. (http://forum.oszone.net/showthread.php?t=197072)

semiono 19-01-2011 19:01 1592509

Картинки в окне, переключатель.
 
Нужно зделать окно 300x500 пикселей примерно, на окне разместить ComboBox() и пару квадратиков bmp, хотя лучше png.
Вообщем чтоб квадратики менять местами, левый на правый итп. через ComboBox[здесь некое название]
Я предпологаю далее зделать большее число квадратов на окне, заранее говорю чтоб было можно программу усложнить.
Ну вроде шахматных фигур нечто такое...
А конкретно это справочник гитарных аккордов будет... шесть на восемь картинок...
Мне только заготовка нужна для начала.

А вот картинки потом я надеюсь можно вкампилировать в exe? Хотелось бы одним файлом это зделать.

Из хелпа не ясно лишь как привязать "смену событий" к GUICtrlCreateCombo
Как мне через GUICtrlSetData() менять картинки (X Y)

Вот пока контрол нарисовал только...

Код:

#include <GUIConstantsEx.au3>

GUICreate('Chords',200,300)

GUICtrlCreateCombo('item1',10,10,180)
GUICtrlSetData(-1,'item2|item3','item3')

GUISetState()

While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd

Как мне получить результат нажатия GUICtrlSetData ?

madmasles 19-01-2011 20:08 1592549

Цитата:

Цитата semiono
не ясно лишь как привязать "смену событий" к GUICtrlCreateCombo »

Код:

#include <GUIConstantsEx.au3>

$sDefault = 'item2'
$hGui = GUICreate('Chords', 200, 300)
$hCombo = GUICtrlCreateCombo('', 10, 30, 180)
GUICtrlSetData(-1, 'item1|item2|item3|item4|item5|item6', $sDefault)
$hLabel = GUICtrlCreateLabel($sDefault, 10, 5, 180)
GUISetState()

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $hCombo
            GUICtrlSetData($hLabel, GUICtrlRead($hCombo))
    EndSwitch
WEnd

Цитата:

Цитата semiono
хотя лучше png »

По поводу картинок: Поддержка иконок и изображений, содержащих прозрачность (Alpha канал). Смотрите пример № 6.

Чтобы картинки записать в ресурсы exe-шника: FAQ по использованию ресурсов в AutoIt

semiono 19-01-2011 20:29 1592558

madmasles, может сразу напишешь пример, два квадрата BMP и местами (x, y) их поменять (GUICtrlSetData item1 item2)
ато я While/If/Than буду долго думать, я логически плохо умею мыслить. )

madmasles 19-01-2011 21:22 1592599

semiono,
Попробуйте так:
читать дальше »
Код:

#include <GUIConstantsEx.au3>
#include <Icons.au3>
#include <StaticConstants.au3>

Global Const $sRed = @ScriptDir & '\red.png'
Global Const $sGreen = @ScriptDir & '\green.png'
Global Const $sBlue = @ScriptDir & '\blue.png'
Global Const $sYellow = @ScriptDir & '\yellow.png'
$sDefault = 'Красный'

$hRed = _Icons_Bitmap_Load($sRed)
$hGreen = _Icons_Bitmap_Load($sGreen)
$hBlue = _Icons_Bitmap_Load($sBlue)
$hYellow = _Icons_Bitmap_Load($sYellow)


$hGui = GUICreate('Chords', 300, 340)
$hCombo = GUICtrlCreateCombo('', 10, 30, 280)
GUICtrlSetData(-1, 'Синий|Зеленый|Красный|Желтый', $sDefault)
$hLabel = GUICtrlCreateLabel('По умолчанию: ' & $sDefault, 10, 5, 280, 16, $SS_CENTER)
$hPic = GUICtrlCreatePic('', 22, 70, 256, 256)
_SetHImage($hPic, $hRed)
GUISetState()

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $hCombo
            $sFromCombo = GUICtrlRead($hCombo)
            GUICtrlSetData($hLabel, 'Вы выбрали: ' & $sFromCombo)
            Switch $sFromCombo
                Case 'Красный'
                    _SetHImage($hPic, $hRed)
                Case 'Зеленый'
                    _SetHImage($hPic, $hGreen)
                Case 'Синий'
                    _SetHImage($hPic, $hBlue)
                Case 'Желтый'
                    _SetHImage($hPic, $hYellow)
            EndSwitch
    EndSwitch
WEnd


Ссылка на библиотеку Icons.au3 в моем предыдущем посту. Не забудьте про нее. Картинки в прикрепленном архиве.

semiono 19-01-2011 21:53 1592613

Красиво! :)
---
Чтоб я вообще сам не думал, а где подправить, чтоб две картинки были одновременно рядом?



или вот ещё пример:



Впрочем попробую самостоятельно испортить Ваш код... ))

madmasles 19-01-2011 22:47 1592664

Цитата:

Цитата semiono
чтоб две картинки были одновременно рядом »

Вот Вам пример с 4-мя картинками рядом:
читать дальше »
Код:

#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <Icons.au3>

Dim $aPic[10] = [@ScriptDir & '\0.png', @ScriptDir & '\1.png', @ScriptDir & '\2.png', _
        @ScriptDir & '\3.png', @ScriptDir & '\4.png', @ScriptDir & '\5.png', _
        @ScriptDir & '\6.png', @ScriptDir & '\7.png', @ScriptDir & '\8.png', _
        @ScriptDir & '\9.png']
Dim $aPicControl[5] = [4]


$hGui = GUICreate('Счетчик', 250, 250, -1, -1)
$hInput = GUICtrlCreateInput('', 100, 10, 50, 18, BitOR($ES_NUMBER, $ES_CENTER, $ES_READONLY))
GUICtrlSetLimit(-1, 4)
For $i = 1 To $aPicControl[0]
    $aPicControl[$i] = GUICtrlCreatePic('', 77 + ($i - 1) * 24, 50, 24, 28)
    GUICtrlSetState(-1, $GUI_DISABLE)
    _SetImage($aPicControl[$i], $aPic[0])
Next
$hButton = GUICtrlCreateButton('Вперед', 100, 150, 50, 22)
GUISetState()

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $hButton
            GUICtrlSetState($hButton, $GUI_DISABLE)
            GUICtrlSetData($hInput, Random(1000, 9999, 1))
            _Set_Number(GUICtrlRead($hInput))
            GUICtrlSetState($hButton, $GUI_ENABLE)
    EndSwitch
WEnd

Func _Set_Number($n)
    Local $aNumber
    For $i = 1 To 4
        _SetImage($aPicControl[$i], $aPic[0])
    Next
    Sleep(100)
    $n = StringFormat('%04d', $n)
    $aNumber = StringSplit($n, '')
    For $i = 1 To $aPicControl[0]
        For $j = 0 To $aNumber[$i]
            _SetImage($aPicControl[$i], $aPic[$j])
            Sleep(150)
        Next
    Next
EndFunc  ;==>_Set_Number


semiono 19-01-2011 23:18 1592692

Я уже сам немного продвинулся в этом ))
Код:

$hPic1 = GUICtrlCreatePic('', 22, 70, 256, 256)
$hPic2 = GUICtrlCreatePic('', 220, 70, 256, 256)
_SetHImage($hPic1, $hRed)
_SetHImage($hPic2, $hGreen)
...
                Case '1'
                    _SetHImage($hPic1, $hRed)
                    _SetHImage($hPic2, $hGreen)
                Case '2'
                    _SetHImage($hPic1, $hGreen)
                    _SetHImage($hPic2, $hRed)
                Case '3'
                    _SetHImage($hPic1, $hBlue)
                    _SetHImage($hPic2, $hYellow)
                Case '4'
                    _SetHImage($hPic1, $hYellow)
                    _SetHImage($hPic2, $hRed)

Когда у меня будет таблица 6x8 картинок, я уже представил как там запутаться можно! )))

madmasles, однако Вы усложняете! Пример замечательный, хотя мне в нём всё менее понятно стало )))
Только казалось я был близок к пониманию.


Время: 00:41.

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