TreeGadget einzug verändern

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

TreeGadget einzug verändern

Beitrag 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
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: TreeGadget einzug verändern

Beitrag 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.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: TreeGadget einzug verändern

Beitrag 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
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: TreeGadget einzug verändern

Beitrag von X360 Andy »

#PB_Tree_NoButtons
:bounce:

Danke .... ( auch für die API ... )
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: TreeGadget einzug verändern

Beitrag 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
Zuletzt geändert von Vera am 22.06.2010 22:52, insgesamt 1-mal geändert.
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: TreeGadget einzug verändern

Beitrag 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
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: TreeGadget einzug verändern

Beitrag 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
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: TreeGadget einzug verändern

Beitrag 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
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: TreeGadget einzug verändern

Beitrag 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
Antworten