Что нового

Операторы сравнения, условие "если хотя бы один не равен/если выбран хотя бы один"

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Доброго времени суток. Не могу разобраться с операторами. Есть окошко, в котором с десяток выпадающих списков (чекбоксы). Нужно их проверить на три условия:
1. Если ни один не выбран
2. Если выбран хотя бы один.
3. Выбраны все
Первое получается. А потом в зависимости от моего кода то второе, то третье, то второе на своем месте и вместо третьего. Пробую вот так:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <WinAPI.au3>
#include <APIFilesConstants.au3>
#include <WinAPIError.au3>
#include <WinAPIFiles.au3>
#include <WinAPIMem.au3>
#include <AutoItConstants.au3>
#include <ComboConstants.au3>

Global $Combo1, $Combo2, $Combo3, $Combo4, $Combo5, $Combo6, $Combo7, $Combo8, $Combo9, $Combo10,$sDay, $sMonth, $sYear, $sHour, $sMin

; Генерирует список пунктов для Combo1 и 6
For $iD = 1 To 31
    ;$sDay &= 'Пункт ' & $i & '|'
    $sDay &= $iD & '|'
Next
$sDay = 'чис' & '|' & StringTrimRight($sDay, 1)
ConsoleWrite($sDay & @CR)

; Генерирует список пунктов для Combo2 и 7
For $iM = 1 To 12
      $sMonth &= $iM & '|'
Next
$sMonth = 'мес' & '|' & StringTrimRight($sMonth, 1)
ConsoleWrite($sMonth & @CR)

; Генерирует список пунктов для Combo3 и 8
For $iY = 2017 To 2050
      $sYear &= $iY & '|'
Next
$sYear = 'год' & '|' & StringTrimRight($sYear, 1)
ConsoleWrite($sYear & @CR)

; Генерирует список пунктов для Combo4 и 9
For $iH = 0 To 23
      $sHour &= $iH & '|'
Next
$sHour = 'час' & '|' & StringTrimRight($sHour, 1)
ConsoleWrite($sHour & @CR)

; Генерирует список пунктов для Combo5 и 10
For $iM = 00 To 59
      $sMin &= $iM & '|'
Next
$sMin = 'мин' & '|' & StringTrimRight($sMin, 1)
ConsoleWrite($sMin & @CR)

; Создаем окно программы
$hGui = GUICreate('Отчеты', 670, 200, -1, -1, -1) ; Создаёт окно по центру
GUICtrlSetFont(-1, 36, -1, -1, 'Impact')
Local $bt1 = GUICtrlCreateButton('Кнопка1', 10, 10, 120, 25)

; создаем подписи к списку
$Label1 = GUICtrlCreateLabel('С', 135, 15, 10, 25)
$Label2 = GUICtrlCreateLabel('По', 380, 15, 25, 25)


; Создаёт "Combo" со стилем точного указания высоты выпадающего списка
$Combo1 = GUICtrlCreateCombo("", 145, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sDay , "чис") ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo2 = GUICtrlCreateCombo("", 190, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sMonth , "мес") ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo3 = GUICtrlCreateCombo("", 235, 10, 50, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sYear , "год") ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo4 = GUICtrlCreateCombo("", 290, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sHour , "час") ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo5 = GUICtrlCreateCombo("", 335, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sMin , "мин") ; добавляет другие пункты и устанавливает новый по умолчанию


$Combo6 = GUICtrlCreateCombo("", 410, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sDay , "чис") ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo7 = GUICtrlCreateCombo("", 460, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sMonth , "мес") ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo8 = GUICtrlCreateCombo("", 505, 10, 50, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sYear , "год") ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo9 = GUICtrlCreateCombo("", 560, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sHour , "час") ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo10 = GUICtrlCreateCombo("", 605, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sMin , "мин") ; добавляет другие пункты и устанавливает новый по умолчанию

GUISetState() ; показывает созданное окно
While 1
   Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE
            ProcessClose($hGui)
            Exit
         Case $bt1
            _Period()

   EndSwitch
WEnd

