Re: Gadget für CanvasGadget
Verfasst: 29.11.2011 21:45
wenn ich das richtig verstanden habe, dann ist ein CanvasGadget ehercOoki3druqs hat geschrieben:hm.. also zum editieren möchte ich nicht auf ein string gadget verzichten.. wie könnte ich das realisieren so dass es auch mitscrollt und sich innerhalb des canvas gadgets befindet?
ein aufgebohrtes ImagesGadget. Demzufolge müsstest Du die Gadgets,
die Du darauf platzieren willst, selber malen und auf die CanvasGadgets-
Events dementsprechend reagieren ('Combobox' aufklappen, Textcursor
in Deinem 'StringGadget' setzen, Buchstaben beim Eintippen selber malen,
etc.).
Vielleicht wäre für Deine Zwecke eher ein ScrollAreaGadget geeignet?
Ich habe mal auf die schnelle was zusammengehackt:
Code: Alles auswählen
EnableExplicit
Define.s sXML
Define oXML
sXML = "<tbox>"
sXML + "<gadget type='StringGadget' caption='Vorname:' value='' />"
sXML + "<gadget type='StringGadget' caption='Nachname:' value='' />"
sXML + "<gadget type='StringGadget' caption='Strasse:' value='' />"
sXML + "<gadget type='StringGadget' caption='Platz:' value='' />"
sXML + "<gadget type='StringGadget' caption='Ort:' value='' />"
sXML + "<gadget type='ComboBoxGadget' caption='Land:' value='Deutschland|Oesterreich|Schweiz' />"
sXML + "<gadget type='StringGadget' caption='Telefon:' value='' />"
sXML + "</tbox>"
oXML = CatchXML(#PB_Any, @sXML, StringByteLength(sXML))
; #############
Structure sGadget
Type.s
Caption.s
Value.s
EndStructure
Procedure ParseXml(oXml)
Protected GadgetNode
Protected GadgetNodeCounter
Protected GadgetID
Protected Gadget.sGadget
Protected newY, Counter
GadgetNodeCounter = 1
newY = 5
Repeat
GadgetNode = XMLNodeFromPath(oXML, "tbox/gadget[" + Str(GadgetNodeCounter) + "]")
If GadgetNode = 0
Break
EndIf
ExamineXMLAttributes(GadgetNode)
If ExamineXMLAttributes(GadgetNode)
While NextXMLAttribute(GadgetNode)
Select XMLAttributeName(GadgetNode)
Case "type" : Gadget\Type = XMLAttributeValue(GadgetNode)
Case "caption" : Gadget\Caption = XMLAttributeValue(GadgetNode)
Case "value" : Gadget\Value = XMLAttributeValue(GadgetNode)
EndSelect
Wend
EndIf
TextGadget(#PB_Any, 5, newY, 100, 20, Gadget\Caption, #SS_CENTERIMAGE)
Select Gadget\Type
Case "StringGadget"
GadgetID = StringGadget(#PB_Any, 120, newY, 150, 20, Gadget\Value)
Case "ComboBoxGadget"
GadgetID = ComboBoxGadget(#PB_Any, 120, newY, 150, -1)
For Counter = 1 To CountString(Gadget\Value, "|") + 1
AddGadgetItem(GadgetID, -1, StringField(Gadget\Value, Counter, "|"))
Next
EndSelect
SetXMLAttribute(GadgetNode, "GadgetID", Str(GadgetID))
newY + 25
GadgetNodeCounter + 1
ForEver
EndProcedure
Procedure ProcessGadget(GadgetID, oXML)
Protected GadgetNode
Protected GadgetNodeCounter
Repeat
GadgetNode = XMLNodeFromPath(oXML, "tbox/gadget[" + Str(GadgetNodeCounter) + "]")
If GadgetNode = 0
Break
EndIf
ExamineXMLAttributes(GadgetNode)
If ExamineXMLAttributes(GadgetNode)
While NextXMLAttribute(GadgetNode)
If XMLAttributeName(GadgetNode) = "GadgetID" And XMLAttributeValue(GadgetNode) = Str(GadgetID)
SetXMLAttribute(GadgetNode, "value", GetGadgetText(GadgetID))
Break 2
EndIf
Wend
EndIf
GadgetNodeCounter + 1
ForEver
EndProcedure
Define myWindow
Define myScrollAreaGadget
Define myButton
Define WWE, Quit
myWindow = OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 300, 400, "tbox-Example")
myScrollAreaGadget = ScrollAreaGadget(#PB_Any, 5, 5, WindowWidth(myWindow) - 10, WindowHeight(myWindow) - 50, WindowWidth(myWindow) - 20, WindowHeight(myWindow) - 60)
ParseXml(RootXMLNode(oXML))
CloseGadgetList()
myButton = ButtonGadget(#PB_Any, 5, WindowHeight(myWindow) - 35, 100, 25, "Zeige ResultXml")
Repeat
WWE = WaitWindowEvent()
Select WWE
Case #PB_Event_Gadget
If EventGadget()=myButton
FormatXML(oXML, #PB_XML_ReFormat|#PB_XML_ReIndent)
sXML = Space(ExportXMLSize(oXML))
ExportXML(oXML, @sXML, Len(sXML))
MessageRequester("", PeekS(@sXML,-1,#PB_UTF8))
Else
ProcessGadget(EventGadget(), RootXMLNode(oXML))
EndIf
Case #PB_Event_CloseWindow
Quit = #True
EndSelect
Until Quit = #True
// Edit: CatchXml() mit StringByteLength() versehen. Danke an Thomas!
// Edit2: Fehlerhafte Ausgabe des ResultXml bei eingeschalteter Unicode-Option behoben. Danke an Danilo!