Wie NicTheQuick schon gesagt hat, darf die Konstante #PB_Text_Right nur für TextGadgets verwendet werden. Für StringGadgets gibt es in Windows die Konstante #ES_RIGHT, die zufällig denselben Wert 2 wie #PB_Text_Right hat. In Linux muss man dieses Problem anders lösen. Deshalb habe ich in meinem modifizierten Beispiel das Konstrukt CompilerSelect..CompilerEndSelect verwendet, damit abhängig vom verwendeten Betriebssystem die korrekte Lösung verwendet wird:
Code: Alles auswählen
OpenWindow(0, 0, 0, 500, 400, "GUI Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowColor(0, $EAD1B9)
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
ImportC ""
gtk_entry_set_alignment(*Entry.GtkEntry, Alignment.F)
EndImport
StringGadget(1, 30, 20, 80, 22, "0", #PB_String_ReadOnly | #PB_String_Numeric)
gtk_entry_set_alignment(GadgetID(1), 1)
CompilerCase #PB_OS_Windows
StringGadget(1, 30, 20, 80, 22, "0", #PB_String_ReadOnly | #PB_String_Numeric | #ES_RIGHT)
CompilerEndSelect
ButtonGadget(2, 200, 20, 80, 25, "Connect")
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Das Ändern der Hintergrundfarbe ist in Linux auf Grund des von PureBasic standardmäßig verwendeten GTK3-Frameworks heikel: der PureBasic-Befehl SetWindowColor() funktioniert abhängig von der verwendeten Linux-Distribution und der installierten Version von GTK3 teilweise nicht. Dies ist nicht die Schuld von PureBasic, sondern die der GTK3-Entwickler, die mehrfach die dazu benötigten internen Funktionen abgeändert haben. Der einfachste Weg zu einem funktionierenden SetWindowColor()-Befehl besteht darin, wie von #NULL vorgeschlagen in der Menüleiste auf Compiler > Compiler Options... zu klicken und im Reiter "Compiler Options" hinter "Library Subsystem:" den Eintrag "gtk2" (ohne Anführungszeichen) vorzunehmen, damit das ältere GTK2-Framework verwendet wird.
Wenn man unbedingt das GTK3-Framework benutzen will oder muss, kann man mit dem folgenden auf 16 verschiedenen Linux-Distributinen erfolgreich getesteten Programm die Hintergrundfarbe des Fensters abändern:
Code: Alles auswählen
; Durchgeführte Tests mit PB 5.62 x86:
; ------------------------------------
; + Bodhi Linux 4.5.0 mit Moksha 0.2.1 und GTK 3.18.9
; + Debian 8 mit Xfce und GTK 3.14.5
; + Elementary OS 0.2.1 'Luna' mit Pantheon und GTK 3.4.2
; + Fedora 27 mit Gnome 3 und GTK 3.22.26
; + Kubuntu 12.04 mit KDE 4 und GTK 3.4.2
; + Kubuntu 14.04 mit KDE 4 und GTK 3.10.8
; + Kubuntu 16.04 mit KDE 5.18.0 und GTK 3.18.9
; + Linux Mint 19 'Tara' mit Cinnamon und GTK 3.22.30
; + Lubuntu 14.04 mit LXDE und GTK 3.10.8
; + OpenSuSE 13.2 mit KDE 4.14.9 und GTK 3.14.15
; + PCLinuxOS 2014.05 MiniMe mit KDE 4 und GTK 3.14.14
; + Ubuntu 17.10 mit Gnome 3 unter Wayland (Unity Theme) und GTK 3.22.25
; + Ubuntu 17.10 mit Gnome 3 unter X.org (Unity Theme) und GTK 3.22.25
; + Ubuntu Budgie 17.10 mit Budgie 10.4 und GTK 3.22.25
; + Xubuntu 16.04 mit Xfce und GTK 3.18.9
; + Xubuntu 18.04 mit Xfce und GTK 3.22.30
EnableExplicit
CompilerIf Subsystem("gtk2")
MessageRequester("Error",
"Sorry, this code only works in GTK+ 3!")
End
CompilerElse
ImportC ""
gtk_css_provider_load_from_data(*CSSProvider, CSSData.P-UTF8, Length.I,
*Error.GError)
gtk_css_provider_new()
gtk_style_context_add_provider(*StyleContext, *StyleProvider, Priority.I)
gtk_widget_get_style_context(*Widget.GtkWidget)
EndImport
#GTK_STYLE_PROVIDER_PRIORITY_USER = 800
Define ContainerWidget.I
Define CSSProvider.I
Define CSSData.S
Define GTK3MinorVersion.I
Procedure.I GetGTK3MinorVersion()
Protected GTK3Version.S
Protected GTK3MinorVersion.I
Protected ProgramID.I
ProgramID = RunProgram("pkg-config", "--modversion gtk+-3.0", "",
#PB_Program_Open | #PB_Program_Read)
If ProgramID
GTK3Version = ReadProgramString(ProgramID)
SetWindowTitle(0, "Current GTK version: " + GTK3Version)
GTK3MinorVersion = Val(StringField(GTK3Version, 2, "."))
CloseProgram(ProgramID)
EndIf
ProcedureReturn GTK3MinorVersion
EndProcedure
OpenWindow(0, 100, 100, 350, 230, "")
GTK3MinorVersion = GetGTK3MinorVersion()
If GTK3MinorVersion > 15
CSSData = "window.background {background-color: yellow;}"
ContainerWidget = WindowID(0)
Else
CSSData = "GtkLayout {background-color: yellow}"
ContainerWidget = g_list_nth_data_(gtk_container_get_children_(WindowID(0)), 0)
ContainerWidget = g_list_nth_data_(gtk_container_get_children_(ContainerWidget), 0)
EndIf
CSSProvider = gtk_css_provider_new()
gtk_css_provider_load_from_data(CSSProvider, CSSData, -1, 0)
gtk_style_context_add_provider(gtk_widget_get_style_context(ContainerWidget),
CSSProvider, #GTK_STYLE_PROVIDER_PRIORITY_USER)
g_object_unref_(CSSProvider)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
CompilerEndIf