Func _Period()
If GUICtrlRead($Combo1, 1) = 'чис' AND GUICtrlRead($Combo2, 1) = 'мес' AND GUICtrlRead($Combo3, 1) = 'год' AND GUICtrlRead($Combo4, 1) = 'час' AND GUICtrlRead($Combo5, 1) = 'мин' AND GUICtrlRead($Combo6, 1) = 'чис' AND GUICtrlRead($Combo7, 1) = 'мес' AND GUICtrlRead($Combo8, 1) = 'год' AND GUICtrlRead($Combo9, 1) = 'час' AND GUICtrlRead($Combo10, 1) = 'мин' Then
   ConsoleWrite('ни чего не выбрано' & @CR)
ElseIf GUICtrlRead($Combo1, 1) <> 'чис' OR GUICtrlRead($Combo2, 1) <> 'мес' OR GUICtrlRead($Combo3, 1) <> 'год' OR GUICtrlRead($Combo4, 1) <> 'час' OR GUICtrlRead($Combo5, 1) <> 'мин' OR GUICtrlRead($Combo6, 1) <> 'чис' OR GUICtrlRead($Combo7, 1) <> 'мес' OR GUICtrlRead($Combo8, 1) <> 'год' OR GUICtrlRead($Combo9, 1) <> 'час' OR GUICtrlRead($Combo10, 1) <> 'мин' Then
   ConsoleWrite('не все выбрано' & GUICtrlRead($Combo1, 1) &'|'& GUICtrlRead($Combo2, 1) &'|'& GUICtrlRead($Combo3, 1) &'|' & GUICtrlRead($Combo4, 1) &'|' & GUICtrlRead($Combo5, 1) &'|' & GUICtrlRead($Combo6, 1) &'|' & GUICtrlRead($Combo7, 1)  &'|'& GUICtrlRead($Combo8, 1) &'|'& GUICtrlRead($Combo9, 1)  &'|'& GUICtrlRead($Combo10, 1)&@CR)
; Else
   ElseIf GUICtrlRead($Combo1, 1) <> 'чис' AND GUICtrlRead($Combo2, 1) <> 'мес' AND GUICtrlRead($Combo3, 1) <> 'год' AND GUICtrlRead($Combo4, 1) <> 'час' AND GUICtrlRead($Combo5, 1) <> 'мин' AND GUICtrlRead($Combo6, 1) <> 'чис' AND GUICtrlRead($Combo7, 1) <> 'мес' AND GUICtrlRead($Combo8, 1) <> 'год' AND GUICtrlRead($Combo9, 1) <> 'час' AND GUICtrlRead($Combo10, 1) <> 'мин' Then
   ConsoleWrite('Выбрано все ' & GUICtrlRead($Combo1, 1) &'|'& GUICtrlRead($Combo2, 1) &'|'& GUICtrlRead($Combo3, 1) &'|' & GUICtrlRead($Combo4, 1) &'|' & GUICtrlRead($Combo5, 1) &'|' & GUICtrlRead($Combo6, 1) &'|' & GUICtrlRead($Combo7, 1)  &'|'& GUICtrlRead($Combo8, 1) &'|'& GUICtrlRead($Combo9, 1)  &'|'& GUICtrlRead($Combo10, 1)&@CR)
EndIf
EndFunc
 

etc

Меценат
Меценат
Сообщения
5
Репутация
1
Код:
If GUICtrlRead($Combo1, 1) = 'чис' AND GUICtrlRead($Combo2, 1) = 'мес' AND GUICtrlRead($Combo3, 1) = 'год' AND GUICtrlRead($Combo4, 1) = 'час' AND GUICtrlRead($Combo5, 1) = 'мин' AND GUICtrlRead($Combo6, 1) = 'чис' AND GUICtrlRead($Combo7, 1) = 'мес' AND GUICtrlRead($Combo8, 1) = 'год' AND GUICtrlRead($Combo9, 1) = 'час' AND GUICtrlRead($Combo10, 1) = 'мин' Then
   ConsoleWrite('ничего не выбрано' & @CR)
EndIf
If GUICtrlRead($Combo1, 1) <> 'чис' OR GUICtrlRead($Combo2, 1) <> 'мес' OR GUICtrlRead($Combo3, 1) <> 'год' OR GUICtrlRead($Combo4, 1) <> 'час' OR GUICtrlRead($Combo5, 1) <> 'мин' OR GUICtrlRead($Combo6, 1) <> 'чис' OR GUICtrlRead($Combo7, 1) <> 'мес' OR GUICtrlRead($Combo8, 1) <> 'год' OR GUICtrlRead($Combo9, 1) <> 'час' OR GUICtrlRead($Combo10, 1) <> 'мин' Then
   ConsoleWrite('не все выбрано ' & GUICtrlRead($Combo1, 1) &'|'& GUICtrlRead($Combo2, 1) &'|'& GUICtrlRead($Combo3, 1) &'|' & GUICtrlRead($Combo4, 1) &'|' & GUICtrlRead($Combo5, 1) &'|' & GUICtrlRead($Combo6, 1) &'|' & GUICtrlRead($Combo7, 1)  &'|'& GUICtrlRead($Combo8, 1) &'|'& GUICtrlRead($Combo9, 1)  &'|'& GUICtrlRead($Combo10, 1)&@CR)
EndIf
   If GUICtrlRead($Combo1, 1) <> 'чис' AND GUICtrlRead($Combo2, 1) <> 'мес' AND GUICtrlRead($Combo3, 1) <> 'год' AND GUICtrlRead($Combo4, 1) <> 'час' AND GUICtrlRead($Combo5, 1) <> 'мин' AND GUICtrlRead($Combo6, 1) <> 'чис' AND GUICtrlRead($Combo7, 1) <> 'мес' AND GUICtrlRead($Combo8, 1) <> 'год' AND GUICtrlRead($Combo9, 1) <> 'час' AND GUICtrlRead($Combo10, 1) <> 'мин' Then
   ConsoleWrite('Выбрано все ' & GUICtrlRead($Combo1, 1) &'|'& GUICtrlRead($Combo2, 1) &'|'& GUICtrlRead($Combo3, 1) &'|' & GUICtrlRead($Combo4, 1) &'|' & GUICtrlRead($Combo5, 1) &'|' & GUICtrlRead($Combo6, 1) &'|' & GUICtrlRead($Combo7, 1)  &'|'& GUICtrlRead($Combo8, 1) &'|'& GUICtrlRead($Combo9, 1)  &'|'& GUICtrlRead($Combo10, 1)&@CR)
EndIf
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Вот чекбоксы GUICtrlCreateCheckbox

Если вопрос и правда только по операторах.
У вас блок "If" сработает если все значения равны значению по умолчанию.
Значит следующий блок будет проверяться если хотя бы одно из значений не равно значению по умолчанию. Вы проверяете уже очевидное.
В блоке "ElseIf" вам нужно проверить обратное, то есть все значения должны быть не по умолчанию.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <WinAPI.au3>
#include <APIFilesConstants.au3>
#include <WinAPIError.au3>
#include <WinAPIFiles.au3>
#include <WinAPIMem.au3>
#include <AutoItConstants.au3>
#include <ComboConstants.au3>

Global $sDay = 'чис', $sMonth = 'мес', $sYear = 'год', $sHour = 'час', $sMin = 'мин'
For $iD = 1 To 31
    $sDay &= '|' & $iD
Next
ConsoleWrite($sDay & @CR)

For $iM = 1 To 12
    $sMonth &= '|' & $iM
Next
ConsoleWrite($sMonth & @CR)

For $iY = 2017 To 2050
    $sYear &= '|' & $iY
Next
ConsoleWrite($sYear & @CR)

For $iH = 0 To 23
    $sHour &= '|' & $iH
Next
ConsoleWrite($sHour & @CR)

For $iM = 0 To 59
    $sMin &= '|' & $iM
Next
ConsoleWrite($sMin & @CR)

Global $hGui = GUICreate('Отчеты', 670, 200) ; Создаёт окно по центру
GUICtrlSetFont(-1, 36, -1, -1, 'Impact')
Global $idBtn1 = GUICtrlCreateButton('Кнопка1', 10, 10, 120, 25)

; создаем подписи к списку
GUICtrlCreateLabel('С', 135, 15, 10, 25)
GUICtrlCreateLabel('По', 380, 15, 25, 25)

Global $Combo1, $Combo2, $Combo3, $Combo4, $Combo5, $Combo6, $Combo7, $Combo8, $Combo9, $Combo10
; Создаёт "Combo" со стилем точного указания высоты выпадающего списка
$Combo1 = GUICtrlCreateCombo("", 145, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sDay, "чис")  ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo2 = GUICtrlCreateCombo("", 190, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sMonth, "мес")  ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo3 = GUICtrlCreateCombo("", 235, 10, 50, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sYear, "год")  ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo4 = GUICtrlCreateCombo("", 290, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sHour, "час")  ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo5 = GUICtrlCreateCombo("", 335, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sMin, "мин")  ; добавляет другие пункты и устанавливает новый по умолчанию


$Combo6 = GUICtrlCreateCombo("", 410, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sDay, "чис")  ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo7 = GUICtrlCreateCombo("", 460, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sMonth, "мес")  ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo8 = GUICtrlCreateCombo("", 505, 10, 50, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sYear, "год")  ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo9 = GUICtrlCreateCombo("", 560, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sHour, "час")  ; добавляет другие пункты и устанавливает новый по умолчанию
$Combo10 = GUICtrlCreateCombo("", 605, 10, 40, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sMin, "мин")  ; добавляет другие пункты и устанавливает новый по умолчанию

GUISetState() ; показывает созданное окно
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ProcessClose($hGui) ; -> вы точно понимаете что пишете? Зачем это?
            Exit
        Case $idBtn1
            _Period()
    EndSwitch
WEnd

Func _Period()
    Local $sSelect = GUICtrlRead($Combo1, 1) & '|' & _
            GUICtrlRead($Combo2, 1) & '|' & _
            GUICtrlRead($Combo3, 1) & '|' & _
            GUICtrlRead($Combo4, 1) & '|' & _
            GUICtrlRead($Combo5, 1) & '|' & _
            GUICtrlRead($Combo6, 1) & '|' & _
            GUICtrlRead($Combo7, 1) & '|' & _
            GUICtrlRead($Combo8, 1) & '|' & _
            GUICtrlRead($Combo9, 1) & '|' & _
            GUICtrlRead($Combo10, 1)

    If GUICtrlRead($Combo1) = 'чис' _
            And GUICtrlRead($Combo2) = 'мес' _
            And GUICtrlRead($Combo3) = 'год' _
            And GUICtrlRead($Combo4) = 'час' _
            And GUICtrlRead($Combo5) = 'мин' _
            And GUICtrlRead($Combo6) = 'чис' _
            And GUICtrlRead($Combo7) = 'мес' _
            And GUICtrlRead($Combo8) = 'год' _
            And GUICtrlRead($Combo9) = 'час' _
            And GUICtrlRead($Combo10) = 'мин' Then
        ConsoleWrite('1. ни чего не выбрано: ' & $sSelect & @CRLF)
    ElseIf GUICtrlRead($Combo1) <> 'чис' _
            And GUICtrlRead($Combo2) <> 'мес' _
            And GUICtrlRead($Combo3) <> 'год' _
            And GUICtrlRead($Combo4) <> 'час' _
            And GUICtrlRead($Combo5) <> 'мин' _
            And GUICtrlRead($Combo6) <> 'чис' _
            And GUICtrlRead($Combo7) <> 'мес' _
            And GUICtrlRead($Combo9) <> 'час' _
            And GUICtrlRead($Combo8) <> 'год' _
            And GUICtrlRead($Combo10) <> 'мин' Then
        ConsoleWrite('2. Выбрано все: ' & $sSelect & @CRLF)
    Else
        ConsoleWrite('3. Выбрано не все: ' & $sSelect & @CRLF)
    EndIf
EndFunc   ;==>_Period
Но если вам нужно решение для выбора даты, удобнее будет использовать GUICtrlCreateDate
Код:
#include <GUIConstants.au3>
#include <GuiDateTimePicker.au3>

Global $g_hDTP
Example()

Func Example()
    GUICreate(@ScriptName, 400, 400)
    GUICtrlCreateDate("", 5, 5, 390, 30, $DTS_SHOWNONE)
    $g_hDTP = GUICtrlGetHandle(-1)
    _GUICtrlDTP_SetFormat($g_hDTP, "dd.MM.yy HH:mm")
    Local $idBtnRead = GUICtrlCreateButton("BtnRead", 20, 40, 360, 25)
    GUISetState()

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case $idBtnRead
                BtnRead()
        EndSwitch
    WEnd
EndFunc   ;==>Example

Func BtnRead()
    Local $tSYSTEMTIME = _GUICtrlDTP_GetSystemTimeEx($g_hDTP)
    If @error = $GDT_NONE Then
        MsgBox($MB_ICONINFORMATION, Default, "Ничего не выбрано")
    Else
        Local $sDate = StringFormat("Год: %i\nМесяц: %i\nДень: %i\nЧас: %i\nМинута: %i", _
                $tSYSTEMTIME.Year, $tSYSTEMTIME.Month, $tSYSTEMTIME.Day, $tSYSTEMTIME.Hour, $tSYSTEMTIME.Minute)
        MsgBox($MB_ICONINFORMATION, Default, $sDate)
    EndIf
EndFunc   ;==>BtnRead
 
Последнее редактирование:
Автор
D

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Поторопился я с оценкой. Так срабатывает, если делать выбор по порядку, тоесть когда проверяешь сперва первый вариант, потом второй и потом третий. Если сразу начинаешь с третьего, то выдает сразу два результата 2 и 3.
Сообщение автоматически объединено:

В блоке "ElseIf" вам нужно проверить обратное
А вот так срабатывает. Спасибо
Но если вам нужно решение для выбора даты, удобнее будет использовать
К сожалению не так удобно, хотя бы потому что в этом примере нет выбора времени, только дата. Да и дата долго может выбираться, если промежуток большой. Но, если подскажите подобный вариант с выбором времени, то будет интересно его рассмотреть
 
Последнее редактирование:
Автор
D

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Для ввода времени, кликаете на соответствующий блок цифр и вводите с клавиатуры
Ну, это ещё я запомню, а пожилые люди, да и все, кто далек от компов - запутаются. Нужно что-то проще. Желательно однотипное по движению мышки или клавиатуры.
Только я не знаю, насколько правильно обсуждать в этой теме такое. Это ж не операторы.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
Func _Period()
  Local $i = 10
  If GUICtrlRead($Combo1) = 'чис' Then $i -= 1
  If GUICtrlRead($Combo2) = 'мес' Then $i -= 1
  If GUICtrlRead($Combo3) = 'год' Then $i -= 1
  If GUICtrlRead($Combo4) = 'час' Then $i -= 1
  If GUICtrlRead($Combo5) = 'мин' Then $i -= 1
  If GUICtrlRead($Combo6) = 'чис' Then $i -= 1
  If GUICtrlRead($Combo7) = 'мес' Then $i -= 1
  If GUICtrlRead($Combo8) = 'год' Then $i -= 1
  If GUICtrlRead($Combo9) = 'час' Then $i -= 1
  If GUICtrlRead($Combo10) = 'мин' Then $i -= 1
  Select
    Case $i = 0
      ConsoleWrite('ничего не выбрано' & @CR)
    Case $i = 10
      ConsoleWrite('Выбрано все' & @CR)
    Case Else
      ConsoleWrite('не все выбрано' & @CR)
  EndSelect
EndFunc

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

вариант с выбором времени
Код:
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <DateTimeConstants.au3>

Example()

Func Example()
    GUICreate("My GUI get date", 200, 200, 800, 200)
    Local $idDate = GUICtrlCreateDate("1953/04/25", 10, 10, 185, 25)
    Local $idTime = GUICtrlCreateDate("12:00", 10, 40, 185, 25, $DTS_TIMEFORMAT)
    GUISetState(@SW_SHOW)

    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop

        EndSwitch
    WEnd

    MsgBox($MB_SYSTEMMODAL, "", GUICtrlRead($idDate) & @CRLF & GUICtrlRead($idTime))
    GUIDelete()
EndFunc   ;==>Example
 
Последнее редактирование:
Автор
D

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Кстати, очень прикольный вариант ) Но пока не решил, какой вариант лучше и под каким сообщением ставить "Лучший ответ", под вашим или под
Tempo. Главное, что Tempo подсказал мою ошибку.
Подумаю, покажу своим, может и понравится
Сообщение автоматически объединено:

А как установить это значение по умолчанию без выбора, тоесть без галочки?
 
Последнее редактирование:

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Ещё вариант:

Код:
Func _Period()
    Local $iC = 0
    
    For $i = 1 To 10
        $iC += StringIsDigit(GUICtrlRead(Eval('Combo' & $i)))
    Next
    
    Switch $iC
        Case 0
            ConsoleWrite('ничего не выбрано' & @CR)
        Case 10
            ConsoleWrite('Выбрано все' & @CR)
        Case Else
            ConsoleWrite('не все выбрано' & @CR)
    EndSwitch
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
А вообще я бы сделал так:

Код:
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <GUIEdit.au3>

Global $sDay, $sMonth, $sYear, $sHour, $sMin

; Генерирует список пунктов для Combo1 и 6
For $iD = 1 To 31
    $sDay &= ($sDay ? '|' : '') & StringFormat('%02i', $iD)
Next

; Генерирует список пунктов для Combo2 и 7
For $iM = 1 To 12
    $sMonth &= ($sMonth ? '|' : '') & StringFormat('%02i', $iM)
Next

; Генерирует список пунктов для Combo3 и 8
For $iY = 2017 To 2050
    $sYear &= ($sYear ? '|' : '') & $iY
Next

; Генерирует список пунктов для Combo4 и 9
For $iH = 0 To 23
    $sHour &= ($sHour ? '|' : '') & StringFormat('%02i', $iH)
Next

; Генерирует список пунктов для Combo5 и 10
For $iM = 00 To 59
    $sMin &= ($sMin ? '|' : '') & StringFormat('%02i', $iM)
Next

Global $aCombo[11][3] = [[10], [0, 'чис', $sDay], [0, 'мес', $sMonth], [0, 'год', $sYear], [0, 'час', $sHour], [0, 'мин', $sMin]]

; Создаем окно программы
$hGui = GUICreate('Отчеты', 700, 200, -1, -1, -1) ; Создаёт окно по центру
GUICtrlSetFont(-1, 36, -1, -1, 'Impact')
$bt1 = GUICtrlCreateButton('Кнопка1', 10, 10, 120, 25)

; создаем подписи к списку
$Label1 = GUICtrlCreateLabel('С', 135, 15, 10, 25)
$Label2 = GUICtrlCreateLabel('По', 413, 15, 25, 25)

$iLeft = 150

