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

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

Centrinar 07-05-2010 15:52 1408738

Помогите правильно создать GUI окно с элементами
 
Я продолжаю изучение GUI и вот еще пара глупых вопросов. Создаю GUI со вкладками и чекбоксами вроде делаю все правильно но на первой вкладке чекбоксы не работают, а работают только на втрой. Где ошибка? И можно ли как то сократить скрипт т.е. составить более грамотно? СПАСИБО
PHP код:

#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#requireadmin
#NoTrayIcon


Global $sProgs 'Setup1.exe=Прог1|Seup2.exe=Прог2|Seup3.exe=Прог3|Seup4.exe=Прог4|Seup5.exe=Прог5' 
Global $sProgs2 'Setup1.exe=Прог1|Seup2.exe=Прог2|Seup3.exe=Прог3|Seup4.exe=Прог4|Seup5.exe=Прог5' 

Global Const $aProgs StringSplit($sProgs'|')
Global Const 
$aProgs2 StringSplit($sProgs2'|')
Global 
$anCheckBoxes[$aProgs[0]+1]
Global 
$aCheckedIcons[$aProgs[0]+1]
Global 
$aUnCheckedIcons[$aProgs[0]+1]
Global 
$aCompleteIcons[$aProgs[0]+1]
Global 
$aInstalledIcons[$aProgs[0]+1]
Global 
$anCheckBoxes2[$aProgs2[0]+1]
Global 
$aCheckedIcons2[$aProgs2[0]+1]
Global 
$aUnCheckedIcons2[$aProgs2[0]+1]
Global 
$aCompleteIcons2[$aProgs2[0]+1]
Global 
$aInstalledIcons2[$aProgs2[0]+1]

GUICreate("My GUI Tab",600,550)  
GUISetBkColor(0xFFFFFF)
$nStart GUICtrlCreateButton("Выполнить"3051015030)
$tab=GUICtrlCreateTab (10,10580,480)
GUISetBkColor(0xFFFFFF)
$tab0=GUICtrlCreateTabitem ("tab0")
GUISetBkColor(0xFFFFFF)
$iTop 35
$iLeft 
15
For $i 1 To $aProgs[0]
    
$aCheckedIcons[$i] = "common\images\01.ico"
    
$aUnCheckedIcons[$i] = "common\images\01.ico"
    
$aInstalledIcons[$i] = "common\images\03.ico"
    
$aCompleteIcons[$i] = "common\images\02.ico"
    
$anCheckBoxes[$i] = _GUICtrlCreateCheckboxEx(StringRegExpReplace($aProgs[$i], '^.*='''), $iLeft$iTop, -115,  $aUnCheckedIcons[$i])
    
$iTop += 20
    
If $iTop 480 Then
        $iTop 
10
        $iLeft 
+= 170
    
EndIf
Next

$tab1
=GUICtrlCreateTabitem ("tab1")
GUISetBkColor(0xFFFFFF)
$iTop 35
$iLeft 
15
For $s 1 To $aProgs2[0]
    
$aCheckedIcons2[$s] = "common\images\01.ico"
    
$aUnCheckedIcons2[$s] = "common\images\01.ico"
    
$aInstalledIcons2[$s] = "common\images\03.ico"
    
$aCompleteIcons2[$s] = "common\images\02.ico"
    
$anCheckBoxes2[$s] = _GUICtrlCreateCheckboxEx(StringRegExpReplace($aProgs2[$s], '^.*='''), $iLeft$iTop, -115,  $aUnCheckedIcons2[$s])
    
$iTop += 20
    
If $iTop 480 Then
        $iTop 
10
        $iLeft 
+= 170
    
EndIf
Next




GUICtrlCreateTabitem 
("")   

GUISetState ()

While 
1
    $nMsg 
GUIGetMsg()
       Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
         Case 
$nStart
            
For $i 1 To $aProgs[0]
            
$aCheckBox $anCheckBoxes[$i
               If 
GUICtrlRead($aCheckBox[1]) = 1 Then
                    $iChecked_Counter 
+= 1
                    GUICtrlSetImage
($aCheckBox[0], $aInstalledIcons[$i])
                    
$sProgName StringRegExpReplace($aProgs[$i], '^.*=''')
                    
$sProgExe StringRegExpReplace($aProgs[$i], '=.*$''')
                    
MsgBox(64$sProgName"zz"3)
                    
GUICtrlSetImage($aCheckBox[0], $aCompleteIcons[$i])
                    Else
                    
GUICtrlSetImage($aCheckBox[0], $aUnCheckedIcons[$i])
                EndIf
                     
Next
                
For $s 1 To $aProgs2[0]
               
$aCheckBox2 $anCheckBoxes2[$s]
               If 
GUICtrlRead($aCheckBox2[1]) = 1 Then
                    $sChecked_Counter 
+= 1
                    GUICtrlSetImage
($aCheckBox2[0], $aInstalledIcons2[$s])
                    
$sProgName2 StringRegExpReplace($aProgs2[$s], '^.*=''')
                    
$sProgExe2 StringRegExpReplace($aProgs2[$s], '=.*$''')
                    
MsgBox(64$sProgName2"zz"3)
                    
GUICtrlSetImage($aCheckBox2[0], $aCompleteIcons2[$s])
                    Else
                    
GUICtrlSetImage($aCheckBox2[0], $aUnCheckedIcons2[$s])
                EndIf
                
Next
            $iChecked_Counter 
0
            $sChecked_Counter 
0
                
EndSwitch
WEnd
    
Func _GUICtrlCreateCheckboxEx
($sText$iLeft$iTop$iWidth$iHeight$sIconFile=""$nIconIndex=0)
    
Local $aRetArr[2]

    
$aRetArr[0] = GUICtrlCreateIcon($sIconFile$nIconIndex$iLeft 17$iTop1616)
    
GUICtrlSetState(-1$GUI_DISABLE)

    
$aRetArr[1] = GUICtrlCreateCheckbox("       " $sText " "$iLeft$iTop$iWidth$iHeight)
    
GUICtrlSetBkColor($aRetArr[1], 0xFFFFFF)

    Return 
$aRetArr
EndFunc 


Creat0R 07-05-2010 17:52 1408804

Цитата:

Цитата Centrinar
на первой вкладке чекбоксы не работают, а работают только на втрой »

У меня почти все неработают, это из за того что иконка чекбокса не найдена, и элемент GUICtrlCreateIcon не создаётся, а т.к после него вызывается GUICtrlSetState(-1, $GUI_DISABLE), оно срабатывает для предыдущего элемента, это получается последний созданы чексбокс.

Вобщем нужно заменить:

Код:

GUICtrlSetState(-1, $GUI_DISABLE)
на
Код:

GUICtrlSetState($aRetArr[0], $GUI_DISABLE)

Centrinar 07-05-2010 17:58 1408809

насчет иконок, в этом стиле они вообще не отображаються но если изменить строку $aRetArr[1] на
PHP код:

$aRetArr[1] = GUICtrlCreateCheckbox("       " $sText " "$iLeft$iTop$iWidth$iHeight$WS_CLIPSIBLINGS

иконки отображаються а надписи и сами чекбоксы нет. С чем то связанно?

Creat0R 07-05-2010 18:35 1408834

Цитата:

Цитата Centrinar
С чем то связанно? »

С тем что не нужно использовать этот стиль :)

Centrinar 07-05-2010 18:44 1408840

так без него иконки не отображаюьтся, какой стиль тоогда?

Creat0R 07-05-2010 19:17 1408865

Цитата:

Цитата Centrinar
без него иконки не отображаюьтся »

Мы это уже кажется проходили.

Цитата:

Цитата Centrinar
PHP код »

Нужно заключать либо в теги code, либо разукрашивать с Au3ToPost.

Centrinar 07-05-2010 19:28 1408880

Я помню, так в этом случ. я никаких картинок не создаю и все элементы создаю в конце

Centrinar 07-05-2010 19:44 1408894

Код:

#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#requireadmin
#NoTrayIcon


Global $sProgs = 'Setup1.exe=Opera|Seup2.exe=Прог2|Seup3.exe=Прог3|Seup4.exe=Прог4|Seup5.exe=Прог5'
Global $sProgs2 = 'Setup1.exe=Прог1|Seup2.exe=Прог2|Seup3.exe=Прог3|Seup4.exe=Прог4|Seup5.exe=Прог5'

Global Const $aProgs = StringSplit($sProgs, '|')
Global Const $aProgs2 = StringSplit($sProgs2, '|')
Global $anCheckBoxes[$aProgs[0]+1]
Global $aCheckedIcons[$aProgs[0]+1]
Global $aUnCheckedIcons[$aProgs[0]+1]
Global $aCompleteIcons[$aProgs[0]+1]
Global $aInstalledIcons[$aProgs[0]+1]
Global $aDescription[$aProgs[0]+1]

Global $anCheckBoxes2[$aProgs2[0]+1]
Global $aCheckedIcons2[$aProgs2[0]+1]
Global $aUnCheckedIcons2[$aProgs2[0]+1]
Global $aCompleteIcons2[$aProgs2[0]+1]
Global $aInstalledIcons2[$aProgs2[0]+1]

GUICreate("My GUI Tab",600,550)
GUISetBkColor(0xFFFFFF)
$nStart = GUICtrlCreateButton("Выполнить", 30, 510, 150, 30)
$tab=GUICtrlCreateTab (10,10, 580,480)
GUISetBkColor(0xFFFFFF)
$tab0=GUICtrlCreateTabitem ("tab0")
GUISetBkColor(0xFFFFFF)
$iTop = 40
$iLeft = 15
For $i = 1 To $aProgs[0]
    $aCheckedIcons[$i] = "common\images\01.ico"
    $aUnCheckedIcons[$i] = "common\images\01.ico"
    $aInstalledIcons[$i] = "common\images\03.ico"
    $aCompleteIcons[$i] = "common\images\02.ico"
    $sProgName = StringRegExpReplace($aProgs[$i], '^.*=', '')
    $anCheckBoxes[$i] = _GUICtrlCreateCheckboxEx(StringRegExpReplace($aProgs[$i], '^.*=', ''), $iLeft, $iTop, -1, 15,  $aUnCheckedIcons[$i])
    $iTop += 80
    If $iTop > 480 Then
        $iTop = 10
        $iLeft += 170
    EndIf
Next


$tab1=GUICtrlCreateTabitem ("tab1")
GUISetBkColor(0xFFFFFF)
$iTop = 40
$iLeft = 15
For $s = 1 To $aProgs2[0]
    $aCheckedIcons2[$s] = "common\images\01.ico"
    $aUnCheckedIcons2[$s] = "common\images\01.ico"
    $aInstalledIcons2[$s] = "common\images\03.ico"
    $aCompleteIcons2[$s] = "common\images\02.ico"
    $anCheckBoxes2[$s] = _GUICtrlCreateCheckboxEx(StringRegExpReplace($aProgs2[$s], '^.*=', ''), $iLeft, $iTop, -1, 15,  $aUnCheckedIcons2[$s])
    $iTop += 40
    If $iTop > 480 Then
        $iTop = 10
        $iLeft += 170
    EndIf
Next


GUICtrlCreateTabitem ("")

GUISetState ()

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case
$nStart
            For $i = 1 To $aProgs[0]
            $aCheckBox = $anCheckBoxes[$i]
              If GUICtrlRead($aCheckBox[1]) = 1 Then
                    GUICtrlSetImage($aCheckBox[0], $aInstalledIcons[$i])
                    $sProgName = StringRegExpReplace($aProgs[$i], '^.*=', '')
                    $sProgExe = StringRegExpReplace($aProgs[$i], '=.*$', '')
                    MsgBox(64, $sProgName, "zz", 3)
                    GUICtrlSetImage($aCheckBox[0], $aCompleteIcons[$i])
                    Else
                    GUICtrlSetImage($aCheckBox[0], $aUnCheckedIcons[$i])
                EndIf
                    Next
                For $s = 1 To $aProgs2[0]
            $aCheckBox2 = $anCheckBoxes2[$s]
              If GUICtrlRead($aCheckBox2[1]) = 1 Then
                    GUICtrlSetImage($aCheckBox2[0], $aInstalledIcons2[$s])
                    $sProgName2 = StringRegExpReplace($aProgs2[$s], '^.*=', '')
                    $sProgExe2 = StringRegExpReplace($aProgs2[$s], '=.*$', '')
                    MsgBox(64, $sProgName2, "zz", 3)
                    GUICtrlSetImage($aCheckBox2[0], $aCompleteIcons2[$s])
                    Else
                    GUICtrlSetImage($aCheckBox2[0], $aUnCheckedIcons2[$s])
                EndIf
                Next
            EndSwitch
WEnd

Func _GUICtrlCreateCheckboxEx($sText, $iLeft, $iTop, $iWidth, $iHeight, $sIconFile="", $nIconIndex=0)
    Local $aRetArr[2]

    $aRetArr[0] = GUICtrlCreateIcon($sIconFile, $nIconIndex, $iLeft + 17, $iTop, 16, 16)
  GUICtrlSetState($aRetArr[0], $GUI_DISABLE)

    $aRetArr[1] = GUICtrlCreateCheckbox("      " & $sText & " ", $iLeft, $iTop, $iWidth, $iHeight);, $WS_CLIPSIBLINGS)
    GUICtrlSetBkColor($aRetArr[1], 0xFFFFFF)

    Return $aRetArr
