Что нового

Для чего надо ...Dummy

RAMzor

Новичок
Сообщения
14
Репутация
0
Доброе время суток!
Объясните пожалуйста более простым языком для чего надо GUICtrlCreateDummy и соответственно GUICtrlSendToDummy. Никак немогу разобраться в каких случаях стоит воспользоваться Dummy.

P.S Надеюсь что разделом не ошибся. Думал в раздел для новичков, но я про GUI... Если что - ногами не бить. :whistle:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Dummy, это элемент-пустышка. Как и другие элементы AutoIt (Button, Edit, Input и т.д.) он может выдавать сообщения (сигнализировать) об активности, но в отличии от других элементов не имеет графического представления. GUICtrlSendToDummy() нужен для того, чтобы принудительно активировать Dummy + можно передать какое-нибудь значение. Где это может понадобиться? Там, где нельзя немедленно выполнить какое-нибудь действие и нужно "отложить" его на "потом". Собственно для новичков это вряд ли может понадобиться по началу, когда в этом возникнет необходимость, оно само всплывет. Самое простое, где можно его использовать, это акселераторы. Вот небольшой пример:

Код:
Dim $Accel[3][2] = [['{ENTER}', 0], ['{TAB}', 0], ['{SPACE}', 0]]

GUICreate('MyGUI')
For $i = 0 To UBound($Accel) - 1
	$Accel[$i][1] = GUICtrlCreateDummy()
Next
GUISetAccelerators($Accel)
GUISetState()

While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case -3
			ExitLoop
		Case $Accel[0][1]
			MsgBox(0, '', 'You pressed "Enter"!')
		Case $Accel[1][1]
			MsgBox(0, '', 'You pressed "Tab"!')
		Case $Accel[2][1]
			MsgBox(0, '', 'You pressed "Spacebar"!')
	EndSwitch
WEnd


Но в основном используются в функциях WM_ сообщений для "отложения" какого-нибудь действия, т.к. прерывать (останавливать) эти функции нельзя, это чревато зависанием программы. Еще очень удобно вешать на Dummy контекстные меню.

Вообщем, изучай AutoIt, практикуйся, и ты скоро сам разберешься что к чему.

;)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Yashied
Спасибо, очень толковое объяснение. Меня этот вопрос тоже интересовал.
:IL_AutoIt_1:
 
Автор
RAMzor

RAMzor

Новичок
Сообщения
14
Репутация
0
Yashied Огромное спасибо за объяснение.
Поигрался с твоим примером (а до этого с примером из хелпа) и вроде начинаю понимать но всё равно до конца не врубился на 100% где применять - а хочется...

OffTopic:
Я не совсем новечок - с огромным удовольствием пишу на AutoIt с 2001 года... Но вместе с этим я не программист и каждый раз открываю что то новенькое... Поэтому многих "специализированных прибамбасов" незнаю. А отличие продвинутого от новичка наверно в том и есть, что пользуется чем-то иным и более правильно.
Извеняюсь за офтоп.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 575
Репутация
335
RAMzor [?]
от новечка наберно в том и есть что пользуется чем-то иным и более правельно
OffTopic:
от новичка наверно в том и есть, что пользуется чем-то иным и более правильно

Никак не пойму, либо ты очень быстро печатаешь и ошибаешься, либо сильно ошибаешься и медленно печатаешь :D


P.S. Да, да я люблю придираться....
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
369
Использую этот элемент для посылки на него сочетаний клавиш в _IECreateEmbedded(), чтобы запретить обновление и вывод на печать, просто если обновить этот элемент и попробовать вставить туда текст по _IEDocInsertHTML(), то скрипт вылетает с ошибкой.
Код:
$null = GUICtrlCreateDummy() ; элемент для отсылки в него блокирующих сочетаний клавиш браузера
Dim $AccelKeys[4][2] = [['{F5}', $null],['^{F5}', $null],['^n', $null],['^p', $null] ; назначение сочетаний клавиш
GUISetAccelerators($AccelKeys, $hGUI) ; закрепить данные сочетания клавиш
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Кстати, вот еще очень наглядный пример на эту тему.
 
Верх