Что нового

[Окна, Диалоги] Использование функций Combo

Roman89

Новичок
Сообщения
107
Репутация
3
Всем доброго времени суток!
У меня снова созрел вопрос:
1) Как сделать сохранение положение Combo после перезахода в программу?
Пример:
В окне Combo можна выбрать (Пункт 1, Пункт 2, Пункт 3)
Если я выбрал пункт 2, вышел с программы и при новом входе что бы у меня снова был выбран пункт 2!

2) Как на Пункт 2 записать функцию допустим (Run)
Пример:
Как сделать если я выберу Пункт 3 что бы у меня открылся (3.exe)?

Вот пример скрипта с использованием Combo:

Код:
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Form1", 179, 49, 551, 248)
$Combo1 = GUICtrlCreateCombo("Combo1", 16, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Пункт 1|Пункт 2|Пункт 3")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd

Всем заранее большое спасибо за ответы!
Извеняюсь за создание 2 темы за день просто в справке не чего не описана функция Combo :-[
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Код:
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Form1", 179, 49, 551, 248)
$Combo1 = GUICtrlCreateCombo("Combo1", 16, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Пункт 1|Пункт 2|Пункт 3")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Combo1
          Switch GUICtrlRead($Combo1)
            Case  "Пункт 1"
             Run("Notepad.Exe")
             Case  "Пункт 2"
             Run("Calc.Exe")
            Case "Пункт 3"
             MsgBox(64,"", "Выбран пункт 3")
          EndSwitch
    EndSwitch
WEnd
 

edward_freedom

Осваивающий
Сообщения
200
Репутация
44
Вот сохранение/чтение

Код:
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 176, 74, 192, 124)
$Combo1 = GUICtrlCreateCombo("", 8, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Test1|Test2|Test3")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$text =  IniRead("config.ini", "save", "Combo1", "")
GUICtrlSetData($Combo1, $text)
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
	Case $GUI_EVENT_CLOSE
		 IniWrite("config.ini", "save", "Combo1", GUICtrlRead($Combo1))
			Exit
	EndSwitch
WEnd
 
Автор
R

Roman89

Новичок
Сообщения
107
Репутация
3
edward_freedom
Смотрите когда я перезахожу в программу то то что было выбрано в Combo оно сохранилось. А функция не выполняется!
Можно как то сделать что бы когда перезаходеш в программу оно сохранялось и когда заходеш снова выполнялась функция записана под Test2
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Вот - сохранение, чтение и открытие:
Код:
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

if FileExists(@ScriptDir & '\settings.ini') Then $var = IniRead(@ScriptDir & '\settings.ini', 'combo', 'data', '')

$Form2 = GUICreate("Form1", 179, 49, 551, 248)
$Combo1 = GUICtrlCreateCombo('', 16, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Блокнот|Калькулятор|Пасиянс")
GUISetState(@SW_SHOW)

GUICtrlSetData($Combo1, $var)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
		case $Combo1
			IniWrite(@ScriptDir & '\settings.ini', 'combo', 'data', GUICtrlRead($Combo1))
			Switch GUICtrlRead($Combo1)
				case 'Блокнот'
					Run('notepad.exe')
				Case 'Калькулятор'
					Run('calc.exe')
				case 'Пасиянс'
					Run('spider.exe')
			EndSwitch
    EndSwitch
WEnd
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Код:
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Form1", 179, 49, 551, 248)
$Combo1 = GUICtrlCreateCombo("Combo1", 16, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
;GUICtrlSetData(-1, "Пункт 1|Пункт 2|Пункт 3")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
OnAutoItExitRegister( "_UnloadSelect" )
_loadSelect ()
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
            Exit
        Case $Combo1
          Switch GUICtrlRead($Combo1)
            Case  "Пункт 1"
             Run("Notepad.Exe")
            Case  "Пункт 2"
             Run("Calc.Exe")
            Case "Пункт 3"
             MsgBox(64,"", "Выбран пункт 3")
          EndSwitch
    EndSwitch
WEnd
 
Func _UnloadSelect ()
  $sSelect =  GUICtrlRead($Combo1)
  $hFile = FileOpen("C:\Combo.Txt",2)
  FileWriteLine($hFile,$sSelect)
  FileClose($hFile)
EndFunc

Func _loadSelect ()
 If FileExists("C:\Combo.Txt") Then
  $sSelect =  GUICtrlRead($Combo1)
  $hFile = FileOpen("C:\Combo.Txt",0)
  $sText = FileReadLine($hFile,1)
  FileClose($hFile)
  GUICtrlSetData($Combo1, "Пункт 1|Пункт 2|Пункт 3", $sText)
 EndIf
EndFunc
 
Автор
R

Roman89

Новичок
Сообщения
107
Репутация
3
Zaramot
Это чучуть не то что мне нужно.
Мне нужно:
Ты зашел в программу, в окне Combo выбрал (Блокнот) у тя открылся блокнот. Ты вышел с программы. Ты снова входеш в программу и у тя открывается блокнот!
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Roman89 [?]
Ты зашел в программу, в окне Combo выбрал (Блокнот) у тя открылся блокнот. Ты вышел с программы. Ты снова входеш в программу и у тя открывается блокнот!

Код:
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Form1", 179, 49, 551, 248)
$Combo1 = GUICtrlCreateCombo("Combo1", 16, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
;GUICtrlSetData(-1, "Пункт 1|Пункт 2|Пункт 3")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
OnAutoItExitRegister( "_UnloadSelect" )
_loadSelect ()
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
            Exit
        Case $Combo1
          Switch GUICtrlRead($Combo1)
            Case  "Пункт 1"
             Run("Notepad.Exe")
            Case  "Пункт 2"
             Run("Calc.Exe")
            Case "Пункт 3"
             MsgBox(64,"", "Выбран пункт 3")
          EndSwitch
    EndSwitch
WEnd
 
Func _UnloadSelect ()
  $sSelect =  GUICtrlRead($Combo1)
  $hFile = FileOpen("C:\Combo.Txt",2)
  FileWriteLine($hFile,$sSelect)
  FileClose($hFile)
EndFunc

Func _loadSelect ()
 If Not FileExists("C:\Combo.Txt") Then
  $hFile = FileOpen("C:\Combo.Txt",2)
  FileWriteLine($hFile,"")
  FileClose($hFile)
  GUICtrlSetData($Combo1, "Пункт 1|Пункт 2|Пункт 3")
 Else
  $sSelect =  GUICtrlRead($Combo1)
  $hFile = FileOpen("C:\Combo.Txt",0)
  $sText = FileReadLine($hFile,1)
  FileClose($hFile)
  GUICtrlSetData($Combo1, "Пункт 1|Пункт 2|Пункт 3", $sText)
 EndIf
 Switch GUICtrlRead($Combo1)
  Case  "Пункт 1"
    Run("Notepad.Exe")
  Case  "Пункт 2"
    Run("Calc.Exe")
  Case "Пункт 3"
    MsgBox(64,"", "Выбран пункт 3")
 EndSwitch
EndFunc
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Zaramot
Это чучуть не то что мне нужно.
Мне нужно:
Ты зашел в программу, в окне Combo выбрал (Блокнот) у тя открылся блокнот. Ты вышел с программы. Ты снова входеш в программу и у тя открывается блокнот!

Исправил :smile:
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Roman89
Немного подправил свой код. Там обнаружилась ошибка, где при первом запуске не заполнялся Combo
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Я обычно загрузку настроек делаю без лишних переменных
Код:
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 196, 205, 192, 124)
$Combo1 = GUICtrlCreateCombo('', 24, 48, 145, 25,BitOR($GUI_SS_DEFAULT_COMBO,$CBS_SIMPLE))
GUICtrlSetData(-1, "Пункт 1|Пункт 2|Пункт 3", IniRead("config.ini", "save", "Combo1", 'Пункт 1')) 
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			IniWrite("config.ini", "save", "Combo1", GUICtrlRead($Combo1))
			Exit

	EndSwitch
WEnd
 
Автор
R

Roman89

Новичок
Сообщения
107
Репутация
3
VladUs
На одно Combo ваша функция работает превосходно а вот на 2 не хочет!
Не знаете в чем может быть причина?
 
Автор
R

Roman89

Новичок
Сообщения
107
Репутация
3
VladUs У вас есть скайп???
Если да то напишите пожалуйста его в лс
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Давайте Ваш вопрос попробуем через форум решить...
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Roman89 [?]
Когда добавляю функцию
Case $Combo2
Switch GUICtrlRead($Combo2)
Case "Кадет"
Честно говоря я не увидел в Вашем скрипте вышеуказанных действий.

Вот Вам пример, на основе предыдущего моего кода, со вторым Combo
Код:
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Form1")
$Combo1 = GUICtrlCreateCombo("Combo1", 16, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Combo2 = GUICtrlCreateCombo("Combo2", 16, 50, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
;GUICtrlSetData(-1, "Пункт 1|Пункт 2|Пункт 3")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
OnAutoItExitRegister( "_UnloadSelect" )

_loadSelect ()
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
            Exit
        Case $Combo1
          Switch GUICtrlRead($Combo1)
            Case  "Пункт 1"
             Run("Notepad.Exe")
            Case  "Пункт 2"
             Run("Calc.Exe")
            Case "Пункт 3"
             MsgBox(64,"", "Выбран пункт 3")
            EndSwitch
        Case $Combo2
            Switch GUICtrlRead($Combo2)
            Case  "Пункт 1"
             MsgBox(64,"Combo2", "Выбран пункт 1")
            Case  "Пункт 2"
             MsgBox(64,"Combo2", "Выбран пункт 2")
            Case "Пункт 3"
             MsgBox(64,"Combo2", "Выбран пункт 3")
         EndSwitch
            
    EndSwitch
WEnd
 
Func _UnloadSelect ()
  $sSelect =  GUICtrlRead($Combo1)
  $sSelect2 =  GUICtrlRead($Combo2)
  $hFile = FileOpen("C:\Combo.Txt",2)
  FileWriteLine($hFile,$sSelect)
  FileWriteLine($hFile,$sSelect2)
  FileClose($hFile)
EndFunc

Func _loadSelect ()
 If Not FileExists("C:\Combo.Txt") Then
  $hFile = FileOpen("C:\Combo.Txt",2)
  FileWriteLine($hFile,"")
  FileClose($hFile)
  GUICtrlSetData($Combo1, "Пункт 1|Пункт 2|Пункт 3")
  GUICtrlSetData($Combo2, "Пункт 1|Пункт 2|Пункт 3")
 Else
  $sSelect =  GUICtrlRead($Combo1)
  $hFile = FileOpen("C:\Combo.Txt",0)
  $sLine1 = FileReadLine($hFile,1)
  $sLine2 = FileReadLine($hFile,2)
  FileClose($hFile)
  GUICtrlSetData($Combo1, "Пункт 1|Пункт 2|Пункт 3", $sLine1)
  GUICtrlSetData($Combo2, "Пункт 1|Пункт 2|Пункт 3",$sLine2)
 EndIf
 
 Switch GUICtrlRead($Combo1)
  Case  "Пункт 1"
    Run("Notepad.Exe")
  Case  "Пункт 2"
    Run("Calc.Exe")
  Case "Пункт 3"
    MsgBox(64,"", "Выбран пункт 3")
 EndSwitch
EndFunc
 
Автор
R

Roman89

Новичок
Сообщения
107
Репутация
3
VladUs
Я нашел где моя ошибка!
Перед
Код:
Case $Combo2

нужно было поставить
Код:
EndSwitch
 
Верх