EndFunc


Creat0R 07-05-2010 19:49 1408898

Centrinar, я если честно не улавливаю суть проблемы. Что конкретно ождается от данного примера? и мне нужны изображения чтобы его проверить как следует.

Цитата:

Цитата Centrinar
в этом случ. я никаких картинок не создаю и все элементы создаю в конце »

Тогда без стиля всё должно отображаться.

Centrinar 07-05-2010 19:54 1408902

Вложений: 1
Вот пример, думаю увидешь проблемму

Creat0R 07-05-2010 20:39 1408932

Вложений: 1
Цитата:

Цитата Centrinar
Вот пример, думаю увидешь проблемму »

Да, вижу. С табами проблем хватает :) На данный момент всё что могу предложить так это создание иконки слева от чекбокса (плюс добавил цвет табу, чтобы было соостветствие, а также оптимизировал код).

Centrinar 07-05-2010 20:42 1408933

так ещё лучше

Centrinar 07-05-2010 22:19 1408982

Creat0R может сразу подскажешь как добавляеться Scrollbar(про который я спрашивал пару тем назад), что бы при переполнении чекбоксов можно было в низ листать.

Creat0R 07-05-2010 23:27 1409020

Цитата:

Цитата Centrinar
как добавляеться Scrollbar »

[решено] Создать окно с полосой прокрутки

и более простой способ: Scrollbars Made Easy

Centrinar 08-05-2010 00:47 1409081

Получилось: _GUIScrollbars_Generate($hGUI, "", 1000), но если делать в нутри вкладки то не работает _GUIScrollbars_Generate($hTab1, "", 1000).
Его можно какнить во внутрь вкладки засунуть

Creat0R 08-05-2010 02:08 1409111

Вложений: 1
Цитата:

Цитата Centrinar
если делать в нутри вкладки то не работает »

Мда..., придётся извращаться, прикрепил первую форму извращения :drug:

Centrinar 11-05-2010 17:13 1411050

спс


Время: 09:26.

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