Ich habe aus den bisher gezeigten Lösungen ein Cross-Platform Beispiel zusammengebastelt, auf das ich aus einem
Posting im englischen Forum, in dem ich alle mir bekannten Cross-Platform API-Beispiele gesammelt habe, verlinke, damit auch Nutzer des internationalen Forums dieses Beispiel nutzen können.
Ich habe dieses Beispiel auf folgenden Betriebssystemen erfolgreich getestet:
- MacOS 10.6.8 'Snow Leopard' mit PB 5.62 x86
- Linux Mint 18.1 'Serena' x64 mit Cinnamon und PB 5.62 x64 (GTK2 und GTK3)
- Windows 7 SP1 x64 mit PB 5.62 x86
Code: Alles auswählen
EnableExplicit
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
ImportC ""
gtk_widget_style_get(*Widget.GtkWidget, PropertyName.P-UTF8, *Value, Null)
EndImport
CompilerEndIf
Procedure GetRowHeight(GadgetID.I)
Protected RowHeight.I
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_MacOS
Protected Frame.NSRect
CocoaMessage(@Frame, GadgetID(0), "frameOfOutlineCellAtRow:", 0)
RowHeight = Int(Frame\size\height)
CompilerCase #PB_OS_Linux
Protected *Column.GtkTreeViewColumn
Protected VerticalSeparator.I
*Column = gtk_tree_view_get_column_(GadgetID(GadgetID), 0)
gtk_tree_view_column_cell_get_size_(*Column, 0, 0, 0, 0, @RowHeight)
gtk_widget_style_get(GadgetID(GadgetID), "vertical-separator",
@VerticalSeparator, 0)
RowHeight + VerticalSeparator
CompilerCase #PB_OS_Windows
#TVM_GETITEMHEIGHT = 4380
RowHeight = SendMessage_(GadgetID(GadgetID), #TVM_GETITEMHEIGHT, 0, 0)
CompilerEndSelect
ProcedureReturn RowHeight
EndProcedure
OpenWindow(0, 100, 100, 390, 100, "")
TreeGadget(0, 5, 5, WindowWidth(0) - 10, WindowHeight(0) - 10)
AddGadgetItem(0, -1, "Item 1", 0, 0)
AddGadgetItem(0, -1, "Subitem 1", 0, 1)
AddGadgetItem(0, -1, "Subitem 2", 0, 1)
SetGadgetItemState(0, 0, #PB_Tree_Expanded)
While WindowEvent() : Wend ; Event flush (necessary for Linux)
SetWindowTitle(0, "Row height: " + GetRowHeight(0))
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow