Seite 1 von 2

Pure Basic 5.40 Linux

Verfasst: 21.10.2015 10:55
von stevie1401
Beim Compilieren bekomme ich folgende Meldung unter Linux x64 (Ubuntu)

purebasic.o: In Funktion `PB_EndFunctions':
(.text+0x4c2e2): Nicht definierter Verweis auf `gdk_pixbuf_render_pixmap_and_mask'
collect2: error: ld returned 1 exit status

Mit PB 5.31 funktioniert der Code.
Leider springt der Editor nicht zu einer bestimmten Zeile, so dass ich nicht erkennen kann, was der Linker nicht mag.
Was kann das denn evtl sein?

Re: Pure Basic 5.40 Linux

Verfasst: 21.10.2015 10:59
von ts-soft
Einen ausführbaren Code, der das nachvollziehen kann. Eine Versionsnummer des Ubuntu und dann am bestem im engl. Forum als Bug melden.

Re: Pure Basic 5.40 Linux

Verfasst: 21.10.2015 12:01
von stevie1401
Vielen Dank.



Ich habe den Code gefunden:



Code: Alles auswählen

Procedure SetWindowBackgroundImage(hWnd.i, hImage.i)
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Linux
      betriebssystem="linux"
      Protected *Background
      Protected FixedBox.i
      Protected *Style.GtkStyle
      gdk_pixbuf_render_pixmap_and_mask_(hImage, @*Background, 0, 0)  ;<<------- der ist es
      *Style = gtk_style_new_()
      *Style\bg_pixmap[0] = *Background
      FixedBox = g_list_nth_data_(gtk_container_get_children_(gtk_bin_get_child_(hWnd)), 0)
      gtk_widget_set_style_(FixedBox, *Style)
      
    CompilerCase #PB_OS_Windows
      betriebssystem="windows"
      Protected hBrush = CreatePatternBrush_(hImage)
      If hBrush
        SetClassLongPtr_(hWnd, #GCL_HBRBACKGROUND, hBrush)
        InvalidateRect_(hWnd, 0, #True)
        UpdateWindow_(hWnd)
      EndIf
      
    CompilerCase #PB_OS_MacOS
      betriebssystem="mac"
      CocoaMessage(0, hWnd, "setBackgroundColor:",
                   CocoaMessage(0, 0, "NSColor colorWithPatternImage:", hImage))
  CompilerEndSelect
EndProcedure

Re: Pure Basic 5.40 Linux

Verfasst: 21.10.2015 12:06
von ts-soft
ts-soft hat geschrieben:Einen ausführbaren Code, der das nachvollziehen kann.
Also, den Code soweit kürzen, das das Problem auftritt, der Code noch ausführbar ist
und alles andere raus. Ist zwar manchmal mühsam, aber erforderlich! 10479 Zeilen
Code wird sich Fred nicht reinziehen :lol:

Re: Pure Basic 5.40 Linux

Verfasst: 21.10.2015 13:40
von stevie1401
Hab die Quelle doch schon gefunden und auch im engl. Forum gepostet.

Code: Alles auswählen

 
gdk_pixbuf_render_pixmap_and_mask_(hImage, @*Background, 0, 0)  ;<<------- der ist es
Gibts es evtl eine Alternative für diesen Code?

Re: Pure Basic 5.40 Linux

Verfasst: 21.10.2015 13:58
von ts-soft
Irgendwie tust Du Dich schwer mit nachvollziehbaren Code :wink:

Code: Alles auswählen

EnableExplicit

Procedure SetWindowBackgroundImage(hWnd.i, hImage.i)
  Protected *Background
  Protected FixedBox.i
  Protected *Style.GtkStyle
  gdk_pixbuf_render_pixmap_and_mask_(hImage, @*Background, 0, 0)  ;<<------- der ist es
  *Style = gtk_style_new_()
  *Style\bg_pixmap[0] = *Background
  FixedBox = g_list_nth_data_(gtk_container_get_children_(gtk_bin_get_child_(hWnd)), 0)
  gtk_widget_set_style_(FixedBox, *Style)
EndProcedure 

OpenWindow(0, #PB_Ignore, #PB_Ignore, 800, 600, "")
CreateImage(0, 800, 600, 24, $FF0000)
SetWindowBackgroundImage(WindowID(0), ImageID(0))

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Der läuft unter PB 5.31 aber unter 5.40 nicht, kannste also so im engl. Posten, damit kann Fred dann schon eher
was anfangen.

Gruß
Thomas

Re: Pure Basic 5.40 Linux

Verfasst: 21.10.2015 13:58
von NicTheQuick
Du kannst in den Compileroptionen auf GTK2 zurückschalten. Der obige Code ist nicht mit GTK3 kompatibel. Sicherlich kann man auch einen neuen Code dafür schreiben, ich bin da aber leider gerade nicht wirklich drin.

Re: Pure Basic 5.40 Linux

Verfasst: 21.10.2015 14:02
von ts-soft
Danke NicTheQuick, habs auch gerade gemerkt.

Re: Pure Basic 5.40 Linux

Verfasst: 21.10.2015 20:17
von mk-soft
Habe das hier gefunden...

https://forum.ubuntuusers.de/topic/bitt ... s-semi-tr/

Im letzten Beitrag
Hallo Leute

Hier kommt die Auflösung.

Wenn man im Netz nach diesem Thema Googled kriegt man 157 richtig komplizierte Lösungen, mit cairo und eposed events usw präsentiert. Alles Unfug.

Meine Erfahrung sagt: Wenn du unter GTK,für ein Problem, mehr als 10 Zeilen brauchst, bist du auf dem Falschen Weg.

Die Nummer ist eigentlich ganz einfach.

Window erzeugen: window = gtk_window_new(GTK_WINDOW_POPUP) ;
Layout erzeugen: layout = gtk_layout_new(NULL, NULL);
Layout ans Window hängen : gtk_container_add(GTK_CONTAINER (window), layout);
Layout Anzegen: gtk_widget_show(layout); Fragt mich nich warum, is einfach so
Irgendwie ein Bildchen erzeugeng: z.B. mit: pixbuf = gdk_pixbuf_get_from_window(root_window,0,0,width,height) ;
Bildchen in GtkImage umwandeln: image = gtk_image_new_from_pixbuf(pixbuf);
Bildchen dem Layout hinzufügen: gtk_layout_put(GTK_LAYOUT(layout), image, 0, 0);
Den ganzen Quatsch den man anzeigen will, wie üblich mit Tables und Boxen u.s.w. zusammenbasteln.
Den Kram nicht ans Window sondern ans layout hängen: gtk_layout_put(GTK_LAYOUT(layout),table,1,1) ;
Den ganzen Rabisch anzeigen: gtk_widget_show_all(window) ;
Live can be easy
Vielleicht kann das jemand auf PB umsetzen

Re: Pure Basic 5.40 Linux

Verfasst: 24.10.2015 13:52
von Shardik
Ich habe eine Lösung für Linux gefunden, die ohne Änderung mit Gtk2 und Gtk3 in PB 5.31 und PB 5.40 im ASCII- und Unicode-Modus funktioniert. Ich habe sie in den zugehörigen Original-Threads vorgestellt:
Englisches Forum (reine Linux-Lösung)
Deutsches Forum (Multiplattform-Lösung)