Seite 1 von 1

TreeGadget einzug verändern

Verfasst: 20.06.2010 13:28
von X360 Andy
Hallo liebe gemeinde :mrgreen:

Ich habe ein TreeGadget und möchte den Einzug der Items nach Links verändern.

Folgendes Bild:
Bild

Ich möchte das die Einträge links anliegen und nicht in der Mitte stehen.

Dass das ganze nicht dafür gedacht ist, ist mir klar, aber vielleicht gibt es dafür ja eine Lösung ?

Gruß Andreas

Re: TreeGadget einzug verändern

Verfasst: 20.06.2010 14:24
von Mok
Sollte wie folgt gehen:

Code: Alles auswählen

;Annahme: ID vom TreeGadget = #TREE1
SendMessage_(GadgetID(#TREE1),#TVM_SETINDENT,0,0)
Wobei der vorletzte Parameter ausschlaggebend ist => verändern, wenn's nicht passt.

Re: TreeGadget einzug verändern

Verfasst: 20.06.2010 14:27
von Fluid Byte

Code: Alles auswählen

OpenWindow(0,0,0,355,180,"TreeGadget",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TreeGadget(0,10,10,160,160,#PB_Tree_CheckBoxes | #PB_Tree_NoButtons)
AddGadgetItem(0,-1,"TreeView Item #1",0,0)
AddGadgetItem(0,-1,"TreeView Item #2",0,0) 
AddGadgetItem(0,-1,"TreeView Item# 3",0,0)

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend

Re: TreeGadget einzug verändern

Verfasst: 20.06.2010 15:07
von X360 Andy
#PB_Tree_NoButtons
:bounce:

Danke .... ( auch für die API ... )

Re: TreeGadget einzug verändern

Verfasst: 20.06.2010 18:43
von Vera
Kleine Ergänzung: #PB_Tree_NoButtons funktioniert auf Linux gar nicht, auch nicht in Verbindung mit #PB_Tree_NoLines (was dort klappt).

Ich hatte das Beispiel aus der Hilfe genommen und dabei festgestellt, dass #PB_Tree_NoButtons auch gleich alle SubItems unterdrückt. Um diese trotzdem anzeigen zu lassen, bin ich auf die Idee gekommen, die Nodes mittels #PB_Tree_Expanded zu aktivieren, was aber nur klappt, wenn man die absolute Position eines Knotenkopfes zuweisen kann.
Hier das kleine 'statische' Beispiel

Code: Alles auswählen

  If OpenWindow(0, 0, 0, 355, 180, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    TreeGadget(0, 10, 10, 160, 160, #PB_Tree_NoButtons)  ; | #PB_Tree_NoLines
    TreeGadget(1, 180, 10, 160, 160, #PB_Tree_CheckBoxes|#PB_Tree_NoLines) 
    For ID = 0 To 1
      n = 1
      For a = 0 To 10 
        AddGadgetItem (ID, -1, "Normal Item "+Str(a), 0, 0) ; 
        AddGadgetItem (ID, -1, "Node "+Str(a), 0, 0)   ;
        AddGadgetItem(ID, -1, "Sub-Item 1", 0, 1)     
        AddGadgetItem(ID, -1, "Sub-Item 2", 0, 1)
        AddGadgetItem(ID, -1, "Sub-Item 3", 0, 1)
        AddGadgetItem(ID, -1, "Sub-Item 4", 0, 1)
        AddGadgetItem (ID, -1, "File "+Str(a), 0, 0)

        SetGadgetItemState(0, n, #PB_Tree_Expanded) ;| #PB_Tree_Checked
        n = n+7
      Next
    Next
;    SendMessage_(GadgetID(0),#TVM_SETINDENT,40,0)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Apropos: der Einzug wird auch durch den eingeschalteten XP-Style etwas vergrößert.

Und Danke ebenso für den API-Tip, damit kann man die SubItems wiederum wunderbar absetzen, während die Wurzelknoten schön linksbündig bleiben :wink:

Gruß ~ Vera

edit: das verlorene ENDE nachgereicht

Re: TreeGadget einzug verändern

Verfasst: 22.06.2010 13:43
von Shardik
Vera hat geschrieben:Kleine Ergänzung: #PB_Tree_NoButtons funktioniert auf Linux gar nicht, auch nicht in Verbindung mit #PB_Tree_NoLines (was dort klappt).
Das stimmt zwar leider immer noch (getestet mit PB 4.41 und 4.50 in andLinux/Ubuntu 9.04 + KDE 4.2.2
+ GTK 2.16.1), es geht aber mit der entsprechenden API-Funktion trotzdem, wie ich im englischen Forum
bereits gezeigt habe:
http://www.purebasic.fr/english/viewtop ... 27&start=6

Die dafür benötigte API-Funktion gtk_tree_view_set_show_expanders() wurde bereits mit GTK 2.12
eingeführt.

Das Ändern des Einzugs in Linux sollte mit der API-Funktion gtk_tree_view_set_level_indentation()
übrigens auch problemlos möglich sein:
http://library.gnome.org/devel/gtk/stab ... ndentation

Re: TreeGadget einzug verändern

Verfasst: 22.06.2010 22:56
von Vera
Hi Shardik,

riesen Dank für Deine Links und die Beispiele :D

Damit hat's zum ersten mal mit der GTK ohne Fehlermeldung geklappt und ich hab' gut was verstanden. :)
Zudem sind Deine Beispiele auch ungemein einladend, damit rum zu experimentieren und besonders, sich die Wirkungsweise der verschachtelten Eventabfragen deutlich zu machen. (Wenn ich, statt Schabernack, ein sinnvolleres Beispiel zusammengestellt habe, geb' ich's weiter.)

Natürlich ließ sich dann auch das obrige HilfeBeispiel entsprechend für Linux abwandeln:

Code: Alles auswählen

ImportC ""
  gtk_tree_view_get_show_expanders(*TreeView.GtkTreeView)
  gtk_tree_view_set_show_expanders(*TreeView.GtkTreeView, Enable)
  gtk_tree_view_set_level_indentation (*TreeView.GtkTreeView, Indentation) 
EndImport

   If OpenWindow(0, 0, 0, 355, 180, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    TreeGadget(0, 10, 10, 160, 160,  #PB_Tree_NoLines)  ;  #PB_Tree_NoButtons |
    gtk_tree_view_set_show_expanders(GadgetID(0), gtk_tree_view_get_show_expanders(GadgetID(0)) ! #True) 
    TreeGadget(1, 180, 10, 160, 160, #PB_Tree_CheckBoxes|#PB_Tree_NoLines)
    For ID = 0 To 1
      n = 1
      For a = 0 To 10
        AddGadgetItem (ID, -1, "Normal Item "+Str(a), 0, 0) ;
        AddGadgetItem (ID, -1, "Node "+Str(a), 0, 0)   ;
        AddGadgetItem(ID, -1, "Sub-Item 1", 0, 1)     
        AddGadgetItem(ID, -1, "Sub-Item 2", 0, 1)
        AddGadgetItem(ID, -1, "Sub-Item 3", 0, 1)
        AddGadgetItem(ID, -1, "Sub-Item 4", 0, 1)
        AddGadgetItem (ID, -1, "File "+Str(a), 0, 0)

        SetGadgetItemState(0, n, #PB_Tree_Expanded) ;| #PB_Tree_Checked
        n = n+7
      Next
    Next
;     gtk_tree_view_set_level_indentation (GadgetID(0), 20)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf 
Allerdings fehlt mir noch die Lösung, wie man einen kompletten Baum, unabhängig von der Anzahl seiner SubKnoten, immer expandiert darstellen lassen könnte. (Ich such noch mal weiter.)

Gruß ~ Vera

Re: TreeGadget einzug verändern

Verfasst: 23.06.2010 14:41
von Shardik
Vera hat geschrieben:Allerdings fehlt mir noch die Lösung, wie man einen kompletten Baum, unabhängig von der Anzahl seiner SubKnoten, immer expandiert darstellen lassen könnte. (Ich such noch mal weiter.)
Liebe Vera,
im Prinzip hättest Du nur im Deutschen Forum suchen brauchen, denn dort habe ich schon
einmal eine Lösung gezeigt gehabt, die unverändert plattformunabhängig sowohl unter
Windows und Linux (und vielleicht auch unter MacOS X) läuft, weil PureBasic die nötigen
Befehle dafür zur Verfügung stellt und keine API-Aufrufe nötig sind. In dem Beispiel kannst
Du sogar eine Subitem-Ebene angeben, bis zu der die Untereinträge ausgeklappt werden:
http://www.purebasic.fr/german/viewtopi ... 65&start=2

Re: TreeGadget einzug verändern

Verfasst: 23.06.2010 16:19
von Shardik
Anscheinend gibt es einen Bug beim TreeGadget in der Linux-Version, den ich im
englischen Forum berichtet habe:
http://www.purebasic.fr/english/viewtop ... 23&t=42689