1 (изменено: serzh82saratov, 2013-11-12 20:43:44)

Тема: AHK: Заблокировать для ввода только часть Gui

Никак не могу придумать... Нужно при нажатии кнопки блокировать\разблокировать для пользователя часть окна, на котором будет много других контролов которые пользователь не должен использовать во время блокировки. И хочется что-бы блокированная часть становилась как бы серой, типа применения GuiControl, Disable , Disable-ить каждый контрол - не вариант.
Вообщем пока это всё просто обрезается, а не хотелось бы:


Gui, +HWNDhGui -DPIScale 
Gui, Color, FF8C00 
Gui, Add, Tab2, w800 h600, 1|2
Gui, Tab, 1
Gui, Add, ListBox, r7, 123|123|123|123|123|123|123  
Gui, Add, GroupBox, x222 y222 w444 h222 hwndhGroupBox
Gui, Add, Button, xp+122 yp+180 w200 h35 gButton vButton, Блокировать
Gui, Show  
Return 

Button:     
   WinSet, Region, % T := !T ? "226-261 W443 H214 R10-10" : "", ahk_id %hGui% 
    GuiControl, , Button, % T ? "Разблокировать" : "Блокировать"
    Return
    
Esc::
GuiClose:
    ExitApp 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

2

Re: AHK: Заблокировать для ввода только часть Gui

serzh82saratov пишет:

Никак не могу придумать... Нужно при нажатии кнопки блокировать\разблокировать для пользователя часть окна, на котором будет много других контролов которые пользователь не должен использовать во время блокировки. И хочется что-бы блокированная часть становилась как бы серой, типа применения GuiControl, Disable , Disable-ить каждый контрол - не вариант.

Почему отключать каждый контрол - не вариант? Вроде бы самый лучший способ.
Как себе вообразить окно, которое стало "серым" наполовину? Оно вроде как не делится на части. Единственная мысль - поместить какой-нибудь большой контрол на пол-окна и делать его видимым на время "блокировки".

3 (изменено: serzh82saratov, 2013-03-21 23:01:05)

Re: AHK: Заблокировать для ввода только часть Gui

Почему отключать каждый контрол - не вариант? Вроде бы самый лучший способ.

Не много долго оно срабатывает когда их овер9000. И там ещё "Tab" сверху, а его уже не отключишь.

Единственная мысль - поместить какой-нибудь большой контрол на пол-окна и делать его видимым на время "блокировки".

Пока не могу сообразить какой, и как его сделать внутри прозрачным, а по бокам полупрозрачным.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

4 (изменено: serzh82saratov, 2013-03-24 04:13:28)

Re: AHK: Заблокировать для ввода только часть Gui

Единственная мысль - поместить какой-нибудь большой контрол на пол-окна и делать его видимым на время "блокировки".

Чтобы не помещал сверху, при кликах в эту область нижние контролы начинают просвечивать. Можно ли как то сделать контролу AlwaysOnTop.
И как заблокировать переключение таба по Ctrl+Tab и Ctrl+Shift+Tab?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5

Re: AHK: Заблокировать для ввода только часть Gui

Или как после команды "GuiControl, Disable, Tab" разблокировать нужные контролы?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: Заблокировать для ввода только часть Gui

Можно снимок экрана с 9000 элементов управления выложить?

7

Re: AHK: Заблокировать для ввода только часть Gui

ypppu пишет:

Можно снимок экрана с 9000 элементов управления выложить?

Да проблемка даже не в 9000 элементах, а в том что при переключении таба придётся выполнять несколько условий, и выполнять много действий которые хотелось бы выполнять только по кнопочке. + Хочется узнать обходные пути.

9000 элементов ещё не созданы

Как можно заблокировать таб?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: Заблокировать для ввода только часть Gui

serzh82saratov пишет:

9000 элементов ещё не созданы

serzh82saratov пишет:

Почему отключать каждый контрол - не вариант? Вроде бы самый лучший способ.

Не много долго оно срабатывает когда их овер9000.


Так это догадки насчёт быстродейтвия или Вы проверяли?

9

Re: AHK: Заблокировать для ввода только часть Gui

ypppu пишет:

Так это догадки насчёт быстродейтвия или Вы проверяли?

Хорошо, как отключить Таб?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: Заблокировать для ввода только часть Gui

serzh82saratov пишет:
ypppu пишет:

Так это догадки насчёт быстродейтвия или Вы проверяли?

Хорошо, как отключить Таб?

Ну, это можно (c)

#SingleInstance, Force
Gui, Add, Tab, w500 h550 vMyTab, Основные|Вид|Видимость|Установки
Gui, Add, GroupBox, x22 y22 w444 h222 
Gui, Add, Button,  w200 h35, 111
Gui, Add, Button,  w200 h35 , 222
Gui, Add, Button,  w200 h35 , 333
Gui, Add, Button, xp+122 yp+180 w200 h35 gButton vButton, Блокировать
Gui, Show
Return

Button:
GUIControl, Disable, MyTab
Return

Esc::
GuiClose:
ExitApp 

11

Re: AHK: Заблокировать для ввода только часть Gui

ypppu пишет:

Ну, это можно (c)

Но не нужно. Как мне после этого управлять нужными мне контролами?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

Re: AHK: Заблокировать для ввода только часть Gui

serzh82saratov пишет:
ypppu пишет:

Ну, это можно (c)

Но не нужно. Как мне после этого управлять нужными мне контролами?

Как это - не нужно? Я дал готовый код на заданный вопрос.
Контролами можно управлять командой GUIControl.

13

Re: AHK: Заблокировать для ввода только часть Gui

ypppu пишет:

Я дал готовый код на заданный вопрос.

Ну GUIControl, Disable, MyTab конечно не стандартное решение

ypppu пишет:

Контролами можно управлять командой GUIControl.

Так как их разблокировать для пользователя при заблокированном Tab`е?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: AHK: Заблокировать для ввода только часть Gui

Теперь уже не представляю, чего Вы хотите... В первом сообщении кнопка "Заблокировать" находится внутри вкладки, которую она блокирует. Неудивительно, что при этом блокируется сама кнопка.

Сформулируйте вопрос чётко и однозначно.

15

Re: AHK: Заблокировать для ввода только часть Gui

Чтобы на вашем примере кнопка "Блокировать" оставалась неблокированной

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16

Re: AHK: Заблокировать для ввода только часть Gui

serzh82saratov пишет:

Чтобы на вашем примере кнопка "Блокировать" оставалась неблокированной

Вуаля!

#SingleInstance, Force
Gui, Add, Button,  , Блокировать
Gui, Add, Button,  , Разблокировать
Gui, Add, Tab, w500 h550 vMyTab, Основные|Вид|Видимость|Установки
Gui, Add, GroupBox, w444 h222 
Gui, Add, Button,  w200 h35, 111
Gui, Add, Button,  w200 h35, 222
Gui, Add, Button,  w200 h35, 333
Gui, Show
Return

ButtonБлокировать:
GUIControl, Disable, MyTab
Return

ButtonРазблокировать:
GUIControl, Enable, MyTab
Return

Esc::
GuiClose:
ExitApp

17

Re: AHK: Заблокировать для ввода только часть Gui

На табе должна находится кнопка!
И ещё DropDownList и кнопка.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

18

Re: AHK: Заблокировать для ввода только часть Gui

serzh82saratov пишет:

На табе должна находится кнопка!

http://ic.pics.livejournal.com/kryworuchko93/61177386/3295/3295_300.jpg

19

Re: AHK: Заблокировать для ввода только часть Gui

ypppu
Да вы так сильно не напрягайтесь, если не смогли понять суть задачи.
У меня тоже такая картинка есть в коллекции.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20

Re: AHK: Заблокировать для ввода только часть Gui

Вы хотите заблокировать сразу много элементов управления (контролов) нажатием одной кнопки в окне GUI. Сделать это напрямую почему-то тяжело/невозможно. Поэтому Вы стремитесь разместить контролы на вкладке элемента "Tab", чтобы можно было их заблокировать одним махом.

А я всё никак не пойму, зачем кнопку блокировки размещать в самом элементе "Tab". Какой от этого прок? И вообще, Вам нужно, чтобы она там была визуально, или действительно размещалась внутри вкладки элемента "Tab"?

21

Re: AHK: Заблокировать для ввода только часть Gui

А я всё никак не пойму, зачем кнопку блокировки размещать в самом элементе "Tab".

потому что больше её разместить негде.

Вам нужно, чтобы она там была визуально, или действительно размещалась внутри вкладки элемента "Tab"?

Как понять визуально?
Там будет несколько элементов которые должны работать, остальные заблокированы в том числе нельзя чтоб срабатывал ТАБ. Элементы должны быть все размещены на табе, т.к. Таб на всё окно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

Re: AHK: Заблокировать для ввода только часть Gui

Если кнопка будет внутри заблокированного Tab, естественно, она окажется заблокированной. Поэтому я и не понял Вашего стремления туда её засунуть.

serzh82saratov пишет:

Как понять визуально?
Там будет несколько элементов которые должны работать, остальные заблокированы в том числе нельзя чтоб срабатывал ТАБ. Элементы должны быть все размещены на табе, т.к. Таб на всё окно.

Визуально - это так:

#SingleInstance, Force
Gui, Add, Button,  x300 y500, Блокировать
Gui, Add, Button,  x300 y550, Разблокировать
Gui, Add, Tab, x10 y10 w500 h550 vMyTab, Основные|Вид|Видимость|Установки
Gui, Add, GroupBox, w444 h222 
Gui, Add, Button,  w200 h35, 111
Gui, Add, Button,  w200 h35, 222
Gui, Add, Button,  w200 h35, 333
Gui, Show
Return

ButtonБлокировать:
GUIControl, Disable, MyTab
Return

ButtonРазблокировать:
GUIControl, Enable, MyTab
Return

Esc::
GuiClose:
ExitApp

Кнопки не принадлежат вкладке элемента Tab и расположены поверх него. Однако, я не испытывал такой способ в полной мере. На XP работает без глюков.

23 (изменено: serzh82saratov, 2013-03-28 23:47:33)

Re: AHK: Заблокировать для ввода только часть Gui

Я вот тут подумал, а возможно ли контрол созданный для какой-то конкретной вкладки таба, на время сделать независимым от этой вкладки?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

24

Re: AHK: Заблокировать для ввода только часть Gui

Можно заблокировать таб, и заменить "клоном" контрола который не надо блокировать в этой вкладке:


Gui, +HWNDhGui -DPIScale 
Gui, Color, FF8C00 
Gui, Add, Tab2, w800 h600 vTab, 1|2
Gui, Tab, 1
Gui, Add, ListBox, r19, 123|123|123|123|123|123|123|123|123|123|123|123|123|123|123|123|123|123|123  
Gui, Add, GroupBox, x222 y222 w444 h222  
Gui, Add, Button, xp+122 yp+180 w200 h35 gButton vButton hwndhButton, Блокировать
Gui, Show
Return

Button:
    GuiControl,, Button, % ButText := (T := !T) ? "Разблокировать" : "Блокировать"
    GuiControlGet, Pos, Pos, Button    
    GuiControl, -v, Button 
    GuiControl, Disable%T%, Tab 
    DllCall("DestroyWindow", "Ptr", hButton) 
    Gui, Tab, 1
    Gui, Add, Button, x%Posx% y%Posy% w%Posw% h%Posh% vButton gButton hwndhButton, %ButText%
    Return
    
GuiEscape:
GuiClose:
    ExitApp

Выглядит не очень.

-----

Скрывать и показывать большие группы контролов лучше, используя другой таб в нужной вкладке первого таба (возможно заблокированного). При переключении вкладок первого таба скрывать\показывать второй таб:


Gui, +HWNDhGui -DPIScale 
Gui, Color, FF8C00 
Gui, Add, Tab2, w800 h600 vTab1 gTab1, 1|2|3
Gui, Tab, 1 
Gui, Add, ListBox, r19, 123|123|123|123|123|123|123|123|123|123|123|123|123|123|123|123|123|123|123  

Gui, Add, Tab2, xp+222 yp+222 w0 h0 vTab2, | 
Gui, Add, GroupBox, w444 h222   
Gui, Add, Button, xp+122 yp+180 w200 h35 gButton vButton, Блокировать
Gui, Show
Return

Button:
    GuiControl,, Button, % (T := !T) ? "Разблокировать" : "Блокировать" 
    GuiControl, Disable%T%, Tab1
    Return
    
Tab1:
    GuiControlGet, Tab1 
    GuiControl, % "Hide" (Tab1 != 1), Tab2 
    Return

GuiEscape:
GuiClose:
    ExitApp
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui