Linux-Anfänger mit Gadget-Problemen

Anfängerfragen zum Programmieren mit PureBasic.
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Linux-Anfänger mit Gadget-Problemen

Beitrag von bin_neu_hier »

Hallo Allerseits,

wollte mal in die Programmierung unter Linux (genauer gesagt: das aktuelle Kubuntu x64) reinschnuppern und bin - wird Euch nicht wundern - gleich an meine Grenzen gestoßen. Anbei mal ein Code, der ein paar Probleme mitbringt:

Code: Alles auswählen


Enumeration
  #Parentwin
  #Statusbar
EndEnumeration


ImportC ""
  gtk_label_set_yalign(*label.GtkLabel, yalign.f)
  pango_context_get_font_description(*context)
  pango_font_description_get_family(*description)
  pango_font_description_to_string(*description)
EndImport
;habe nicht die blasseste Ahnung, was es mit dem ImportC auf sich hat. 

Procedure.s Gadget_GetFontFamily(Gadget)
  Protected.s sFontFamily
  Protected   *context     = gtk_widget_get_pango_context_(GadgetID(Gadget))
  Protected   *description = pango_context_get_font_description(*context)
  Protected   *family      = pango_font_description_get_family(*description)
  If *family
    sFontFamily= PeekS(*family, -1, #PB_UTF8)
  EndIf
  ProcedureReturn sFontFamily
EndProcedure
;soll mir den aktuellen Hauptfont bringen. Kann ja bei jeder Distri anders sein


If OpenWindow(#Parentwin, 0, 0, 600, 100, "Resize", #PB_Window_SystemMenu | #PB_Window_WindowCentered | #PB_Window_SizeGadget)
  dirselect = ButtonGadget(#PB_Any, 10, 10, 200, 10, "Verzeichnis auswählen")
  
  x$ = Gadget_GetFontFamily(dirselect)
  fontnum = LoadFont(#PB_Any, x$, 11)
  If fontnum
    SetGadgetFont(#PB_Default, FontID(fontnum))
  EndIf
  SetGadgetFont(dirselect, FontID(fontnum))
;soll den aktuellen Hauptfont liefern und in der Größe 11 als Default einstellen 
  
  If CreateStatusBar(#Statusbar, WindowID(#Parentwin))
    AddStatusBarField(#PB_Ignore)
    StatusBarText(#Statusbar, 0, "Statusbar zentriert", #PB_StatusBar_Center)
  EndIf
  
  
  dirstring = TextGadget(#PB_Any, 220, 10, WindowWidth(#Parentwin,#PB_Window_InnerCoordinate)-230, 20, "",#PB_Text_Border)
  ;gtk_label_set_yalign(GadgetID(dirstring), 1)
  ;keine Ahnung, was das gtk... bezwecken soll, kann mit und ohne keinen Unterschied feststellen

  SetGadgetColor(dirstring,#PB_Gadget_FrontColor,RGB(0,0,0))
  SetGadgetColor(dirstring,#PB_Gadget_BackColor,RGB(255,255,255))
  
  
  Repeat 
    Event = WindowEvent()
    
    If Event
      Select Event
        Case #PB_Event_Gadget
          Select EventGadget()
            Case dirselect
              dirselect$ = PathRequester("Verzeichnis wählen", GetHomeDirectory())
              
              If dirselect
                SetGadgetText(dirstring,dirselect$)
                ;wenn Verzeichnis ausgewä#hlz, dann passiert ...
              Else
                SetGadgetText(dirstring,"")
                ; wenn kein Verz ausgewählz, dann passiert ...

              EndIf 
              
          EndSelect
          
          
          
        Case #PB_Event_SizeWindow
          ResizeGadget(dirstring, #PB_Ignore, #PB_Ignore, WindowWidth(#Parentwin,#PB_Window_InnerCoordinate)-230, 20)
          
          
        Case #PB_Event_CloseWindow
          End
          
          
          
      EndSelect
      
      
    Else  
      Delay(1)
    EndIf 
    
  ForEver
  End
  
EndIf
Problem Font: welcher Font ist der Standardfont, damit ich die Größe einstellen kann. Habe dazu die Codeschnipsel ab "ImportC" bis einschl. "Procedure.s Gadget_GetFontFamily(Gadget)" gefunden und eingebaut. Bin mir nicht sicher, ob das so richtig funktioniert.

Die Gadgethöhe für das Textgadget und Buttongadget lassen sich nicht richtig einstellen. Beide sollten gleich hoch sein und nicht viel höher als die Fonteinstellung erforderlich macht.

Wenn das Fenster sehr klein gemacht wird, wird das Textgadget automatisch in der Höhe vergrößert und der Text (also der ausgewählte Pfad) mehrzeilig angezeigt. Wie kann man den Automatismus verhindern? Ziel wäre, dass das Textgadget sich nur in der Breite anpasst.

Kann natürlich auch sein, dass mein PB nicht richtig für Linux konfiguriert ist. Alle Anleitungen, die ich gefunden habe, beziehen sich auf ältere Distributionen, für Kubuntu 20.04LTS habe ich nichts gefunden. Hat da jemand Tipps für mich?

Wäre für etwas Licht im Dunkel sehr dankbar!
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Linux-Anfänger mit Gadget-Problemen

Beitrag von mk-soft »

Unter GTK3 haben ButtonGadget und TexGadget eine minimale Größe ...
Bei GTK2 nicht.

Code: Alles auswählen

...
dirstring = TextGadget(#PB_Any, 220, 10, WindowWidth(#Parentwin,#PB_Window_InnerCoordinate)-230, GadgetHeight(dirselect, #PB_Gadget_RequiredSize), "",#PB_Text_Border)
...
ResizeGadget(dirstring, #PB_Ignore, #PB_Ignore, WindowWidth(#Parentwin,#PB_Window_InnerCoordinate)-230, #PB_Ignore)
...  
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten