Что нового

[Элементы GUI] Изменение порядка прорисовки

kermzy

Новичок
Сообщения
8
Репутация
0
Всем добрый день. Не подскажите, как изменить порядок прорисовки элементов GUI, а именно одно изображение сделать над другим? Скажем есть пикчер и фон. Нужно, чтобы пикчер, в определенный момент стал на первый план. Есть предположение, что это делается через стили элементов, но каких именно не могу разобраться.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
kermzy
Наверно изменением статуса отображения удобней скрыть или показать элемент.

Код:
#include <GUIConstantsEx.au3>
GUICtrlSetState($Button, $GUI_SHOW)
GUICtrlSetState($Button, $GUI_HIDE)
 
Автор
K

kermzy

Новичок
Сообщения
8
Репутация
0
Мне понятен ход Ваших мыслей, но я имел ввиду немного другое. Мне необходимо, чтобы фон на заднем плане(картинка большого размера) оставался, а поверх него отрисовывался пикчер маленького размера. Вся проблема в том, что при создании GUI пикчера из тела программы, он создается под фоном(большого пикчера).
Стили при создании фона:
Код:
$Pole = GUICtrlCreatePic(@ScriptDir&"\images\background\pole.jpg", 60, 60, 900, 600, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))

при создании пиикчера:
Код:
$ImgWall = GUICtrlCreatePic(@ScriptDir&"\images\wall\wall.jpg", $NewItemCoordX, $NewItemCoordY, 30, 30, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))


Стили элементов GUI взял те, что создал Koda. Что-то подсказывает, что все таки можно как-то ими задать нужную очередность прорисовки.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
kermzy [?]
Мне необходимо, чтобы фон на заднем плане(картинка большого размера) оставался, а поверх него отрисовывался пикчер маленького размера. Вся проблема в том, что при создании GUI пикчера из тела программы, он создается под фоном(большого пикчера).
Попробуйте создавать картинки от большей к меньшей:
Код:
#include <GUIConstantsEx.au3>

GUICreate('Test', 300, 300)
GUICtrlCreatePic(@ScriptDir & '\1.jpg', 0, 0, 300, 300)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreatePic(@ScriptDir & '\2.jpg', 25, 25, 250, 250)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreatePic(@ScriptDir & '\3.jpg', 50, 50, 200, 200)
GUICtrlSetState(-1, $GUI_DISABLE)
$nPic = GUICtrlCreatePic(@ScriptDir & '\4.jpg', 100, 100, 100, 100)
GUICtrlSetCursor(-1, 0)
GUICtrlSetTip(-1, 'Click')
GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nPic
			MsgBox(64, 'Info', 'Click')

	EndSwitch
WEnd
 
Автор
K

kermzy

Новичок
Сообщения
8
Репутация
0
madmasles

Пробовал, но проблема в том, что создание маленького пикчера происходит именно из тела программы. При этом он упорно создается под большим. Не могу понять в чем дело. Создается сначала большой фон, без стилей, затем при определенном действии создается маленький пикчер, он создается вторым, но несмотря на это создается под фоном.(
Вот, на Вашем примере попробую описать проблему:
Код:
#include <GUIConstantsEx.au3>

GUICreate('Test', 300, 300)
GUICtrlCreatePic(@ScriptDir & '\1.jpg', 0, 0, 300, 300)
GUICtrlCreatePic(@ScriptDir & '\2.jpg', 25, 25, 250, 250)
GUICtrlCreatePic(@ScriptDir & '\3.jpg', 50, 50, 200, 200)
GUISetState()

HotKeySet("{space}", "PicCreate")

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

Func PicCreate()
	$nPic = GUICtrlCreatePic(@ScriptDir & '\4.jpg', 100, 100, 100, 100)
EndFunc


Пикчеры использовал Ваши. Самый маленький видно только при втором вызове функции. В моем примере только после 3-5 раза. Возможно все таки есть какой-то стиль, определяющий положение поверх всех элементов.. или наоборот, под всеми элементами?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
kermzy
У теня так работает:
Код:
#include <GUIConstantsEx.au3>

$fShow = False
GUICreate('Test', 300, 300)
GUICtrlCreatePic(@ScriptDir & '\1.jpg', 0, 0, 300, 300)
;GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreatePic(@ScriptDir & '\2.jpg', 25, 25, 250, 250)
;GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreatePic(@ScriptDir & '\3.jpg', 50, 50, 200, 200)
;GUICtrlSetState(-1, $GUI_DISABLE)
$nPic = GUICtrlCreatePic(@ScriptDir & '\4.jpg', 100, 100, 100, 100)
GUICtrlSetState(-1, $GUI_HIDE)
GUISetState()

HotKeySet("{space}", "PicCreate")

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

Func PicCreate()
	$fShow = Not $fShow
	If $fShow Then
		GUICtrlSetState($nPic, $GUI_SHOW)
	Else
		GUICtrlSetState($nPic, $GUI_HIDE)
	EndIf
EndFunc   ;==>PicCreate
 
Автор
K

kermzy

Новичок
Сообщения
8
Репутация
0
madmasles

В принципе да, но, как я уже говорил, у меня пикчер создается именно из тела программы. Если быть точнее у меня массив координат, и при определенных условиях, создается пикчер с определенными координатами. К сожалению создавать его при создании всех элементов GUI в какой то точке, и потом просто переместить на нужные координаты тоже нету возможности т.к. таких пикчеров может быть хоть весь массив. Я предполагал, что в теле программы буду создавать одноименный пикчер, в заданные координаты, но он создается, под фоном. Очень жаль, если в автоите нету возможности задать принудительно порядок прорисовки элементов GUI.(
 
Верх