Aktuelle Zeit: 26.09.2017 13:03

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Elementare XML-Frage
BeitragVerfasst: 06.09.2017 10:47 
Offline
Benutzeravatar

Registriert: 19.05.2012 17:09
Hallo,
ich beschäftige mich das erste Mal mit XML. Hier möchte ich eine Tabelle ausgeben und bearbeiten, deren Spalten unterschiedlich Gadgettypen sein können. Dazu habe ich ein Hilfebeispiel etwas erweitert.
Code:
;PB 5.60


 #XmlEncoding = #PB_UTF8
  #Dialog = 0
  #Xml = 0
 
 
 
  Procedure make_Grid(rows.i,cols.i)
    Protected colnr.i,rownr.i
    XML$ = "<window id='#PB_Any' name='test' text='DataGrid' minwidth='500' minheight='200' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>"+
           "<gridbox columns='"+Str(cols)+"'"+">"

    For rownr=1 To rows
      For colnr=1 To cols
        Select colnr
        Case 3
          XML$=XML$+"<button text='"+Str(rownr)+"--"+Str(colnr)+"'"+"/>"
        Case 5
          XML$=XML$+"<date text='"+Str(rownr)+"--"+Str(colnr)+"'"+"/>"
        Default
          XML$=XML$+"<string text='"+Str(rownr)+"--"+Str(colnr)+"'"+"/>" 
        EndSelect
       Next
    Next
    XML$=XML$+ "</gridbox>"
    XML$=XML$+"</window>"

    If CatchXML(#Xml, @XML$, StringByteLength(XML$), 0, #XmlEncoding) 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
  EndProcedure
 
 
  make_Grid(8,11); 8 Zeilen mit je 11 Spalten


Wie kann ich nun auf z.B. auf das Element in Zeile 3 und Spalte 7 zugreifen, um dessen Wert auszulesen bzw. zu ändern?
Wie baut man dies in die Eventschleife ein?

_________________
Windows10 (+VISTA) / PB5.41 / BasicForAndroid / Arduino-Due


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Elementare XML-Frage
BeitragVerfasst: 06.09.2017 12:17 
Offline
Moderator
Benutzeravatar

Registriert: 15.06.2008 18:22
Wohnort: vorhanden
Du kannst jedem Gadget einen Namen vergeben (name='R01C01') und dann per
DialogGadget(#Dialog, "R01C01") dessen Gadget-ID ermitteln.

_________________
Win10 x64 | PB 5.60 (x86 und x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Elementare XML-Frage
BeitragVerfasst: 06.09.2017 15:18 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
zusätzlich zu Andesdafs Tipp kannst Du alle Events aller Gadgets in eine zentrale Procedure laufen lassen:

Code:
;PB 5.60

EnableExplicit

#XmlEncoding = #PB_UTF8
#Dialog = 0
#Xml = 0

Runtime Procedure GadgetEvent()
  Protected colnr.i,rownr.i
  For rownr=1 To 8
    For colnr=1 To 11
      If EventGadget() = DialogGadget(#Dialog, Str(rownr) + "/" + Str(colnr))
        Debug EventType()
        Debug Str(rownr)+"/"+Str(colnr)
        Debug "----"
        Break 2
      EndIf
    Next
  Next
EndProcedure

Procedure make_Grid(rows.i,cols.i)
 
  Protected colnr.i,rownr.i
 
  Protected XML$
  Protected Event
 
  XML$ = "<window id='#PB_Any' name='test' text='DataGrid' minwidth='500' minheight='200' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>"+
         "<gridbox columns='"+Str(cols)+"'"+">"
 
  For rownr=1 To rows
    For colnr=1 To cols
     
      Protected Ident.s = Str(rownr) + "/" + Str(colnr)
     
      Select colnr
        Case 3
          XML$+"<button name='" + Ident + "' text='" + Ident + "' onEvent='GadgetEvent()' />"
        Case 5
          XML$+"<date name='" + Ident + "' text='" + Ident + "' onEvent='GadgetEvent()' />"
        Default
          XML$+"<string name='" + Ident + "' text='" + Ident + "' onEvent='GadgetEvent()' />"
      EndSelect
    Next
  Next
  XML$=XML$+ "</gridbox>"
  XML$=XML$+"</window>"
 
  If CatchXML(#Xml, @XML$, StringByteLength(XML$), 0, #XmlEncoding) And XMLStatus(#Xml) = #PB_XML_Success
    If CreateDialog(#Dialog) And OpenXMLDialog(#Dialog, #Xml, "test")
     
      SetGadgetText(DialogGadget(#Dialog, "1/1"), "Tic")
      SetGadgetText(DialogGadget(#Dialog, "2/2"), "Tac")
      SetGadgetText(DialogGadget(#Dialog, "3/3"), "Toe")
     
      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
EndProcedure

make_Grid(8,11); 8 Zeilen mit je 11 Spalten


Grüße ... Peter

_________________
einfach ist schwierig


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Elementare XML-Frage
BeitragVerfasst: 07.09.2017 09:23 
Offline
Benutzeravatar

Registriert: 19.05.2012 17:09
Vielen Dank @Andesdaf und @Kiffi
Ich will das durch Einfügen diverser Gadgettypen noch etwas allgemeiner gestalten. Dabei hakt es bei mir an der ComboBox, bei der ich beispielhaft zwei Auswahlen A und B vorgeben will.
Code:
 For rownr=1 To rows
    For colnr=1 To cols
     
      Protected Ident.s = Str(rownr) + "/" + Str(colnr)
     
      Select colnr
        Case 3  ;button Gadget
          XML$+"<button name='" + Ident + "' text='" + Ident + "' onEvent='GadgetEvent()' />"
        Case 5  ;calendar Gadget
          XML$+"<date name='" + Ident + "' text='" + Ident + "' onEvent='GadgetEvent()' />"
        Case 8 ;Auswahlfeld
          XML$+"<combobox name='" + Ident + "' text='" + Ident + "' <select size='2'> <option>A</option> <option>B</option></select> onEvent='GadgetEvent()' />"
        Default ;string Gadget
          XML$+"<string name='" + Ident + "' text='" + Ident + "' onEvent='GadgetEvent()' />"
      EndSelect
    Next
  Next
  XML$=XML$+ "</gridbox>"
  XML$=XML$+"</window>"


Was ist bei case 8 falsch? Dort wird ein XML-Fehler 'not well-formed' reklamiert.
Ist combobox für HTML nicht verständlich?
Oder muss ich nachträglich allen Gadgets in Spalte 8 die Items A und B zuweisen?

_________________
Windows10 (+VISTA) / PB5.41 / BasicForAndroid / Arduino-Due


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Elementare XML-Frage
BeitragVerfasst: 07.09.2017 09:42 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
ProgOldie hat geschrieben:
Was ist bei case 8 falsch? Dort wird ein XML-Fehler 'not well-formed' reklamiert.

das ist in der Tat so, denn...
Code:
<combobox name='...' <select size='2'> <option>A</option> <option>B</option></select> onEvent='GadgetEvent()' />
... ist kein valider XML-Node

Wenn überhaupt, dann müsste es so aussehen:
Code:
<combobox name='...' onEvent='GadgetEvent()' /><option>A</option> <option>B</option></combobox>


ProgOldie hat geschrieben:
Oder muss ich nachträglich allen Gadgets in Spalte 8 die Items A und B zuweisen?

ich befürchte ja.

Anscheinend gibt es keine Möglichkeit, Comboboxen (oder Listviews, ListIcons...) bereits im XML Items hinzuzufügen. Ich lasse mich allerdings gerne eines Besseren belehren.

Grüße ... Peter

_________________
einfach ist schwierig


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Elementare XML-Frage
BeitragVerfasst: 07.09.2017 09:45 
Offline

Registriert: 29.08.2004 13:18
Code:
         XML$+"<combobox name='" + Ident + "' text='" + Ident + "' <select size='2'> <option>A</option> <option>B</option></select> onEvent='GadgetEvent()' />"
     


Du verschachtelst hier mehrere Tags ineinander ("<combobox <select> >"), das geht in XML nicht. wenn muss du das mit start/endtag versehen (<combobo><select></combobox>). Auch bin ich mir nicht sicher, die Syntax generell falsch ist.

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Elementare XML-Frage
BeitragVerfasst: 14.09.2017 11:44 
Offline
Benutzeravatar

Registriert: 19.05.2012 17:09
Das mit XML läuft sehr zufriedenstellend, vor allem schnell genug. Zumindest eine Frage habe ich noch:
Code:
XML$ = "<window id='#PB_Any' name='test' text='DataGrid' minwidth='500' minheight='200' flags='#PB_Window_ScreenCentered |#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget'>"+
         "<gridbox columns='"+Str(cols+1)+"'"+">"


Auf die erstellten Gadgets kann ich nachträglich über die CellID gut zugreifen. Nun möchte ich dem Fenster mit CreateMenu() noch ein Menü hinzufügen, weis aber nicht, wie ich das machen soll. Das Ersetzen von #PB_Any durch eine Nummer funktioniert leider nicht.

_________________
Windows10 (+VISTA) / PB5.41 / BasicForAndroid / Arduino-Due


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Elementare XML-Frage
BeitragVerfasst: 14.09.2017 12:03 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
Code:
If CreateDialog(#Dialog) And OpenXMLDialog(#Dialog, #Xml, "test")
  If CreateMenu(0, WindowID(DialogWindow(#Dialog)))
    [...]


allerdings musst Du danach evtl. die Fensterhöhe anpassen. Ein RefreshDialog scheint da keine Abhilfe zu bringen.

Grüße ... Peter

_________________
einfach ist schwierig


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Elementare XML-Frage
BeitragVerfasst: 14.09.2017 16:53 
Offline
Benutzeravatar

Registriert: 19.05.2012 17:09
@Kiffi
Danke, klappt! (wie üblich bei dir)

_________________
Windows10 (+VISTA) / PB5.41 / BasicForAndroid / Arduino-Due


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye