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

Все

<- IsDialog() - Оглавление Dialog - RefreshDialog()->