Что нового

Как убрать мерцание при создании нового обьекта GUI в уже созданном елементе Tab

mmsgeorge

Новичок
Сообщения
96
Репутация
0
Здравствуйте! Созданы вкладки с помощью
Код:
GUICtrlCreateTab
. В них созданы разные элементы GUI и в конце GUICtrlCreateTabItem("").
Далее мне понадобилось создать новый элемент в Tab через функцию, если не добавить GUISwitch($hWin,$tabitem), то создается во всех вкладках Tab, а если добавить в конце создания элементов GUICtrlCreateTabItem(""), то не сразу отображается, а нужно по переходить по вкладкам. Если же все сделано как справке, то при создании элемента, происходит мерцание(мигание) окна, как убрать этот эффект? Он происходит если добавлен GUICtrlCreateTabItem("")
 
Автор
M

mmsgeorge

Новичок
Сообщения
96
Репутация
0
Alofa
Вот так новый элемент помещается во все вкладки
Код:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <ListBoxConstants.au3>
#include <StaticConstants.au3>
#include <Misc.au3>
#include <GuiButton.au3>
#include <WinAPI.au3>
#include <Array.au3>
#include <GuiEdit.au3>
#include <SendMessage.au3>
#include <String.au3>
#include <File.au3>
#include <Date.au3>
#include <GuiListBox.au3>
#include <ComboConstants.au3>
#include <TabConstants.au3>
#include <GuiImageList.au3>
#include <GuiButton.au3>

#include <GDIPlus.au3>
#include <WinAPIEx.au3>
Opt("GUIOnEventMode", 1)
;(Координаты razmerov i pologeniy);
Global $xx[100]
Global $yy[100]
Global $Razmer_Shirina[100]
Global $Razmer_Visota[100]



$index_massiv = 1
papmetri_ellementa($index_massiv, @DesktopWidth / 20, @DesktopHeight / 20, @DesktopWidth * 0.7, @DesktopHeight * 0.7)
$Okno_Glavnoe = GUICreate("14", $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv], $xx[$index_massiv], $yy[$index_massiv], BitOR($WS_MINIMIZEBOX, $WS_SYSMENU, $WS_MAXIMIZEBOX, $WS_MAXIMIZE), $WS_EX_ACCEPTFILES);,$WS_MAXIMIZE) ;создает главное окно
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE_Okno_Glavnoe") ;создает функцию для главного окна
Global $tab_karta = GUICtrlCreateTab(0, 0, @DesktopWidth, @DesktopHeight, BitOR($TCS_FORCEICONLEFT, $TCS_FIXEDWIDTH, $TCS_HOTTRACK, $TCS_RIGHTJUSTIFY, $TCS_MULTILINE))

Global $parametri_karta = GUICtrlCreateTabItem("Карта")
$index_massiv = 2
papmetri_ellementa($index_massiv, 30, 45, 85, 20)
$vrem_element = GUICtrlCreateLabel("Путь к картинке", $xx[$index_massiv], $yy[$index_massiv], $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv])

Global $tab_osobennost_karta = GUICtrlCreateTabItem("Особенности")

$index_massiv = 3
papmetri_ellementa($index_massiv, 100, 100, 180, 20)
$noviy_shablon_osobennosti = GUICtrlCreateLabel("НОВЫЙ ШАБЛОН", $xx[$index_massiv], $yy[$index_massiv], $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv])
GUICtrlSetFont($noviy_shablon_osobennosti, 13, 800, 0, "Segoe Script")
$index_massiv = 4
papmetri_ellementa($index_massiv, 300,300, 150, 150)
Global $knopka_svernut_razvernut_1 = GUICtrlCreateButton("Нажми",$xx[$index_massiv], $yy[$index_massiv], $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv])
GUICtrlSetOnEvent($knopka_svernut_razvernut_1,"t")


GUISwitch($Okno_Glavnoe) ;переключение на главное окно
GUISetState() ;отображение конопок и окон



While 1
	Sleep(1000) ; Цикл ожидания
WEnd

Func t()
$index_massiv = 48
papmetri_ellementa($index_massiv, 200,200, 180, 20)
$noviy_shablon_osobennosti = GUICtrlCreateLabel("НОВЫЙ ШАБЛОН", $xx[$index_massiv], $yy[$index_massiv], $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv])
GUICtrlSetFont($noviy_shablon_osobennosti, 13, 800, 0, "Segoe Script")

EndFunc   ;==>t

Func CLOSE_Okno_Glavnoe()
	Exit
EndFunc   ;==>CLOSE_Okno_Glavnoe

Func papmetri_ellementa($index, $x_cor, $y_cor, $razmer_w, $razmer_h)
	$xx[$index] = $x_cor
	$yy[$index] = $y_cor
	$Razmer_Shirina[$index] = $razmer_w
	$Razmer_Visota[$index] = $razmer_h
EndFunc   ;==>papmetri_ellementa


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

Alofa
А вот так происходит мерцание , особенно заметно , когда много элементов уже
Код:
#include #include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <ListBoxConstants.au3>
#include <StaticConstants.au3>
#include <Misc.au3>
#include <GuiButton.au3>
#include <WinAPI.au3>
#include <Array.au3>
#include <GuiEdit.au3>
#include <SendMessage.au3>
#include <String.au3>
#include <File.au3>
#include <Date.au3>
#include <GuiListBox.au3>
#include <ComboConstants.au3>
#include <TabConstants.au3>
#include <GuiImageList.au3>
#include <GuiButton.au3>

#include <GDIPlus.au3>
#include <WinAPIEx.au3>
Opt("GUIOnEventMode", 1)
;(Координаты razmerov i pologeniy);
Global $xx[100]
Global $yy[100]
Global $Razmer_Shirina[100]
Global $Razmer_Visota[100]



$index_massiv = 1
papmetri_ellementa($index_massiv, @DesktopWidth / 20, @DesktopHeight / 20, @DesktopWidth * 0.7, @DesktopHeight * 0.7)
Global $Okno_Glavnoe = GUICreate("14", $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv], $xx[$index_massiv], $yy[$index_massiv], BitOR($WS_MINIMIZEBOX, $WS_SYSMENU, $WS_MAXIMIZEBOX, $WS_MAXIMIZE), $WS_EX_ACCEPTFILES);,$WS_MAXIMIZE) ;создает главное окно
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE_Okno_Glavnoe") ;создает функцию для главного окна
Global $tab_karta = GUICtrlCreateTab(0, 0, @DesktopWidth, @DesktopHeight, BitOR($TCS_FORCEICONLEFT, $TCS_FIXEDWIDTH, $TCS_HOTTRACK, $TCS_RIGHTJUSTIFY, $TCS_MULTILINE))

Global $parametri_karta = GUICtrlCreateTabItem("Карта")
$index_massiv = 2
papmetri_ellementa($index_massiv, 30, 45, 85, 20)
$vrem_element = GUICtrlCreateLabel("Путь к картинке", $xx[$index_massiv], $yy[$index_massiv], $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv])

Global $tab_osobennost_karta = GUICtrlCreateTabItem("Особенности")
For $i=3 To 20
	$index_massiv = $i
	papmetri_ellementa($index_massiv, 100 + $i * 6, 100, 180, 20)
	$noviy_shablon_osobennosti = GUICtrlCreateLabel("НОВЫЙ ШАБЛОН", $xx[$index_massiv], $yy[$index_massiv], $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv])
	GUICtrlSetFont($noviy_shablon_osobennosti, 13, 800, 0, "Segoe Script")
Next
$index_massiv = 55
papmetri_ellementa($index_massiv, 300, 300, 150, 150)
Global $knopka_svernut_razvernut_1 = GUICtrlCreateButton("Нажми", $xx[$index_massiv], $yy[$index_massiv], $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv])
GUICtrlSetOnEvent($knopka_svernut_razvernut_1, "t")


GUISwitch($Okno_Glavnoe) ;переключение на главное окно
GUISetState() ;отображение конопок и окон



While 1
	Sleep(1000) ; Цикл ожидания
WEnd

Func t()
	GUISwitch($Okno_Glavnoe, $tab_osobennost_karta)
	$index_massiv = 48
	papmetri_ellementa($index_massiv, 200, 200, 180, 20)
	$noviy_shablon_osobennosti = GUICtrlCreateLabel("НОВЫЙ ШАБЛОН", $xx[$index_massiv], $yy[$index_massiv], $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv])
	GUICtrlSetFont($noviy_shablon_osobennosti, 13, 800, 0, "Segoe Script")
	GUICtrlCreateTabItem("")
EndFunc   ;==>t

Func CLOSE_Okno_Glavnoe()
	Exit
EndFunc   ;==>CLOSE_Okno_Glavnoe

Func papmetri_ellementa($index, $x_cor, $y_cor, $razmer_w, $razmer_h)
	$xx[$index] = $x_cor
	$yy[$index] = $y_cor
	$Razmer_Shirina[$index] = $razmer_w
	$Razmer_Visota[$index] = $razmer_h
EndFunc   ;==>papmetri_ellementa
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
я не заметил много элементов и мерцания
 
Автор
M

mmsgeorge

Новичок
Сообщения
96
Репутация
0
joiner
в данном варианте не так заметно, попробуй несколько раз по нажимать, заметнее. В оригинальном варианте. там сильно заметно.. а еще возник вопрос, как определять условие при перемещении по вкладкам? к примеру я перешел на вторую вкладку (нажал на нее), должно сработать условие, не знаю какое, нажатие мышкой в клиентской и не клиентской области не работает...
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
не мерцает.
mmsgeorge [?]
В оригинальном варианте. там сильно заметно
о каком варианте речь?
какая версия языка используется?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
у меня тоже не новая - 3.3.12.0, но никаких глюков не вижу.
используй последнюю стабильную версию.
 
Автор
M

mmsgeorge

Новичок
Сообщения
96
Репутация
0
joiner
Выкрутился, я присваивал вкладке - функцию, а не всему элементу ТАБ, теперь работает.. Пришлось создать окно, по ряду причин.
1) У меня мерцает, у тебя нет. Отсюда, не представляю в чем дело.
2) Мне придется перемещать отрисованные блоки, скролингом.. Хотел кстати спросить, можно ли окну как нибудь сделать полоску прокрутки, и в итоге перемещаться в окне, или все придется идти путем, изменения положения блоков?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
mmsgeorge
начни пользоваться последней стабильной версией языка, по поводу других вопросов - это отдельные темы.прокрутка элементов в окне - поищи на форуме. есть тема.
чтобы была помощь реальной, то приводи реальные коды.
 
Автор
M

mmsgeorge

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