Что нового

_GUICreateAlfa позиционирование нового окна

saraconor

Новичок
Сообщения
404
Репутация
3
как сделать чтобы второе окошко GUI появилось с теми-же координатами где закрывалось старое? Я как ни пытаюсь -у меня либо окно появляется там-же где и появилось первое (Variant1()), либо копирую позицию старого окна и вставляю в новое, но тогда у меня элементы меню появляются вообще непойми где (Variant1()).
чую что проблема возникает из за -1,-1 в размерах нового окна, но просто "","" там поставить не получается. а раз -1 значит размеры окна привязаны GUICoordMode эксперименты с коим тоже ни к чему хорошему не привели(

в архиве файлы к скрипту.

Код:
#include <Array.au3> ;работа с массивами
#include <GUIConstantsEx.au3> ;базовый интерфейс
#include <WindowsConstants.au3> ;создание окна
#include "_GUICreateAlfa.au3" ;интерфейс с прозрачностью
#include <ButtonConstants.au3> ;свойства кнопок в интерфейсе
#Include <File.au3> ;работа с файлами
#include <Date.au3> ;Возвращает текущую дату в формате ПК.

Variant1()
Variant2()

func Variant1()
FileInstall(@ScriptDir&"\1.bmp",@TempDir&"\1.bmp")
FileInstall(@ScriptDir&"\2.bmp",@TempDir&"\2.bmp")
FileInstall(@ScriptDir&"\3.bmp",@TempDir&"\3.bmp")
FileInstall(@ScriptDir&"\4.bmp",@TempDir&"\4.bmp")
FileInstall(@ScriptDir&"\5.bmp",@TempDir&"\5.bmp")
FileInstall(@ScriptDir&"\6.bmp",@TempDir&"\6.bmp")
FileInstall(@ScriptDir&"\выход.bmp",@TempDir&"\выход.bmp")
FileInstall(@ScriptDir&"\оболочка.png",@TempDir&"\оболочка.png")
FileInstall(@ScriptDir&"\1-меню.png",@TempDir&"\1-меню.png")
FileInstall(@ScriptDir&"\1-1.bmp",@TempDir&"\1-1.bmp")

;создать интерфейс с прозрачностью
$PrWn = _GUICreateAlfa("Проектик",@TempDir&"\оболочка.png")

;кнопки
$1_prct = GUICtrlCreateButton("",9,70,140,37,$BS_BITMAP)
GUICtrlSetImage(-1,@TempDir&"\1.bmp", -1)
$2_prct = GUICtrlCreateButton("",9,107,140,37,$BS_BITMAP)
GUICtrlSetImage(-1,@TempDir&"\2.bmp", -1)
$3_prct = GUICtrlCreateButton("",9,144,140,37,$BS_BITMAP)
GUICtrlSetImage(-1,@TempDir&"\3.bmp", -1)
$4_prct = GUICtrlCreateButton("",148,70,140,37,$BS_BITMAP)
GUICtrlSetImage(-1,@TempDir&"\4.bmp", -1)
$5_prct = GUICtrlCreateButton("",148,107,140,37,$BS_BITMAP)
GUICtrlSetImage(-1,@TempDir&"\5.bmp", -1)
$6_prct = GUICtrlCreateButton("",148,144,140,37,$BS_BITMAP)
GUICtrlSetImage(-1,@TempDir&"\6.bmp", -1)
$7_prct = GUICtrlCreateButton("",236,53,50,19,$BS_BITMAP)
GUICtrlSetImage(-1,@TempDir&"\выход.bmp", -1)
GUICtrlSetState($1_prct, $GUI_FOCUS) ;выделить 1 кнопку
GUISetState();СОЗДАТЬ ОКНО
WinSetOnTop($PrWn, "", 1);вытащить его поверх всех окон
$mlop = 0

;цикл ожидания
While $mlop = 0
Switch GUIGetMsg()
Case $1_prct
$PrWn2 = _GUICreateAlfa("Проектик",@TempDir&"\1-меню.png")
$1_prct = GUICtrlCreateButton("",9,70,140,37,$BS_BITMAP)
; кнопка нормально создается там где нужно.
GUICtrlSetImage(-1,@TempDir&"\1.bmp", -1)
GUISetState();СОЗДАТЬ ОКНО
WinSetOnTop($PrWn2, "", 1);вытащить его поверх всех окон
Guidelete($PrWn);удалить старое окно
sleep(500)
$mlop = 1
EndSwitch
WEnd

;удалить файлы из Temp
filedelete(@TempDir&"\1.bmp")
filedelete(@TempDir&"\2.bmp")
filedelete(@TempDir&"\3.bmp")
filedelete(@TempDir&"\4.bmp")
filedelete(@TempDir&"\5.bmp")
filedelete(@TempDir&"\6.bmp")
filedelete(@TempDir&"\выход.bmp")
filedelete(@TempDir&"\оболочка.png")
filedelete(@TempDir&"\1-меню.png")
filedelete(@TempDir&"\1-1.bmp")

GUIDelete()
exit
endfunc

func Variant2()
FileInstall(@ScriptDir&"\1.bmp",@TempDir&"\1.bmp")
FileInstall(@ScriptDir&"\2.bmp",@TempDir&"\2.bmp")
FileInstall(@ScriptDir&"\3.bmp",@TempDir&"\3.bmp")
FileInstall(@ScriptDir&"\4.bmp",@TempDir&"\4.bmp")
FileInstall(@ScriptDir&"\5.bmp",@TempDir&"\5.bmp")
FileInstall(@ScriptDir&"\6.bmp",@TempDir&"\6.bmp")
FileInstall(@ScriptDir&"\выход.bmp",@TempDir&"\выход.bmp")
FileInstall(@ScriptDir&"\оболочка.png",@TempDir&"\оболочка.png")
FileInstall(@ScriptDir&"\1-меню.png",@TempDir&"\1-меню.png")
FileInstall(@ScriptDir&"\1-1.bmp",@TempDir&"\1-1.bmp")

;создать интерфейс с прозрачностью
$PrWn = _GUICreateAlfa("Проектик",@TempDir&"\оболочка.png")

;кнопки
$1_prct = GUICtrlCreateButton("",9,70,140,37,$BS_BITMAP)
GUICtrlSetImage(-1,@TempDir&"\1.bmp", -1)
$2_prct = GUICtrlCreateButton("",9,107,140,37,$BS_BITMAP)
GUICtrlSetImage(-1,@TempDir&"\2.bmp", -1)
$3_prct = GUICtrlCreateButton("",9,144,140,37,$BS_BITMAP)
GUICtrlSetImage(-1,@TempDir&"\3.bmp", -1)
$4_prct = GUICtrlCreateButton("",148,70,140,37,$BS_BITMAP)
GUICtrlSetImage(-1,@TempDir&"\4.bmp", -1)
$5_prct = GUICtrlCreateButton("",148,107,140,37,$BS_BITMAP)
GUICtrlSetImage(-1,@TempDir&"\5.bmp", -1)
$6_prct = GUICtrlCreateButton("",148,144,140,37,$BS_BITMAP)
GUICtrlSetImage(-1,@TempDir&"\6.bmp", -1)
$7_prct = GUICtrlCreateButton("",236,53,50,19,$BS_BITMAP)
GUICtrlSetImage(-1,@TempDir&"\выход.bmp", -1)
GUICtrlSetState($1_prct, $GUI_FOCUS) ;выделить 1 кнопку
GUISetState();СОЗДАТЬ ОКНО
WinSetOnTop($PrWn, "", 1);вытащить его поверх всех окон
$mlop = 0

;цикл ожидания
While $mlop = 0
Switch GUIGetMsg()
Case $1_prct
$oldwinpos = wingetpos($PrWn)
$PrWn2 = _GUICreateAlfa("Проектик",@TempDir&"\1-меню.png",-1,-1,$oldwinpos[0],$oldwinpos[1])
$1_prct = GUICtrlCreateButton("",9,70,140,37,$BS_BITMAP)
; !!! кнопка появляется незнамо-где( и при попытке подтянуть ее к основному окну меняя параметры позиции -исчезает.
GUICtrlSetImage(-1,@TempDir&"\1.bmp", -1)
GUISetState();СОЗДАТЬ ОКНО
WinSetOnTop($PrWn2, "", 1);вытащить его поверх всех окон
Guidelete($PrWn);удалить старое окно
sleep(500)
$mlop = 1
EndSwitch
WEnd

;удалить файлы из Temp
filedelete(@TempDir&"\1.bmp")
filedelete(@TempDir&"\2.bmp")
filedelete(@TempDir&"\3.bmp")
filedelete(@TempDir&"\4.bmp")
filedelete(@TempDir&"\5.bmp")
filedelete(@TempDir&"\6.bmp")
filedelete(@TempDir&"\выход.bmp")
filedelete(@TempDir&"\оболочка.png")
filedelete(@TempDir&"\1-меню.png")
filedelete(@TempDir&"\1-1.bmp")

GUIDelete()
exit
endfunc
 
Автор
S

saraconor

Новичок
Сообщения
404
Репутация
3
подскажите пожалуйсто как быть :'(
 

xaker

Знающий
Сообщения
52
Репутация
16
так подойдет ?
Код:
#include <Array.au3> ;работа с массивами
#include <GUIConstantsEx.au3> ;базовый интерфейс
#include <WindowsConstants.au3> ;создание окна
#include "_GUICreateAlfa.au3" ;интерфейс с прозрачностью
#include <ButtonConstants.au3> ;свойства кнопок в интерфейсе
#include <File.au3> ;работа с файлами
#include <Date.au3> ;Возвращает текущую дату в формате ПК.

Variant1()

Func Variant1()
	$PrWn1 = _GUICreateAlfa("Проектик", @ScriptDir & "\оболочка.png")
	$1_prct = GUICtrlCreateButton("", 9, 70, 140, 37, $BS_BITMAP)
	GUICtrlSetImage(-1,@TempDir&"\выход.bmp", -1)
	$7_prct = GUICtrlCreateButton("",236,53,50,19,$BS_BITMAP)
	GUICtrlSetImage(-1,@TempDir&"\выход.bmp", -1)
	GUICtrlSetState($1_prct, $GUI_FOCUS) ;выделить 1 кнопку
	GUISetState();СОЗДАТЬ ОКНО
	WinSetOnTop($PrWn1, "", 1);вытащить его поверх всех окон

	$PrWn2 = _GUICreateAlfa("Проектик", @ScriptDir & "\оболочка.png")
	$2_prct = GUICtrlCreateButton("", 9, 70, 140, 37, $BS_BITMAP)
	GUICtrlSetImage(-1, @ScriptDir & "\1.bmp", -1)
	$8_prct = GUICtrlCreateButton("",236,53,50,19,$BS_BITMAP)
	GUICtrlSetImage(-1,@TempDir&"\выход.bmp", -1)
	GUICtrlSetState($2_prct, $GUI_FOCUS) ;выделить 1 кнопку
	GUISetState();СОЗДАТЬ ОКНО
	WinSetOnTop($PrWn2, "", 1);вытащить его поверх всех окон

	_GuiSwitchEx( $PrWn1, $PrWn2 )

	While 1
		Switch GUIGetMsg()
			Case $1_prct
				_GuiSwitchEx( $PrWn2, $PrWn1 )
			Case $2_prct
				_GuiSwitchEx( $PrWn1, $PrWn2 )
			Case $7_prct, $8_prct
				Exit
		EndSwitch
	WEnd
EndFunc   ;==>Variant1

Func _GuiSwitchEx( $hWin1, $hWin2 )
	GUISetState(@SW_SHOW, $hWin1)
	GUISetState(@SW_HIDE, $hWin2)
	$aPos = WinGetPos($hWin2)
	WinMove( $hWin1, "", $aPos[0], $aPos[1])
	WinMove( $hWin2, "", 2000, 2000)
EndFunc
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
saraconor
Что сделано:
1. FileInstall в первом параметре может содержать только явный путь, иначе компиляция выдаст ошибку. То есть @ScriptDir удалено.
2. #NoTrayIcon - скрывает иконку в трее, на время теста закоментирована.
3. Инвертировал триггер $mlop, так проще указывать в цилке
4. Вместо пересоздания окна сделал удаление элементов интерфейса, в принципе тоже самое.
5. GUISetState() ; Показать созданное окно

Код:
#include <Array.au3> ;работа с массивами
#include <GUIConstantsEx.au3> ;базовый интерфейс
#include <WindowsConstants.au3> ;создание окна
#include "_GUICreateAlfa.au3" ;интерфейс с прозрачностью
#include <ButtonConstants.au3> ;свойства кнопок в интерфейсе
#include <File.au3> ;работа с файлами
#include <Date.au3> ;Возвращает текущую дату в формате ПК.

; #NoTrayIcon ; скрыть иконку в трее

Variant1()
Variant2()

Func Variant1()
	FileInstall("1.bmp", @TempDir & "\1.bmp")
	FileInstall("2.bmp", @TempDir & "\2.bmp")
	FileInstall("3.bmp", @TempDir & "\3.bmp")
	FileInstall("4.bmp", @TempDir & "\4.bmp")
	FileInstall("5.bmp", @TempDir & "\5.bmp")
	FileInstall("6.bmp", @TempDir & "\6.bmp")
	FileInstall("выход.bmp", @TempDir & "\выход.bmp")
	FileInstall("оболочка.png", @TempDir & "\оболочка.png")
	FileInstall("1-меню.png", @TempDir & "\1-меню.png")
	FileInstall("1-1.bmp", @TempDir & "\1-1.bmp")

	;создать интерфейс с прозрачностью
	$PrWn = _GUICreateAlfa("Проектик", @TempDir & "\оболочка.png")

	;кнопки
	$1_prct = GUICtrlCreateButton("", 9, 70, 140, 37, $BS_BITMAP)
	GUICtrlSetImage(-1, @TempDir & "\1.bmp", -1)
	$2_prct = GUICtrlCreateButton("", 9, 107, 140, 37, $BS_BITMAP)
	GUICtrlSetImage(-1, @TempDir & "\2.bmp", -1)
	$3_prct = GUICtrlCreateButton("", 9, 144, 140, 37, $BS_BITMAP)
	GUICtrlSetImage(-1, @TempDir & "\3.bmp", -1)
	$4_prct = GUICtrlCreateButton("", 148, 70, 140, 37, $BS_BITMAP)
	GUICtrlSetImage(-1, @TempDir & "\4.bmp", -1)
	$5_prct = GUICtrlCreateButton("", 148, 107, 140, 37, $BS_BITMAP)
	GUICtrlSetImage(-1, @TempDir & "\5.bmp", -1)
	$6_prct = GUICtrlCreateButton("", 148, 144, 140, 37, $BS_BITMAP)
	GUICtrlSetImage(-1, @TempDir & "\6.bmp", -1)
	$7_prct = GUICtrlCreateButton("", 236, 53, 50, 19, $BS_BITMAP)
	GUICtrlSetImage(-1, @TempDir & "\выход.bmp", -1)
	GUICtrlSetState($1_prct, $GUI_FOCUS) ;выделить 1 кнопку
	GUISetState() ; Показать созданное окно
	WinSetOnTop($PrWn, "", 1);вытащить его поверх всех окон
	$mlop = 1

	;цикл ожидания
	While $mlop
		Switch GUIGetMsg()
			Case $1_prct
				; удаление элементов
				GUICtrlDelete($2_prct)
				GUICtrlDelete($3_prct)
				GUICtrlDelete($4_prct)
				GUICtrlDelete($5_prct)
				GUICtrlDelete($6_prct)
				GUICtrlDelete($7_prct)
				Sleep(500)
				$mlop = 0
		EndSwitch
	WEnd

	;удалить файлы из Temp
	FileDelete(@TempDir & "\1.bmp")
	FileDelete(@TempDir & "\2.bmp")
	FileDelete(@TempDir & "\3.bmp")
	FileDelete(@TempDir & "\4.bmp")
	FileDelete(@TempDir & "\5.bmp")
	FileDelete(@TempDir & "\6.bmp")
	FileDelete(@TempDir & "\выход.bmp")
	FileDelete(@TempDir & "\оболочка.png")
	FileDelete(@TempDir & "\1-меню.png")
	FileDelete(@TempDir & "\1-1.bmp")

	GUIDelete()
	Exit
EndFunc   ;==>Variant1

Func Variant2()
	FileInstall("1.bmp", @TempDir & "\1.bmp")
	FileInstall("2.bmp", @TempDir & "\2.bmp")
	FileInstall("3.bmp", @TempDir & "\3.bmp")
	FileInstall("4.bmp", @TempDir & "\4.bmp")
	FileInstall("5.bmp", @TempDir & "\5.bmp")
	FileInstall("6.bmp", @TempDir & "\6.bmp")
	FileInstall("выход.bmp", @TempDir & "\выход.bmp")
	FileInstall("оболочка.png", @TempDir & "\оболочка.png")
	FileInstall("1-меню.png", @TempDir & "\1-меню.png")
	FileInstall("1-1.bmp", @TempDir & "\1-1.bmp")

	;создать интерфейс с прозрачностью
	$PrWn = _GUICreateAlfa("Проектик", @TempDir & "\оболочка.png", -1, -1, $g_aiCoor[0], $g_aiCoor[1])

	;кнопки
	$1_prct = GUICtrlCreateButton("", 9, 70, 140, 37, $BS_BITMAP)
	GUICtrlSetImage(-1, @TempDir & "\1.bmp", -1)
	$2_prct = GUICtrlCreateButton("", 9, 107, 140, 37, $BS_BITMAP)
	GUICtrlSetImage(-1, @TempDir & "\2.bmp", -1)
	$3_prct = GUICtrlCreateButton("", 9, 144, 140, 37, $BS_BITMAP)
	GUICtrlSetImage(-1, @TempDir & "\3.bmp", -1)
	$4_prct = GUICtrlCreateButton("", 148, 70, 140, 37, $BS_BITMAP)
	GUICtrlSetImage(-1, @TempDir & "\4.bmp", -1)
	$5_prct = GUICtrlCreateButton("", 148, 107, 140, 37, $BS_BITMAP)
	GUICtrlSetImage(-1, @TempDir & "\5.bmp", -1)
	$6_prct = GUICtrlCreateButton("", 148, 144, 140, 37, $BS_BITMAP)
	GUICtrlSetImage(-1, @TempDir & "\6.bmp", -1)
	$7_prct = GUICtrlCreateButton("", 236, 53, 50, 19, $BS_BITMAP)
	GUICtrlSetImage(-1, @TempDir & "\выход.bmp", -1)
	GUICtrlSetState($1_prct, $GUI_FOCUS) ;выделить 1 кнопку
	GUISetState() ; Показать созданное окно
	WinSetOnTop($PrWn, "", 1);вытащить его поверх всех окон
	$mlop = 1

	;цикл ожидания
	While $mlop
		Switch GUIGetMsg()
			Case $1_prct
				GUICtrlDelete($2_prct)
				GUICtrlDelete($3_prct)
				GUICtrlDelete($4_prct)
				GUICtrlDelete($5_prct)
				GUICtrlDelete($6_prct)
				GUICtrlDelete($7_prct)
				Sleep(500)
				$mlop = 0
		EndSwitch
	WEnd

	;удалить файлы из Temp
	FileDelete(@TempDir & "\1.bmp")
	FileDelete(@TempDir & "\2.bmp")
	FileDelete(@TempDir & "\3.bmp")
	FileDelete(@TempDir & "\4.bmp")
	FileDelete(@TempDir & "\5.bmp")
	FileDelete(@TempDir & "\6.bmp")
	FileDelete(@TempDir & "\выход.bmp")
	FileDelete(@TempDir & "\оболочка.png")
	FileDelete(@TempDir & "\1-меню.png")
	FileDelete(@TempDir & "\1-1.bmp")

	GUIDelete()
	Exit
EndFunc   ;==>Variant2
 
Автор
S

saraconor

Новичок
Сообщения
404
Репутация
3
AZJIO ваш скрипт приводит к ошибке.

xaker ваша версия интереснее, однако скомпилированный файл не может работать без исходников зображений, т.е. перетащив програмку на другой компьютер, она не заработает.
Да простят меня модераторы за вопрос не по теме, но как вставлять цитаты других участников форума?? кнопку не вижу.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
saraconor
Удалить из строчки
Код:
, -1, -1, $g_aiCoor[0], $g_aiCoor[1]

у меня выход после первой функции, вторая не отрабатывает, так что остался мусор от проб.
 
Верх