hier ist ein kleiner Code, der veranschaulicht, wie man ein Fenster
dynamisch anhand von Informationen aus einer XML-Datei erstellen und
auswerten kann. Die hier aufgezeigten Methoden zeigen nur einen kleinen
Teil der Möglichkeiten, die sich dem Programmierer aus dieser Art der
Darstellung ergeben.
Vielleicht kann's der ein oder andere gebrauchen...
Hinweis: Der Code benötigt die MSXML3-Lib aus den PBOSL.
Code: Alles auswählen
Structure s_Object
Type$
Flags.l
pos_X.l
pos_Y.l
pos_W.l
pos_H.l
Title$
Content$
EndStructure
Gadget.s_Object
Window.s_Object
oDoc = MSXML3_CreateDomDocument()
If oDoc
If MSXML3_Load(oDoc, "GuiDefinition.xml")
oNode = MSXML3_SelectSingleNode(oDoc, "window[@name='frmMain']")
If oNode
Window\Title$=MSXML3_GetText(MSXML3_SelectSingleNode(oNode, "title"))
Window\pos_X=Val(MSXML3_SpecialGetNamedAttributeValue(MSXML3_SelectSingleNode(oNode, "position"), "x"))
Window\pos_Y=Val(MSXML3_SpecialGetNamedAttributeValue(MSXML3_SelectSingleNode(oNode, "position"), "y"))
Window\pos_W=Val(MSXML3_SpecialGetNamedAttributeValue(MSXML3_SelectSingleNode(oNode, "position"), "w"))
Window\pos_H=Val(MSXML3_SpecialGetNamedAttributeValue(MSXML3_SelectSingleNode(oNode, "position"), "h"))
Window\Flags=Val(MSXML3_GetText(MSXML3_SelectSingleNode(oNode, "flags")))
myID = OpenWindow(#PB_Any, Window\pos_X, Window\pos_Y, Window\pos_W, Window\pos_H, Window\Flags, Window\Title$)
MSXML3_SpecialSetNamedAttributeValue(oDoc, oNode, "id", Str(myID))
CreateGadgetList(WindowID())
oNodelist = MSXML3_SelectNodes(oNode, "gadgets/gadget")
If oNodelist
For lCounter = 0 To MSXML3_NodeListGetLength(oNodelist)
oNode = MSXML3_NodeListGetItem(oNodelist, lCounter)
If oNode
Gadget\Content$=MSXML3_GetText(MSXML3_SelectSingleNode(oNode, "content"))
Gadget\pos_X=Val(MSXML3_SpecialGetNamedAttributeValue(MSXML3_SelectSingleNode(oNode, "position"), "x"))
Gadget\pos_Y=Val(MSXML3_SpecialGetNamedAttributeValue(MSXML3_SelectSingleNode(oNode, "position"), "y"))
Gadget\pos_W=Val(MSXML3_SpecialGetNamedAttributeValue(MSXML3_SelectSingleNode(oNode, "position"), "w"))
Gadget\pos_H=Val(MSXML3_SpecialGetNamedAttributeValue(MSXML3_SelectSingleNode(oNode, "position"), "h"))
Window\Flags=Val(MSXML3_GetText(MSXML3_SelectSingleNode(oNode, "flags")))
Select MSXML3_SpecialGetNamedAttributeValue(oNode, "type")
Case "string"
myID = StringGadget(#PB_Any, Gadget\pos_X, Gadget\pos_Y, Gadget\pos_W, Gadget\pos_H, Gadget\Content$, Gadget\Flags)
Case "text"
myID = TextGadget (#PB_Any, Gadget\pos_X, Gadget\pos_Y, Gadget\pos_W, Gadget\pos_H, Gadget\Content$, Gadget\Flags)
Case "button"
myID = ButtonGadget(#PB_Any, Gadget\pos_X, Gadget\pos_Y, Gadget\pos_W, Gadget\pos_H, Gadget\Content$, Gadget\Flags)
EndSelect
MSXML3_SpecialSetNamedAttributeValue(oDoc, oNode, "id", Str(myID))
MSXML3_ReleaseObject(oNode)
EndIf
Next lCounter
MSXML3_ReleaseObject(oNodelist)
; Event-Loop
Repeat
WaitWindowEvent = WaitWindowEvent()
EventGadgetID = EventGadgetID()
Select WaitWindowEvent
Case #PB_Event_Gadget
oNode = MSXML3_SelectSingleNode(oDoc, "//gadget[@id='" + Str(EventGadgetID) + "']")
If oNode
If MSXML3_SpecialGetNamedAttributeValue(oNode, "type")="button"
MessageRequester("GuiFromXml", "Button '" + MSXML3_GetText(MSXML3_SelectSingleNode(oNode, "content")) + "' (" + MSXML3_SpecialGetNamedAttributeValue(oNode, "name") + ") clicked")
EndIf
MSXML3_ReleaseObject(oNode)
EndIf
EndSelect
Until WaitWindowEvent=#PB_Event_CloseWindow
EndIf
EndIf
Else
MessageRequester("GuiFromXml", "Couldn't load GuiDefinition.xml")
EndIf
MSXML3_ReleaseObject(oDoc)
Else
MessageRequester("GuiFromXml", "Couldn't create MSXML3-Object")
EndIf
Code: Alles auswählen
<?xml version="1.0" encoding="ISO-8859-1"?>
<window name="frmMain">
<position x="0" y="0" w="220" h="110"/>
<title>GuiFromXml</title>
<flags>13107201</flags> <!-- #PB_Window_ScreenCentered | #PB_Window_SystemMenu -->
<gadgets>
<gadget type="text" name="lblName">
<position x="10" y="10" w="60" h="20"/>
<content>Name:</content>
</gadget>
<gadget type="string" name="txtName">
<position x="70" y="10" w="140" h="20"/>
<content>Peter</content>
</gadget>
<gadget type="text" name="lblSurname">
<position x="10" y="40" w="60" h="20"/>
<content>Surname:</content>
</gadget>
<gadget type="string" name="txtSurname">
<position x="70" y="40" w="140" h="20"/>
<content>Parker</content>
</gadget>
<gadget type="button" name="cmdOK">
<position x="80" y="80" w="60" h="20"/>
<content>OK</content>
</gadget>
<gadget type="button" name="cmdCancel">
<position x="150" y="80" w="60" h="20"/>
<content>Cancel</content>
</gadget>
</gadgets>
</window>