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
Все