PureBasic
OpenXMLDialog()
Синтаксис
Result = OpenXMLDialog(#Dialog , #XML , Name$ [, x , y [, Width , Height [, ParentID]]])
Описание
Открывает указанный Диалог и выводит его на экран. Для доступа к Гаджетам диалога используйте функцию DialogGadget(). Чтобы получить Номер окна этого диалога, используйте функцию DialogWindow().
Параметры
#Dialog Номер, для идентификации Диалога. Он должен быть предварительно создан с помощью функции CreateDialog(). #XML Номер для идентификации XML, используемого для построения Диалога. Он должен быть предварительно создан с помощью функций LoadXML(), CreateXML(), CatchXML() или ParseXML(). Это означает, что можно создавать Диалоги "на лету" с помощью CreateXML(), CatchXML() или ParseXML(). Ниже приведены поддерживаемые XML-атрибуты. При включении сценария XML в код, может быть проще использовать одинарную кавычку для атрибута XML (это - абсолютно легальный синтаксис XML). Name$ Имя открываемого Диалога. XML-файл может содержать несколько Диалогов. x, y (дополн.) x, y - координаты (в пикселях) левого верхнего угла для вывода Диалога. Width, Height (дополн.) Размер (в пикселях) выводимого Диалога. Если указанный размер меньше требуемого размера, определяемого в XML (после расчета и компоновки макета), то будет использоваться требуемый размер. Если этот параметр опущен, для Диалога будет использован минимальный требуемый размер. ParentID (дополн.) Идентификатор родительского окна. Корректный идентификатор 'ParentID' можно получить с помощью функции WindowID().
Возвращаемое значение
Возвращает не нулевое значение, если Диалог был успешно открыт, в противном случае возвращает ноль. Чтобы получить дополнительную информацию об ошибке, используйте функцию DialogError().
Комментарии
----------------------------------------------------------------
Формат XML для Диалога
----------------------------------------------------------------
I. Общие атрибуты
--------------------
width - Положительное целое число или 0 (по умолчанию = "0") (устанавливает "минимальный размер" элемента управления)
height - Высота, то же самое что и width (ширина), с теми же значениями.
id - Идентификационный Номер Гаджета или окна (по умолчанию #PB_Any, если не указано). Может быть константа runtime.
name - Строка, идентифицирующая объект (для DialogGadget() в основном, без учета регистра) (по умолчанию ="")
text - Текстовая строка для объекта (по умолчанию ="")
flags - Флаги Гаджета/окна в виде "#PB_Window_Borderless | #PB_Window_ScreenCentered" (по умолчанию ="")
min - Минимальное значение
max - Максимальное значение
value - Текущее значение
invisible - Если установлено в "yes", созданный объект будет невидим (по умолчанию = "no")
disabled - Если установлено в "yes", созданный объект будет отключен (только для Гаджетов) (по умолчанию ="no")
colspan - Только в пределах элемента <gridbox>, позволяет элементу занимать несколько строк/столбцов
rowspan (по умолчанию ="1")
Все эти атрибуты необязательны (опционально).
II. Корневой элемент
----------------
<window> Используется для определения одного окна в данном файле XML
</window>
или
<dialogs> Используется для определения нескольких окон в данном XML-файле
<window name="FirstWindow">
</window>
<window name="SecondWindow">
</window>
...
</dialogs>
III. Элемент Окно
-------------------
<window>
</window>
Принятые ключи в XML:
Все общие атрибуты и так же следующие:
minwidth = 'auto' или численное значение
maxwidth = 'auto' или численное значение
minheight = 'auto' или численное значение
maxheight = 'auto' или численное значение
Это позволяет установить границы окна. Если установлено значение 'auto',
размер вычисляется в зависимости от требования к размеру потомков.
- Создает окно.
- Может иметь все общие атрибуты.
- Является одно-элементным контейнером.
- Если присутствует более одного элемента <window> атрибут 'name' используется для их идентификации.
- Все элементы gui могут быть размещены только здесь
IV. Элементы компоновки
-------------------
*****************************************************************
hbox и vbox
*****************************************************************
Располагает элементы горизонтально или вертикально. Может содержать
любое количество потомков.
Принятые ключи в XML:
Все общие атрибуты и так же следующие:
spacing = Добавляемые пробелы между упакованными дочерними элементами (по умолчанию = 5)
expand = yes - Увеличивать элементы, до заполнения пространства (по умолчанию).
no - Не разворачивать, до заполнения пространства.
equal - Принудительно уровнять размеры всех элементов.
item:<number> - Развернуть только один элемент при наличии свободного места.
align = top/left - Применяется только когда expand="no", по умолчанию используется top/left.
center
bottom/right
*****************************************************************
gridbox
*****************************************************************
Выравнивает элементы в таблице. Может содержать
любое количество потомков.
Принятые ключи в XML:
Все общие атрибуты и так же следующие:
columns = Количество столбцов (по умолчанию = 2)
colspacing = Добавляемые пробелы между столбцами/строками (по умолчанию = 5).
rowspacing
colexpand = yes - Увеличивать элементы, до заполнения пространства.
rowexpand no - Не разворачивать, до заполнения пространства.
equal - Принудительно уровнять размеры всех элементов.
item:<number> - Развернуть только один элемент при наличии свободного места.
Для colexpand, по умолчанию = yes, Для rowexpand, по умолчанию = no
Любой дочерний элемент в gridbox может иметь следующие ключи:
colspan = Количество столбцов в разметке (по умолчанию = 1)
rowspan = Количество строк в разметке
*****************************************************************
multibox
*****************************************************************
Box с несколькими дочерними элементами в одном месте. Используется для помещения нескольких
контейнеров внутрь и отображения только одного из них за раз.
Может содержать любое количество потомков.
Принятые ключи в XML:
Все общие атрибуты.
*****************************************************************
singlebox
*****************************************************************
Box с одним дочерним элементом. Используется только для применения дополнительных свойств
margin/alignment для потомка. Его называют Box (так называются все виртуальные контейнеры).
Принятые ключи в XML:
Все общие атрибуты и так же следующие:
margin = Внешний отступ (поля) вокруг содержимого (по умолчанию = 10)
Может быть одно число (= все поля) или комбинацией из
top:<num>,left:<num>,right:<num>,bottom:<num>,vertical:<num>,horizontal:<num>
Пример: "vertical:5,left:10,right:0"
expand = yes - Разворачивать потомка до заполнения пространства (по умолчанию)
no - Не расширять
vertical - Расширять только по вертикали
horizontal - Расширять только по горизонтали
expandwidth = Максимальный размер для расширения потомка. Если запрашиваемый размер больше, чем
expandheight этот параметр, тогда используется размер из запроса (т.е. контент не становится меньше).
По умолчанию = 0
align = Комбинация из top,left,bottom,right и center. (Действует только при expand <> yes)
Пример: "top, center" or "top, left" (по умолчанию)
V. Элементы Гаджета
------------------
Поддерживаются все стандартные атрибуты XML. Чтобы привязать процедуру события непосредственно в xml,
для Гаджетов доступны следующие атрибуты:
onevent = EventProcedure() - Привязка общего события для всех типов событий
onchange = EventProcedure() - Привязана к #PB_EventType_Change (только для Гаджета поддерживающего этот тип события)
onfocus = EventProcedure() - Привязана к #PB_EventType_Focus (только для Гаджета поддерживающего этот тип события)
onlostfocus = EventProcedure() - Привязана к #PB_EventType_LostFocus (только для Гаджета поддерживающего этот тип события)
ondragstart = EventProcedure() - Привязана к #PB_EventType_DragStart (только для Гаджета поддерживающего этот тип события)
onrightclick = EventProcedure() - Привязана к #PB_EventType_RightClick (только для Гаджета поддерживающего этот тип события)
onleftclick = EventProcedure() - Привязана к #PB_EventType_LeftClick (только для Гаджета поддерживающего этот тип события)
onrightdoubleclick = EventProcedure() - Привязана к #PB_EventType_RightDoubleClick (только для Гаджета поддерживающего этот тип события)
onleftdoubleclick = EventProcedure() - Привязана к #PB_EventType_LeftDoubleClick (только для Гаджета поддерживающего этот тип события)
"EventProcedure()" должна быть объявлена как 'Runtime' в основном коде и должна соблюдать формат процедуры BindEvent().
С указанной процедурой скрытно вызывается BindGadgetEvent().
Поддерживаемые Гаджеты:
<button>
<buttonimage>
<calendar>
<canvas>
<checkbox>
<combobox>
<container> - Одно-элементный контейнер
<date>
<editor>
<explorercombo>
<explorerlist>
<explorertree>
<frame> - Одно-элементный контейнер
<hyperlink>
<ipaddress>
<image>
<listicon>
<listview>
<option group> - Используйте тот же Номер 'group', чтобы создать связанный OptionGadget().
<panel> - Может содержать только <tab> элементы
<progressbar min max value>
<scrollarea scrolling="vertical,horizontal или both (по умолчанию)" innerheight="значение или auto (по умолчанию)
" innerwidth="значение или auto (по умолчанию)" step>
- Контейнер с одним элементом, значение прокрутки определяет поведение роста
<scrollbar min max page value> - page = длина страницы
<spin min max value>
<splitter firstmin="value or auto" secondmin>
- Должен содержать 2 под-элемента, поэтому его контейнер в основном 2-х элементный,
минимальный размер определяется содержащимися Гаджетами. Если указано "auto",
минимальное значение будет минимальным размером потомка.
<string>
<text>
<trackbar min max value>
<tree>
<web>
<scintilla> - Обратный вызов остается пустым
Элементы, связанные с Гаджетами:
<tab> - Одно-элементный контейнер, для вкладок панели (поддерживается атрибут 'text').
Специальные элементы:
<empty> - Пустой элемент, полезный, когда необходимо иметь пространство между элементами, например, чтобы выровнять их по границам.
Пример: Простой Диалог с изменением размера
#Dialog = 0
#Xml = 0
XML$ = "<window id='#PB_Any' name='test' text='test' minwidth='auto' minheight='auto' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>" +
" <panel>" +
" <tab text='First tab'>" +
" <vbox expand='item:2'>" +
" <hbox>" +
" <button text='button 1'/>" +
" <checkbox text='checkbox 1'/>" +
" <button text='button 2'/>" +
" </hbox>" +
" <editor text='content' height='150'/>" +
" </vbox>" +
" </tab>" +
" <tab text='Second tab'>" +
" </tab>" +
" </panel>" +
"</window>"
If ParseXML(#Xml, XML$) And XMLStatus(#Xml) = #PB_XML_Success
If CreateDialog(#Dialog) And OpenXMLDialog(#Dialog, #Xml, "test")
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Else
Debug "Dialog error: " + DialogError(#Dialog)
EndIf
Else
Debug "XML error: " + XMLError(#Xml) + " (Line: " + XMLErrorLine(#Xml) + ")"
EndIf
Пример: Применение Multibox
#Dialog = 0
#Xml = 0
Runtime Enumeration Gadget
#ListView
#GeneralContainer
#EditorContainer
#BackupContainer
EndEnumeration
Procedure ShowPanels()
HideGadget(#GeneralContainer, #True)
HideGadget(#EditorContainer, #True)
HideGadget(#BackupContainer, #True)
Select GetGadgetState(#ListView)
Case 0
HideGadget(#GeneralContainer, #False)
Case 1
HideGadget(#EditorContainer, #False)
Case 2
HideGadget(#BackupContainer, #False)
EndSelect
EndProcedure
Runtime Procedure OnListViewEvent()
ShowPanels()
EndProcedure
XML$ = "<window id='#PB_Any' name='test' text='Preferences' minwidth='auto' minheight='auto' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>" +
" <hbox expand='item:2'>" +
" <listview id='#ListView' width='100' onEvent='OnListViewEvent()'/>" +
" <multibox>" +
"" +
" <container id='#GeneralContainer' invisible='yes'>" +
" <frame text='General'>" +
" <vbox expand='no'>" +
" <checkbox text='Enable red light'/>" +
" <checkbox text='Enable green light'/>" +
" </vbox>" +
" </frame>" +
" </container>" +
"" +
" <container id='#EditorContainer' invisible='yes'>" +
" <frame text='Editor'>" +
" <vbox expand='no'>" +
" <checkbox text='Set read only mode'/>" +
" <checkbox text='Duplicate line automatically'/>" +
" <checkbox text='Enable monospace font'/>" +
" </vbox>" +
" </frame>" +
" </container>" +
"" +
" <container id='#BackupContainer' invisible='yes'>" +
" <frame text='Backup'>" +
" <vbox expand='no'>" +
" <checkbox text='Activate backup'/>" +
" </vbox>" +
" </frame>" +
" </container>" +
"" +
" </multibox>" +
" </hbox>" +
"</window>"
If ParseXML(#Xml, XML$) And XMLStatus(#Xml) = #PB_XML_Success
If CreateDialog(#Dialog) And OpenXMLDialog(#Dialog, #Xml, "test")
AddGadgetItem(#ListView, -1, "General")
AddGadgetItem(#ListView, -1, "Editor")
AddGadgetItem(#ListView, -1, "Backup")
SetGadgetState(#ListView, 0)
ShowPanels()
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Else
Debug "Dialog error: " + DialogError(#Dialog)
EndIf
Else
Debug "XML error: " + XMLError(#Xml) + " (Line: " + XMLErrorLine(#Xml) + ")"
EndIf
Пример: Применение Gridbox
#Dialog = 0
#Xml = 0
XML$ = "<window id='#PB_Any' name='test' text='Gridbox' minwidth='auto' minheight='auto' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>" +
" <gridbox columns='6'>" +
" <button text='Button 1' />" +
" <button text='Button 2' />" +
" <button text='Button 3' colspan='3' />" +
" <button text='Button 4' />" +
" <button text='Button 5' rowspan='2' />" +
" <button text='Button 6' />" +
" <button text='Button 7' />" +
" <button text='Button 8' />" +
" <button text='Button 9' />" +
" <button text='Button 10' />" +
" <button text='Button 11' />" +
" <button text='Button 12' />" +
" </gridbox>" +
" </window>"
If ParseXML(#Xml, XML$) And XMLStatus(#Xml) = #PB_XML_Success
If CreateDialog(#Dialog) And OpenXMLDialog(#Dialog, #Xml, "test")
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Else
Debug "Dialog error: " + DialogError(#Dialog)
EndIf
Else
Debug "XML error: " + XMLError(#Xml) + " (Line: " + XMLErrorLine(#Xml) + ")"
EndIf
См. также
CreateDialog()
Поддерживаемые OS
Все