For $i = 1 To 5
    $aCombo[$i][0] = GUICtrlCreateCombo("", $iLeft, 10, 50, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
    GUICtrlSetData($aCombo[$i][0], $aCombo[$i][2]) ; добавляет другие пункты
    _GUICtrlEdit_SetCueBanner(ControlGetHandle($hGui, '', 'Edit' & $i), $aCombo[$i][1]) ; устанавливает видимое значение если поле пустое
    $iLeft += 52
Next

$iLeft = 430

For $i = 6 To 10
    $aCombo[$i][0] = GUICtrlCreateCombo("", $iLeft, 10, 50, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
    GUICtrlSetData($aCombo[$i][0], $aCombo[$i - 5][2]) ; добавляет другие пункты
    _GUICtrlEdit_SetCueBanner(ControlGetHandle($hGui, '', 'Edit' & $i), $aCombo[$i - 5][1]) ; устанавливает видимое значение если поле пустое
    $iLeft += 52
Next

GUISetState() ; показывает созданное окно

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            GUIDelete($hGui)
            Exit
        Case $bt1
            _Period()
    EndSwitch
WEnd

Func _Period()
    Local $iC = 0
   
    For $i = 1 To 10
        $iC += StringIsDigit(GUICtrlRead($aCombo[$i][0]))
    Next
   
    Switch $iC
        Case 0
            ConsoleWrite('ничего не выбрано' & @CR)
        Case 10
            ConsoleWrite('Выбрано все' & @CR)
        Case Else
            ConsoleWrite('не все выбрано' & @CR)
    EndSwitch
EndFunc


Нужно бы сделать библиотеку для вывода выборки времени и даты в более удобной форме, по аналогии как это сделано в телефонах...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Вариант с выбором времени используя слайдер:

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $sCurrTime = ''
Global $hGUI, $iTime_Slider, $iTime_Lbl

$hGUI = GUICreate('Time Slider', 220, 200)

GUICtrlCreateLabel('Time:', 10, 20)
$iTime_Slider = GUICtrlCreateSlider(10, 40, 200, 20)
$iTime_Lbl = GUICtrlCreateLabel('00:00', 10, 70)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
    
    If $sCurrTime <> GUICtrlRead($iTime_Slider) Then
        $sCurrTime = GUICtrlRead($iTime_Slider)
        _SliderSetTime()
    EndIf
WEnd

Func _SliderSetTime()
    Local $sTime = StringReplace(Round($sCurrTime / 100 * 24, 1), '.', ':')
    
    If Not StringInStr($sTime, ':') Then
        $sTime &= ':00'
    EndIf
    
    Local $aTime = StringSplit($sTime, ':')
    $sTime = StringFormat('%02i:%02i', $aTime[1], $aTime[2])
    
    GUICtrlSetData($iTime_Lbl, $sTime)
EndFunc
 
Автор
D

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Вариант с выбором времени используя слайдер
Очень интересный вариант )))
А вообще я бы сделал так:
Даже, если не разберусь с галочкой на календаре, все равно буду иметь ввиду этот вариант. Может ещё где-то смогу применить.
Но хотелось бы разобраться с по умолчанию убранной галочкой в календаре и проверкой. Дело в том, что в варианте Tempo если убрать галочку, то работает проверка "Ничего не выбрано", а в других календарях у меня такое не получается. Но в его календаре галочка стоит по умолчанию.
 
Последнее редактирование:
Автор
D

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Галочку можно снять/установить функцией
Читаю пример этой функции, но не могу понять, как убрать галочку. Там только про определение ошибки при стиле $DTS_SHOWNONE. А про стиль я понял, потому его в цитате и привел и убирать не хочу. Смотрел и в описании стиля, но тоже не понял, возможно из-за плохого знания англ.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
_GUICtrlDTP_SetSystemTimeEx
$hWndHandle to the control
$tDate$tagSYSTEMTIME structure
$bFlag[optional] No date setting:
True - Control will be set to "no date"
False - Control is set to date and time value
 
Автор
D

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
True - Control will be set to "no date"
Я ж говорю, плохо понимаю англ. Я пробовал делать так:
Код:
$DTS_SHOWNONE = True

Но тогда убирается сам чекбокс. А мне нужно, чтоб он был без галочки. Можете показать как этот кусок кода будет выглядеть?
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Я ж говорю, плохо понимаю англ. Я пробовал делать так:
Зачем вы пробовали так делать?

Вы не умеете использовать функции? Вот ссылка на русскую справку _GUICtrlDTP_SetSystemTimeEx, внизу так же есть пример, за галочку отвечает 3 параметр функции.

У меня сейчас нет возможности написать вам пример.
 
Автор
D

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Вы не умеете использовать функции?
Нет, и справку понимаю далеко не всегда.
Сообщение автоматически объединено:

Но я нашел обходной путь, который проблему решает, но он мне не нравиться. Можно сделать так:
Код:
GUICtrlSetState ($g_hDTP,$GUI_FOCUS)
Send("{SPACE}")

Надеюсь, что кто-то подскажет как убрать галочку по умолчанию
 
Последнее редактирование:
Верх