XbpTreeView

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Reiner Krall
Rookie
Rookie
Beiträge: 10
Registriert: So, 03. Jun 2007 16:36
Wohnort: Dettenhausen

XbpTreeView

Beitrag von Reiner Krall »

hi,

kann mir jemand etwas Nachhilfe bei TreeView geben? Wie kann ich den markierten Inhalt der zwei xbpTreeView.Objete auswerten/anzeigen.

hier mein Problemcode

Code: Alles auswählen

FUNCTION hlinhalt(aoDlg)

   LOCAL mp1, mp2, hlEvent, oXbp, aPresParam
   LOCAL nCom := 1
   LOCAL oDlg, drawingArea, aEditControls := {}

   TabPos  := {12,80}
   TabSize := {750,450}

   aPP     := { { XBP_PP_COMPOUNDNAME, FONT_HELV_SMALL } }
   aSize   := {780,580}
   aPos  := CenterPos( aSize, AppDesktop():currentSize() )

   hDlg := XbpDialog():new( aoDlg, , aPos, aSize, aPP, .F.)
   hDlg:taskList := .T.
   hDlg:title := "Inhaltsverzeichnis"
   hDlg:create()

   drawingArea := hDlg:drawingArea
   drawingArea:setFontCompoundName( "8.Arial" )

   hlzeig2 := XbpStatic():new( drawingArea, , {564,164}, {84,24} )
   hlzeig2:caption := "-"
   hlzeig2:clipSiblings := .T.
   hlzeig2:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT
   hlzeig2:create()

*Anfang der Suche
   hlvon := XbpTreeView():new( drawingArea, , {24,276}, {204,192}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } )
   hlvon:hasLines   := .T.
   hlvon:hasButtons := .T.
   hlvon:tabStop := .T.
   hlvon:create()

*laden der TreeStruktur
   hlStrukturladen(hlvon, 4)

* Ende der Suche
   hlbis := XbpTreeView():new( drawingArea, , {288,276}, {204,192}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } )
   hlbis:hasLines   := .T.
   hlbis:hasButtons := .T.
   hlbis:tabStop := .T.
*geht nicht
*   hlbis:itemMarked := {| mp1, mp2, obj |  hlzeig2:setCaption(auftree:getdata()) }
   hlbis:create()

*laden der Struktur
   hlStrukturladen(hlbis, 4)


   oXbp := XbpPushButton():new( drawingArea, , {384,24}, {96,24}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Abbruch"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| hDlg:destroy()  }

   oXbp := XbpPushButton():new( drawingArea, , {24,24}, {96,24}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Hilfe"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|mp1,mp2,obj| PostAppEvent( xbeP_HelpRequest,,, obj ) }

   oXbp := XbpPushButton():new( drawingArea, , {504,24}, {108,24}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Auswahl drucken"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {||  hoinhxbp(1, hDlg), hDlg:destroy() }

   oXbp := XbpPushButton():new( drawingArea, , {636,24}, {108,24}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Auswahl anzeigen"
   oXbp:tabStop := .T.
   oXbp:DEFAULT := .T.
   oXbp:create()
   oXbp:activate := {||  hoinhdr(1), hDlg:destroy() }

   hDlg:show()

   hlEvent := xbe_None
   DO WHILE hlEvent <> xbeP_Close
      hlEvent := AppEvent( @mp1, @mp2, @oXbp )
      oXbp:handleEvent( hlEvent, mp1, mp2 )
   ENDDO

RETURN NIL

Viele Grüße
Reiner
Viele Grüße
Reiner
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

ich weiß jetzt nicht genau was du willst, kann es sein, dass du beim selektieren eine Aktion auslösen willst ? Dann wäre das ItemSelected statt ItemMarked ...

:getData() --> oTreeViewItem | NIL // Markierten Eintrag im Baum abfragen
:itemCollapsed
:itemExpanded
:itemMarked
:itemSelected

diese Methoden solltest du ausprobieren, z.B. mit einer msgbox() im Codeblock, um zu sehen bei was genau du eine Aktion auslösen willst.
Gruß
Hubert
Reiner Krall
Rookie
Rookie
Beiträge: 10
Registriert: So, 03. Jun 2007 16:36
Wohnort: Dettenhausen

XbpTreeView

Beitrag von Reiner Krall »

Hi Hubert,

ich möchte die im Tree hinterlegen Werte bei einen Klick auf einen Treeeintrag für die weitere Verarbeitung (erstellen einen ODBC-Abfrage) auslesen. Dabei soll die Markierung im 1. Tree "Anfangswert" (hlvon) erhalten bleiben, wenn im 2. Tree "Endwert" (hlbis) der Treeeintrag markiert wird.

Gruß
Reiner
Viele Grüße
Reiner
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

ich selbst habe mit dem TreeView noch nicht gearbeitet, aber laut Anleitung denke ich dass folgendes funktionieren müsste:

1. Anklicken (ItemMarked()) oder Doppelklicken( ItemSelected()) löst den jeweiligen Event aus. Falls dieser definiert ist, wird dem Codeblock ein

XbpTreeViewItem() Objekt übergeben.

2. Dieses XbpTreeViewItem() hat seinen Text als :Caption (abfrage) und einen möglichen Datalink mit getData() ich vermute du brauchst die Caption.
Gruß
Hubert
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Re: XbpTreeView

Beitrag von Günter Beyes »

Hallo Reiner,
Reiner Krall hat geschrieben: ich möchte die im Tree hinterlegen Werte bei einen Klick auf einen Treeeintrag für die weitere Verarbeitung auslesen. Dabei soll die Markierung im 1. Tree "Anfangswert" (hlvon) erhalten bleiben, wenn im 2. Tree "Endwert" (hlbis) der Treeeintrag markiert wird.
du könntest vor :create() der beiden Treeviews oTreeView:alwaysShowSelection := TRUE setzen.

Viele Grüße,
Günter
Reiner Krall
Rookie
Rookie
Beiträge: 10
Registriert: So, 03. Jun 2007 16:36
Wohnort: Dettenhausen

Beitrag von Reiner Krall »

Hallo Günter,

vielen Dank.

Hallo Hubert,

irgendwie funktioniert die Abfrage nach den markierten Werten nicht. Ich bekomme zwar ein Object zurück, kann dieses aber nicht sinnvoll auswerten. Das Array mp2 hilft mir auch nicht weiter. Wie kann das übergebene XbpTreeViewItem ausgewertet werden?

Die Einträge erzeuge ich mit

Code: Alles auswählen

FUNCTION hlStrukturladen(hlTreeObj, bisEbene)

IF empty(bisEbene)
   bisEbene := 5
ENDIF

   use hlliste alias xbpliste new SHARED
   DO WHILE .NOT. eof()
      fatree         := XbpTreeViewItem():new()
      fatree:caption := str(xbpliste->FANR,3)
      fatree:expandedImage := 212
      fatree:Image := 211
      fatree:markedImage := 213
      fatree:create()

      hltreeObj:rootItem:addItem( fatree )
      IF bisEbene >= 2
         use fwjliste alias xbpfwjliste new SHARED
         DO WHILE .NOT. eof()
            fwjtree := fatree:additem( str(xbpfwjliste->FWJ4,4))
            IF bisEbene >= 3
                .
               use revliste alias xbprevliste new SHARED
               DO WHILE .NOT. eof()
                  revtree := fwjtree:additem( str(xbprevliste->REVIERNR,3))
                  IF bisEbene >= 4
                         .
                         .
                  ENDIF
                  select xbprevliste
                  dbskip()
               ENDDO
               xbprevliste->( dbclosearea() )
            ENDIF
            select xbpfwjliste
            dbskip()
         ENDDO
         xbpfwjliste->( dbclosearea() )
      ENDIF
      select xbpliste
      dbskip()
   ENDDO
   xbpliste->( dbclosearea() )

RETURN fatree
Ich hoffe mit dem Code wirds verständlicher.

Viele Grüße
Reiner
Viele Grüße
Reiner
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

dies ist der Code, der ausgeführt wird um den TreeView zu erstellen.
Beim TreeView musst du noch einen/mehrere CodeBlocks hinterlegen,
damit das Programm weiß wie es auf Aktionen reagieren muss...

oTV:itemSelected := {|oItem, aRect, oXbp| msgbox(Ereignis wurde ausgelöst) }

oXbp enthält dann den TREEVIEW !
oItem enthält das TreeViewItem !
aRect die Koordinaten - keine Ahnung für was.

oItem:caption -> gibt z.B. den Anzeigetext des Elementes zurück.
Gruß
Hubert
Reiner Krall
Rookie
Rookie
Beiträge: 10
Registriert: So, 03. Jun 2007 16:36
Wohnort: Dettenhausen

XbpTreeView

Beitrag von Reiner Krall »

Hallo Hubert,

vielen Dank für deine Mühen. Mit dem :itemSelected wird der Wert nach einem Doppelklick zurückgegeben. Mit :ItemMarked wird der Wert nach einem einfach Klick zurückgegeben. Die Rückgabe bezieht sich auf den entsprechend angeklickten Wert. Nur sollte ich auch die darunter liegenden Werte bis zur Root wissen. Zulässig ist der Klick auf jede Ebene.


Viele Grüße
Reiner
Viele Grüße
Reiner
Reiner Krall
Rookie
Rookie
Beiträge: 10
Registriert: So, 03. Jun 2007 16:36
Wohnort: Dettenhausen

XbpTreeView

Beitrag von Reiner Krall »

Hallo Hubert,

manchmal findet man den Wald vor lauter Bäumen nicht. Es gibt natürlich ein :getParentItem() was man auswerten muss. Somit alles klar und nochmals vielen Dank!


Viele Grüße
Reiner
Viele Grüße
Reiner
Antworten