Что нового

Как сделать GUI без верхней командной полоски?

Suppir

Продвинутый
Сообщения
967
Репутация
62
Как сделать GUI без верхней командной полоски?
на которой название GUI, кнопки "свернуть", "развернуть", "закрыть"

У меня есть массив, состоящий из номеров вида :
1234567890
123456789035345345
123456
12345678901234567890
1234567890
1234567890234

(количество номеров и их длина неизвестна)

нужно сделать ListBox с возможностью выбора одним кликом любого из номеров. При этом Listbox должен занимать как можно меньше места на экране.


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

GUI в скрипте вообще нет. Хочу временно создать GUI с листбоксом, а когда пользователь сделает выбор, то разрушить GUI.

Может быть есть какой-то другой вариант без создания GUI? (задержка приличная получается).
 

SyDr

Сидра
Сообщения
651
Репутация
158
В стиль пропиши
Код:
-$WS_CAPTION
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Вот так что-ли?
Код:
$Form1 = GUICreate("", 202, 202, 359, 159, 0, 0, BitNOT($WS_CAPTION))



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

Так не работает...
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Попробуй так:
Код:
BitAND($GUI_SS_DEFAULT_GUI,BitNOT($WS_CAPTION))
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Вот я пишу:

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

$Form1 = GUICreate("", 202, 202, 359, 159, 0, 0, BitAND($GUI_SS_DEFAULT_GUI,BitNOT($WS_CAPTION)))
GUISetState(@SW_SHOW)

while 1
	Sleep (100)
WEnd


но ничего не появляется


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

А, нет, вру. Два параметра в строке лишние (нули). Без них нормально показывается GUI, без "шапки". Спасибо
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Попробуй вот так:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("", 202, 202, 359, 159, BitAND($GUI_SS_DEFAULT_GUI,BitNOT($WS_CAPTION)))
GUISetState(@SW_SHOW)

while 1
    Sleep (100)
WEnd
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
snoitaleR, да, я уже понял, там лишние параметры были :smile: наверное, скопировал два раза.
 

SyDr

Сидра
Сообщения
651
Репутация
158
А зачем BitAnd? Достаточно просто $GUI_SS_DEFAULT_GUI - $WS_CAPTION
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
SyDr, все гениальное - просто!
 

hikki

Продвинутый
Сообщения
233
Репутация
99
Suppir сказал(а):
Как сделать GUI без верхней командной полоски?на которой название GUI, кнопки "свернуть", "развернуть", "закрыть"
как сделать тоже самое, только чтоб была видна полоска с названием, но без кнопок развернуть и закрыть?
чтото туго даются стили))
 

SyDr

Сидра
Сообщения
651
Репутация
158
Насколько я знаю, кнопку закрыть нельзя удалить. Или я ошибаюсь?
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
hikki сказал(а):
Suppir сказал(а):
Как сделать GUI без верхней командной полоски?на которой название GUI, кнопки "свернуть", "развернуть", "закрыть"
как сделать тоже самое, только чтоб была видна полоска с названием, но без кнопок развернуть и закрыть?
чтото туго даются стили))
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Нет кнопки закрыть?!", 323, 198, 192, 114, 0, 0)
$Button1 = GUICtrlCreateButton("Выход", 195, 135, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $Button1
			Exit
	EndSwitch
WEnd


:smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
SyDr [?]
кнопку закрыть нельзя удалить
Удалить наврядли, но можно её отключить:

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

$hGUI = GUICreate("GUIDisableCloseButton", 250, 120, -1, -1, BitOR($WS_CAPTION, $WS_SYSMENU))
_GUIDisableCloseButton($hGUI)

$Close_Button = GUICtrlCreateButton("Close", 95, 50, 60, 20)

GUISetState()

While 1
	$nMsg = GUIGetMsg()
	
	Switch $nMsg
		Case $GUI_EVENT_CLOSE, $Close_Button
			Exit
	EndSwitch
WEnd

Func _GUIDisableCloseButton($hWnd)
	Local Const $SC_CLOSE = 0xF060
	Local Const $SC_MOVE = 0xF010
	Local Const $SC_SIZE = 0xF000
	Local Const $SC_RESTORE = 0xF120
	Local Const $SC_MOUSEMENU = 0xF090
	Local Const $SC_MINIMIZE = 0xF020
	Local Const $SC_MAXIMIZE = 0xF030
	
	Local $aMenu = DllCall("User32.dll", "hwnd", "GetSystemMenu", "hwnd", $hWnd, "int", 0)
	
	DllCall("User32.dll", "int", "RemoveMenu", "hwnd", $aMenu[0] , "int", $SC_CLOSE, "int", 0x0)
	;DllCall("User32.dll", "int", "RemoveMenu", "hwnd", $aMenu[0] , "int", $SC_MOVE, "int", 0x0)
EndFunc
 

SyDr

Сидра
Сообщения
651
Репутация
158
Хм... Значит всё таки можно удалить.
Методом тыка обнаружено, что за это отвечает стиль $WS_SYSMENU (Creates a window that has a window menu on its title bar. The WS_CAPTION style must also be specified.)
То есть на этот раз надо:
Код:
-$WS_SYSMENU


А вообще, меня немного огнало в ступор:
Как сделать GUI без верхней командной полоски?
как сделать тоже самое, только чтоб была видна полоска с названием
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Guezt [?]
мой вариант чуть выше разве не проще?
Сорри, я его не проверял. Проще, про стили я забыл :smile: Но ставить 0 будет не совсем корректно, нужно так:

Код:
BitAND($GUI_SS_DEFAULT_GUI, BitNOT($WS_SYSMENU))


SyDr [?]
Методом тыка обнаружено, что за это отвечает стиль $WS_SYSMENU
Но это также удаляет и иконку с меню.

[?]
А зачем BitAnd? Достаточно просто $GUI_SS_DEFAULT_GUI - $WS_CAPTION
Так корректнее, в данном случае оно не важно, но в общем случае из стилей именно так будет правильнее вычитать другие стили, это предотвратит повторное удаление стилей.
Пример:

Код:
$tmp_GUI_SS_DEFAULT_GUI = $GUI_SS_DEFAULT_GUI - $WS_SYSMENU ;Тут мы уже убралди из стилей $WS_SYSMENU
$Form1 = GUICreate("Нет кнопки закрыть?!", 323, 198, 192, 114, $tmp_GUI_SS_DEFAULT_GUI - $WS_SYSMENU) ;Теперь снова убираем (не зная того что стиль уже вычтен, например при чтений с конфига)

;Это чтобы убедиться в корректности данного метода
;$Form1 = GUICreate("Нет кнопки закрыть?!", 323, 198, 192, 114, BitAND($tmp_GUI_SS_DEFAULT_GUI, BitNOT($WS_SYSMENU)))
 

SyDr

Сидра
Сообщения
651
Репутация
158
CreatoR [?]
Но это также удаляет и иконку с меню.
Вродь нельзя только кнопку закрыть убрать. Я не видел GUI без кнопки закрыть, но с иконкой. Точнее видел, но это к данному моменту не относится. Там было дело вообще не с AutoIt


Так корректнее, в данном случае оно не важно, но в общем случае из стилей именно так будет правильнее вычитать другие стили, это предотвратит повторное удаление стилей.
Точно! Сразу вспомнил, когда давным давно вместо констант в стилях использовал численные значения :smile: Причём их сумму считал сам. После чего в параметр прописывал одно число :D
 
Верх