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!
