Sammlung beliebter API-Calls

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
kayfr72
Beiträge: 130
Registriert: 12.09.2004 19:13
Wohnort: Lehrberg

Re: Sammlung beliebter API-Calls

Beitrag von kayfr72 »

ich grich ne Krise! :iamwithstupid:

Warum stellt man hier im Forum nicht einmal paar Listings ein für das PB-Linux für die GTK-Befehle. Die Windows-Api wird so schön erklärt überall. Die Listings für C machen die Sachen auch nicht einfacher. Was hilft die Unterstützung der C-Befehle, wenn nirgends erklärt wie man sie verwendet. Linux ist das Stiefkind von PB! Stellt doch mal bitte einen Thread auf wo es nur um C-Befehle geht für Linux-PB,würde bestimmt manchen interessieren.

@freak
Ich kämpfe immer noch mit meinem ListIconǴadget für Linux-PB. Kannst du mir mal ein Listing hier rein stellen um zu kommentieren wie ein ListIconGadget(Grundaufbau) unter PB-Linux-C erstellt wird? :praise: :praise: :praise:
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Sammlung beliebter API-Calls

Beitrag von Kiffi »

wenn ich Dein Posting so lese, beschleicht mich das Gefühl,
dass Du annimmst, das PureBoard sei ein Support-Forum.
kayfr72 hat geschrieben:Linux ist das Stiefkind von PB!
so sieht's aus.

(wobei MacOS wohl noch ein Stück stiefiger sein wird)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Sammlung beliebter API-Calls

Beitrag von edel »

Im Netz gibt es doch genug Beispiele die zeigen wie man mit GTK programmiert.
Was glaubst du denn wo die Informationen ueber die WinApi herkommen? Bestimmt
nicht aus der PB Hilfe :wink:
Zur Not fragste halt mal einen der anderen 3 Linux User hier :twisted:
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Sammlung beliebter API-Calls

Beitrag von TomS »

Naja. Die Api-Lib von RSBasic und dieser Thread hier, basieren auf dem Wissen, dass etliche User zusammengetragen haben. Das meiste stammt wohl von gut dokumentierten Beispielen aus anderen Sprachen und der MSDN.
Zur Zeit funktioniert doch fast alles Native von PB auch unter Linux?! Von Benachteiligung seitens des Teams kann doch also keine Rede sein.
Es proggen generall mehr Leute unter Windows, weil es einfach am weitesten verbreitet ist und die Api auch vergleichsweise gut dokumentiert ist.
Linux- und Mac-Programmierer sind Randgruppen und die Api ist schlecht dokumentiert und oft unvollständig, sodass man viel herum suchen muss.
Dafür können aber weder das PB-Team, noch die User hier im Forum etwas.
Wenn du Linux nutzt, dann mach dich schlau, wie etwas geht, und dann poste es im Forum.
Dann haben alle was davon und du letztendlich auch, weil mehr User motiviert sind, ihre Lösungen in einer zentralen Datenbank zu posten.
Benutzeravatar
kayfr72
Beiträge: 130
Registriert: 12.09.2004 19:13
Wohnort: Lehrberg

Re: Sammlung beliebter API-Calls

Beitrag von kayfr72 »

Also gut! Fange ich mal mit dem Urschleim an. :lol:

Ich habe erst mal nach Vorlagen im Netz mir das da zusammen gebastelt.

Code: Alles auswählen

gtk_init_(@argc,@argv)

win =gtk_window_new_(#GTK_WINDOW_TOPLEVEL)

button=gtk_button_new_with_label_("Drueck mich")

g_signal_connect_data_(win, "destroy",@QuitRoutine(),#Null,#Null,0)

gtk_container_add_(win, button);

gtk_widget_show_(win)

gtk_widget_show_(button)

gtk_main_()
bis auf gtk_signal_connect_ gehts.
Frage1: Wie so ist der Button so groß wie das Fenster und jeder Versuch den Button auf eine bestimmte Form zu bringen stirbt.
Frage2:Warum funktioniert gtk_signal_connect nicht. Meldung kommt das er die Funktion nicht kennt,obwohl sie in der Funktionsauswahl mit drinsteht?(erledigt)

EDIT: Habe die Routine gtk_signal_connect in g_signal_connect_data_ geändert.Jetzt gehts! :mrgreen:
Bleibt die Frage nach dem Button! Aber ich probier weiter! :(
Fragen über Fragen!
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Re: Sammlung beliebter API-Calls

Beitrag von remi_meier »

Der Button wird so gross, wie der Container wo du ihn hinzufügst.
GTK hat verschiedene Layout-Methoden/Container, ich habe hier
'fixed' verwendet:

Code: Alles auswählen

ProcedureC ende()
  gtk_main_quit_()
EndProcedure

gtk_init_(@argc,@argv)

win =gtk_window_new_(#GTK_WINDOW_TOPLEVEL)

button=gtk_button_new_with_label_("Drueck mich")

g_signal_connect_data_(win, "destroy",@ende(),#Null,#Null,0)

fixed = gtk_fixed_new_()
gtk_fixed_put_(fixed, button, 50, 50)
; gtk_container_add_(win, button);
gtk_container_add_(win, fixed);

gtk_widget_show_all_(win)

gtk_widget_show_(button)

gtk_main_()
Übersicht:
http://zetcode.com/tutorials/gtktutoria ... anagement/
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Sammlung beliebter API-Calls

Beitrag von Shardik »

kayfr72 hat geschrieben:Ich schlage mich zur Zeit mit einem ListIconGadget rum um ihm ein 2. Checkbox zu verpassen.
Bild

Code: Alles auswählen

EnableExplicit

#G_TYPE_BOOLEAN = 5 << 2
#G_TYPE_STRING = 16 << 2

#NumColumns = 3
#Obstarten = "Steinobst+Kernobst+Beeren"

Structure RendererEntry
  Pointer.I
  Column.I
EndStructure

NewList ToggleRenderer.RendererEntry()

Define CellText.GValue
Define CheckBoxState.GValue
Define Column.I
Define i.I
Define Info.S
Define j.I
Define *ListStore.GtkListStore
Define NumRows.I
Define *ScrolledWindow.GtkScrolledWindow
Define TreeIter.GtkTreeIter
Define *TreeView.GtkTreeView
Define *TypeList.I
Define *VBox.GtkVBox
Define *Window.GtkWindow

ProcedureC OnCheckBoxToggled(*ToggleRenderer, *TreePathString, *ListStore.GtkListStore)
  Shared ToggleRenderer.RendererEntry()

  Protected CheckBoxState.GValue
  Protected Column.I
  Protected TreeIter.GtkTreeIter
  Protected *TreePath

  ForEach ToggleRenderer()
    If ToggleRenderer()\Pointer = *ToggleRenderer
      Column = ToggleRenderer()\Column
      Break
    EndIf
  Next

  *TreePath = gtk_tree_path_new_from_string_(*TreePathString)

  If *TreePath
    If gtk_tree_model_get_iter_(*ListStore, @TreeIter, *TreePath)
      gtk_tree_model_get_value_(*ListStore, @TreeIter, Column, @CheckBoxState)
      CheckBoxState\data\v_long = CheckBoxState\data\v_long ! 1
      gtk_list_store_set_value_(*ListStore, @TreeIter, Column, @CheckBoxState)
      g_value_unset_(@CheckBoxState)
    EndIf
 
    gtk_tree_path_free_(*TreePath)
  EndIf
EndProcedure

ProcedureC AddRow(TextList.S)
  Shared *ListStore.GtkListStore
  Shared NumRows.I

  Protected CellText.GValue
  Protected i.I
  Protected Text.S
  Protected TreeIter.GtkTreeIter

  CellText\g_type = #G_TYPE_STRING
  gtk_list_store_append_(*ListStore, @TreeIter)

  For i = 1 To CountString(TextList, "+") + 1
    Text = StringField(TextList, i, "+")
    CellText\data\v_pointer = @Text
    gtk_list_store_set_value_(*ListStore, @TreeIter, i * 2 - 1, @CellText)
  Next i

  NumRows + 1
EndProcedure

ProcedureC AddColumn(Column.I, Header.S)
  Shared ToggleRenderer.RendererEntry()
  Shared *TreeView.GtkTreeView

  Protected *CellRenderer.GtkCellRenderer
  Protected *Column.GtkTreeViewColumn
  Protected *TreeModel

  *TreeModel = gtk_tree_view_get_model_(*TreeView)
  *Column = gtk_tree_view_column_new_()

  *CellRenderer = gtk_cell_renderer_toggle_new_()
  gtk_tree_view_column_pack_start_(*Column, *CellRenderer, #False)
  gtk_tree_view_column_add_attribute_(*Column, *CellRenderer, "active", Column * 2)
  g_signal_connect_data_(*CellRenderer, "toggled", @OnCheckBoxToggled(), *TreeModel, 0, 0) 

  AddElement(ToggleRenderer())
  ToggleRenderer()\Pointer = *CellRenderer
  ToggleRenderer()\Column = Column * 2

  *CellRenderer = gtk_cell_renderer_text_new_()
  gtk_tree_view_column_set_title_(*Column, Header)
  gtk_tree_view_column_pack_start_(*Column, *CellRenderer, #False)
  gtk_tree_view_column_add_attribute_(*Column, *CellRenderer, "text", Column * 2 + 1)
  gtk_tree_view_append_column_(*TreeView, *Column)
EndProcedure

; ----- Variablentyp-Liste für die einzelnen Spalten anlegen (2 pro Spalte)

*TypeList = AllocateMemory(#NumColumns * 2 * SizeOf(Integer))

For i = 0 To #NumColumns - 1
  PokeI(*TypeList + SizeOf(Integer) * i * 2, #G_TYPE_BOOLEAN)
  PokeI(*TypeList + SizeOf(Integer) * i * 2 + SizeOf(Integer), #G_TYPE_STRING)
Next i

; ----- ListStore anlegen und mit Werten füllen

*ListStore = gtk_list_store_newv_(#NumColumns * 2, *TypeList)
FreeMemory(*TypeList)

AddRow("Kirschen+Aepfel+Johannisbeeren")
AddRow("Pflaumen+Birnen+Stachelbeeren")
AddRow("Nektarinen+Quitten+Heidelbeeren")

; ----- TreeView anlegen

*TreeView = gtk_tree_view_new_with_model_(*ListStore)
g_object_unref_(*ListStore)

; ----- Spalten anlegen

For i = 0 To #NumColumns - 1
  AddColumn(i, StringField(#Obstarten, i + 1, "+"))
Next i

; ----- Fenster öffnen und ButtonGadget definieren

OpenWindow(0, 0, 0, 310, 145, "Auswahl von Obstsorten", #PB_Window_ScreenCentered)
ButtonGadget(1, 75, 10, 150, 23, "Auswahl anzeigen")                   ; y = 10 ist der vertikale Abstand zum
                                                                       ; TreeView, nicht die y-Position innerhalb
                                                                       ; des Fensters !
; ----- TreeView in PureBASIC-Fenster integrieren und anzeigen

*Window = WindowID(0)
*VBox = *Window\bin\child                                              ; Von PureBASIC angelegte GtkVBox ermitteln
*ScrolledWindow = gtk_scrolled_window_new_(0, 0)                       ; Neues GtkScrolledWindow anlegen
gtk_scrolled_window_set_shadow_type_(*ScrolledWindow, #GTK_SHADOW_IN)  ; Umrandungs-Stil des GtkScrolledWindow
                                                                       ; festlegen 
gtk_scrolled_window_set_policy_(*ScrolledWindow, #GTK_POLICY_AUTOMATIC, #GTK_POLICY_AUTOMATIC) ; Scroll-Balken
                                                                       ; ausblenden, wenn kein Scrolling benötigt
                                                                       ; wird
gtk_widget_set_size_request_(*ScrolledWindow, WindowWidth(0) - 10, 86) ; ScrolledWindow auf feste Größe setzen
gtk_box_pack_start_(*VBox, *ScrolledWindow, #True, #True, 0)           ; GtkScrolledWindow in GtkVBox einfügen
gtk_box_reorder_child_(*VBox, *ScrolledWindow, 0)                      ; GtkScrolledWindow an die 1.Position der
                                                                       ; Gadgets innerhalb der GtkVBox setzen und
                                                                       ; damit an den oberen Rand des Fensters
gtk_container_add_(*ScrolledWindow, *TreeView)                         ; TreeView in GtkScrolledWindow einfügen
gtk_container_set_border_width_(*Window, 5)                            ; Umrandungsbreite des Containers festlegen
gtk_widget_show_all_(*Window)                                          ; Alle Gadgets im Fenster sichtbar machen

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      If EventGadget() = 1
        Break
      EndIf
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

; ----- Zell-Inhalte und CheckBox-Stati auslesen und anzeigen

For j = 0 To #NumColumns - 1
  Info + "- " + StringField(#Obstarten, j + 1, "+") + " -" + #CR$

  For i = 0 To NumRows - 1
    If gtk_tree_model_get_iter_from_string_(*ListStore, @TreeIter, Str(i))
      gtk_tree_model_get_value_(*ListStore, @TreeIter, j * 2, @CheckBoxState)
      gtk_tree_model_get_value_(*ListStore, @TreeIter, j * 2 + 1, @CellText)

      If CheckBoxState\data\v_long
        Info + PeekS(CellText\data\v_pointer) + ": ja" + #CR$
      Else
        Info + PeekS(CellText\data\v_pointer) + ": nein" + #CR$
      EndIf

      g_value_unset_(@CheckBoxState)
      g_value_unset_(@CellText)
    EndIf
  Next i

  Info + #CR$
Next j

MessageRequester("Auswahl", Info)
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Sammlung beliebter API-Calls

Beitrag von Shardik »

kayfr72 hat geschrieben:Warum stellt man hier im Forum nicht einmal paar Listings ein für das PB-Linux für die GTK-Befehle.
Im englischen Forum wird man eher fündig. Daher habe ich hier einige Links zu Beispiel-Codes im englischen Forum zusammengefaßt, die mir die Einarbeitung in das GTK-API sehr erleichtert haben:

- ListIconGadget: Erstellung eines Fensters und eines ListStore (entspricht ListIconGadget) nur mit GTK API-Funktionsaufrufen (Trond)
http://www.purebasic.fr/english/viewtopic.php?t=28161

- ListIconGadget: Spaltenüberschrift und Spalteninhalt linksbündig, zentriert und rechtsbündig setzen (freak)
http://www.purebasic.fr/english/viewtop ... 63&start=3

- ListIconGadget: Linksklick auf eine Spaltenüberschrift erkennen (freak)
http://www.purebasic.fr/english/viewtop ... 80&start=1

- ListIconGadget: Zeile und Spalte ermitteln, über der sich gerade der Maus-Cursor befindet (freak)
http://purebasic.fr/english/viewtopic.p ... 19&start=6

- EditorGadget: Text als letzte Zeile einfügen (freak)
http://www.purebasic.fr/english/viewtop ... 13&start=2

- ContainerGadget + ImageGadget: Hintergrundfarbe eines Icon ändern, wenn der Cursor über das Icon bewegt wird; zusätzlich werden zahlreiche Ereignisse erfasst und angezeigt (StanDan und Straker)
http://www.purebasic.fr/english/viewtop ... 2&start=19

Ansonsten ist die absolute Pflichtlektüre die GTK+ Dokumentation:
http://library.gnome.org/devel/gtk/stable/
insbesondere die Seiten zu GtkTreeModel, GtkTreeView, GtkListStore, GtkTreeViewColumn, GtkContainer, GtkScrolledWindow, GtkBox und GtkCellRenderer.

Auch die C-Beispielcodes von GTK+ (insbesondere list_store.c) haben mir sehr geholfen. Diese Beispiele erhält man, wenn man im Paketmanager seiner Wahl das Paket "gtk2.0-examples" installiert. Danach findet man die Sourcecode-Beispiele im Verzeichnis /usr/share/gtk-2.0/demo.
Benutzeravatar
kayfr72
Beiträge: 130
Registriert: 12.09.2004 19:13
Wohnort: Lehrberg

Re: Sammlung beliebter API-Calls

Beitrag von kayfr72 »

Ok , bis zur Spaltenbenennung bin jetzt schon durch gestiegen. Mein Ziel ist es aber eine Checkbox allein in den ersten 2.Spalten allein stehen zu haben und 3-4 weitere Spalten nur mit Text zu füllen. Ich hab mit dem Code schon ein wenig rumprobiert,aber es will nicht gehen.

@Shardik: Hast du noch mehr Beispiele um mein Problem zu lösen. :praise:
wäre 'ne große Hilfe!
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Sammlung beliebter API-Calls

Beitrag von Shardik »

Bild

Für das obige Resultat habe ich mein Beispiel etwas abgewandelt. Mit der neuen Konstante
#ColumnsWithCheckBox kann jetzt über eine Zeichenkette festgelegt werden, welche Spalte
eine CheckBox enthalten soll. Ein Pluszeichen bedeutet, daß die zugehörige Spalte eine
CheckBox enthalten wird, ein Minuszeichen dagegen, daß die Spalte nicht mit einer CheckBox
ausgestattet wird. Die Zeichenkette "++--" bedeutet also, daß nur die Spalten 1 und 2 eine
CheckBox erhalten werden.

Code: Alles auswählen

EnableExplicit

#G_TYPE_BOOLEAN = 5 << 2
#G_TYPE_STRING = 16 << 2

#NumColumns = 4
#NumRows = 3
#ColumnsWithCheckBox = "++--"

Structure RendererEntry
  Pointer.I
  Column.I
EndStructure

NewList ToggleRenderer.RendererEntry()

Define CellText.GValue
Define CheckBoxState.GValue
Define Column.I
Define ColumnCount.I
Define Info.S
Define *ListStore.GtkListStore
Define Row.I
Define RowContent.S
Define *ScrolledWindow.GtkScrolledWindow
Define TreeIter.GtkTreeIter
Define *TreeView.GtkTreeView
Define *TypeList.I
Define *VBox.GtkVBox
Define *Window.GtkWindow

ProcedureC OnCheckBoxToggled(*ToggleRenderer, *TreePathString, *ListStore.GtkListStore)
  Shared ToggleRenderer.RendererEntry()

  Protected CheckBoxState.GValue
  Protected Column.I
  Protected TreeIter.GtkTreeIter
  Protected *TreePath

  ForEach ToggleRenderer()
    If ToggleRenderer()\Pointer = *ToggleRenderer
      Column = ToggleRenderer()\Column
      Break
    EndIf
  Next

  *TreePath = gtk_tree_path_new_from_string_(*TreePathString)

  If *TreePath
    If gtk_tree_model_get_iter_(*ListStore, @TreeIter, *TreePath)
      gtk_tree_model_get_value_(*ListStore, @TreeIter, Column, @CheckBoxState)
      CheckBoxState\data\v_long = CheckBoxState\data\v_long ! 1
      gtk_list_store_set_value_(*ListStore, @TreeIter, Column, @CheckBoxState)
      g_value_unset_(@CheckBoxState)
    EndIf
 
    gtk_tree_path_free_(*TreePath)
  EndIf
EndProcedure

ProcedureC AddRow(RowContent.S)
  Shared *ListStore.GtkListStore

  Protected CellText.GValue
  Protected ColumnCount.I
  Protected i.I
  Protected Text.S
  Protected TreeIter.GtkTreeIter

  CellText\g_type = #G_TYPE_STRING
  gtk_list_store_append_(*ListStore, @TreeIter)

  For i = 1 To CountString(RowContent, "+") + 1
    Text = StringField(RowContent, i, "+")
    CellText\data\v_pointer = @Text

    If Mid(#ColumnsWithCheckBox, i, 1) = "+"
      ColumnCount + 1
    EndIf

    gtk_list_store_set_value_(*ListStore, @TreeIter, ColumnCount, @CellText)
    ColumnCount + 1
  Next i
EndProcedure

ProcedureC AddColumn(Column.I, Header.S)
  Shared ColumnCount.I
  Shared ToggleRenderer.RendererEntry()
  Shared *TreeView.GtkTreeView

  Protected *CellRenderer.GtkCellRenderer
  Protected *Column.GtkTreeViewColumn
  Protected *TreeModel

  *TreeModel = gtk_tree_view_get_model_(*TreeView)
  *Column = gtk_tree_view_column_new_()

  If Mid(#ColumnsWithCheckBox, Column + 1, 1) = "+"
    *CellRenderer = gtk_cell_renderer_toggle_new_()
    gtk_tree_view_column_pack_start_(*Column, *CellRenderer, #False)
    gtk_tree_view_column_add_attribute_(*Column, *CellRenderer, "active", ColumnCount)
    g_signal_connect_data_(*CellRenderer, "toggled", @OnCheckBoxToggled(), *TreeModel, 0, 0) 

    AddElement(ToggleRenderer())
    ToggleRenderer()\Pointer = *CellRenderer
    ToggleRenderer()\Column = ColumnCount
    ColumnCount + 1
  EndIf

  *CellRenderer = gtk_cell_renderer_text_new_()
  gtk_tree_view_column_set_title_(*Column, Header)
  gtk_tree_view_column_pack_start_(*Column, *CellRenderer, #False)
  gtk_tree_view_column_add_attribute_(*Column, *CellRenderer, "text", ColumnCount)
  gtk_tree_view_append_column_(*TreeView, *Column)
  ColumnCount + 1
EndProcedure

; ----- Variablentyp-Liste für die einzelnen Spalten anlegen

*TypeList = AllocateMemory(#NumColumns * 2 * SizeOf(Integer))

For Column = 1 To #NumColumns
  If Mid(#ColumnsWithCheckBox, Column, 1) = "+"
    PokeI(*TypeList + SizeOf(Integer) * ColumnCount, #G_TYPE_BOOLEAN)
    ColumnCount + 1
  EndIf

  PokeI(*TypeList + SizeOf(Integer) * ColumnCount, #G_TYPE_STRING)
  ColumnCount + 1
Next Column

; ----- ListStore anlegen und mit Werten füllen

*ListStore = gtk_list_store_newv_(ColumnCount, *TypeList)
FreeMemory(*TypeList)

For Row = 1 To #NumRows
  RowContent = ""

  For Column = 1 To #NumColumns
    RowContent + "Z" + Str(Row) + "S" + Str(Column)

    If Column < #NumColumns
      RowContent + "+"
    EndIf
  Next Column

  AddRow(RowContent)
Next Row

; ----- TreeView anlegen

*TreeView = gtk_tree_view_new_with_model_(*ListStore)
g_object_unref_(*ListStore)

; ----- Spalten anlegen

ColumnCount = 0

For Column = 0 To #NumColumns - 1
  AddColumn(Column, "Spalte " + Str(Column + 1))
Next Column

; ----- Fenster öffnen und ButtonGadget definieren

OpenWindow(0, 0, 0, 270, 145, "Spalte 1 + 2 mit Checkbox", #PB_Window_ScreenCentered)
ButtonGadget(1, 55, 10, 150, 23, "Auswahl anzeigen")                   ; y = 10 ist der vertikale Abstand zum
                                                                       ; TreeView, nicht die y-Position innerhalb
                                                                       ; des Fensters !
; ----- TreeView in PureBASIC-Fenster integrieren und anzeigen

*Window = WindowID(0)
*VBox = *Window\bin\child                                              ; Von PureBASIC angelegte GtkVBox ermitteln
*ScrolledWindow = gtk_scrolled_window_new_(0, 0)                       ; Neues GtkScrolledWindow anlegen
gtk_scrolled_window_set_shadow_type_(*ScrolledWindow, #GTK_SHADOW_IN)  ; Umrandungs-Stil des GtkScrolledWindow
                                                                       ; festlegen 
gtk_scrolled_window_set_policy_(*ScrolledWindow, #GTK_POLICY_AUTOMATIC, #GTK_POLICY_AUTOMATIC) ; Scroll-Balken
                                                                       ; ausblenden, wenn kein Scrolling benötigt
                                                                       ; wird
gtk_widget_set_size_request_(*ScrolledWindow, WindowWidth(0) - 10, 86) ; ScrolledWindow auf feste Größe setzen
gtk_box_pack_start_(*VBox, *ScrolledWindow, #True, #True, 0)           ; GtkScrolledWindow in GtkVBox einfügen
gtk_box_reorder_child_(*VBox, *ScrolledWindow, 0)                      ; GtkScrolledWindow an die 1.Position der
                                                                       ; Gadgets innerhalb der GtkVBox setzen und
                                                                       ; damit an den oberen Rand des Fensters
gtk_container_add_(*ScrolledWindow, *TreeView)                         ; TreeView in GtkScrolledWindow einfügen
gtk_container_set_border_width_(*Window, 5)                            ; Umrandungsbreite des Containers festlegen
gtk_widget_show_all_(*Window)                                          ; Alle Gadgets im Fenster sichtbar machen

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      If EventGadget() = 1
        Break
      EndIf
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

; ----- Zell-Inhalte und CheckBox-Stati auslesen und anzeigen

ColumnCount = 0

For Column = 0 To #NumColumns - 1
  Info + "- Spalte " + Str(Column + 1) + " -" + #CR$

  If Mid(#ColumnsWithCheckBox, Column + 1, 1) = "+"
    ColumnCount + 1
  EndIf

  For Row = 0 To #NumRows - 1
    If gtk_tree_model_get_iter_from_string_(*ListStore, @TreeIter, Str(Row))
      gtk_tree_model_get_value_(*ListStore, @TreeIter, ColumnCount, @CellText)
      Info + PeekS(CellText\data\v_pointer)

      If Mid(#ColumnsWithCheckBox, Column + 1, 1) = "+"
        gtk_tree_model_get_value_(*ListStore, @TreeIter, ColumnCount - 1, @CheckBoxState)

        If CheckBoxState\data\v_long
          Info + ": ja"
        Else
          Info + ": nein"
        EndIf

        g_value_unset_(@CheckBoxState)
      EndIf

      g_value_unset_(@CellText)
      Info + #CR$
    EndIf
  Next Row

  ColumnCount + 1
  Info + #CR$
Next Column

MessageRequester("Auswahl", Info)
Antworten