Wat is gambas?

Featured

  • Gambas is een laagdrempelige programmeeromgeving (IDE) op Linux om snel en gemakkelijk programma’s (en bijhorende schermen) te maken in de Gambas programmeertaal.
  • De Gambas programmeertaal is een object georiënteerde knipoog naar visual basic, maar voelt vooral erg native Linux aan; de IDE is volledig in Gambas zelf geschreven…. Continue reading

Variabele vrijgeven

Een variabele declareren kan in een module of form code bv zo:

Public iSomeNumber As Integer
Private iSomeOther As Integer
Private sSomeName As String

OF binnen een procedure/functie zo:

Public sub myProcedure
Dim iSomeNumber
...
End

Vrijgeven

Je hebt hier in al die jaren nog niet gelezen hoe een variabele terug vrijgegeven wordt.

Dat komt omdat je dat normaal niet zelf doet, er is een soort automatische “huisvuilophaling” voor de variabelen, nl als het bereik of de “scope” verdwijnt.

Hierboven dus aan het einde van de procedure myProcedure, of aan het einde van de module of form waar de public/private gedeclareerd werden.

Maar het kan wel expliciet: met NULL:

iSomeNumber = Null

sSomeName = Null

Het doet niet veel, zelfs nadien kan je sSomeName nog aanroepen, die zal alleen leeg zijn, niet ongeldig.

Pointers

Bij pointers bestaat er wel een Free, maar pointers gebruik je normaal alleen als interface met externe c libraries, zie https://gambaswiki.org/wiki/howto/extern

Onverwachte crash door spinbox

Een onverwachte crash in een programma dat al draaide op Gambas en elders geïnstalleerd werd:

Type mismatch: wanted Integer, got Float instead

De foutmelding leidde naar een regel met een Spinbox:

DateAdd(dRunner, gb.Minute, SpinBoxTimeSlice.Value)

Ik heb de waarde van een SpinBox altijd als een geheel getal gebruikt, en dat werkte ook altijd zo. Maar uit de foutmelding leid ik nu af dat de spinboxwaarde een Float geeft ipv vroeger een integer. Als ik de waarde omzet naar integer werkt het terug.

DateAdd(dRunner, gb.Minute, CInt(SpinBoxTimeSlice.Value))
  • Het werkte nog wel in Gambas 3.18.x
  • verandering ?
  • Het werkte niet meer in Gambas 3.21.0

Is er iets veranderd aan SpinBox in Gambas 3.21 ? Ja, veel !

De gevolgen: meestal geen…

  • Bij Date(Year(now()), Month(now()), SpinBoxDay.Value) worden de parameters omgezet naar int, dus geen probleem.
  • Bij bewerkingen en vergelijkingen zoals groter dan geen probleem;
  • Bij Select SpinBoxDay.Value ook geen probleem.
  • Bij DateAdd wordt de laatste parameter niet intern omgezet naar integer. (Dat is op zich geen probleem, zolang je maar het juiste type parameter meegeeft – maar het gedrag verschilt van bv Date(..) waar de parameter automatisch wordt omgezet. Dit kwam ter sprake op de mailinglist…)

Op 25/03/2026 schreef Benoît Minisini dat het opgelost was in “de laatste commit”, dus ik vermoed dat het vanaf 3.21.6 ongeveer zal aangepast zijn (voor DateAdd).

Maar er blijven nog wel andere problemen, want de SpinBox.Value waarde wordt ook elders gebruikt, en die is duidelijk veranderd van Integer naar Float. Dat kan je zien aan de nieuwe eigenschap “precision” die plots opduikt, en die toelaat om de spinbox met komma’s te laten werken.

Voorbeeld waarbij die onverwacht programma’ kunnen breken:

 print 60 Div SpinBoxTimeSlice.Value
print i Mod SpinBoxTimeSlice.Value

Gambas op Leap 16.0

Spijtig genoeg weer niet verkrijgbaar: gambas3.x op OpenSUSE Leap 16.0. Niet aanwezig in de repos. Nb: Ik heb Gambas 3.20.99 al draaien op een OpenSUSE Leap 16.0 die geupgrade is van 15.6 of zo, en waarin Gambas geïnstalleerd was.

Compile from source beschrijving ondertussen ook niet meer bijgewerkt om te kloppen met 16.0. Installatie met zypper in van automake en libtool gaan nog wel.

Foutmelding op:

‘alure-devel’ is niet aangetroffen in pakketnamen - de eigenschappen worden nu geprobeerd. 
Geen enkel item biedt ‘alure-devel’ aan.
‘gstreamermm-devel’ is niet aangetroffen in pakketnamen - de eigenschappen worden nu geprobeerd.
Geen enkel item biedt ‘gstreamermm-devel’ aan.

Eens proberen zonder die twee?

zypper install -y libtool gawk gcc glew-devel gmime-devel gtk2-devel gtk3-devel libqt5-qtx11extras-devel libqt5-qtwebengine-devel libQt5Xml-devel libQt5Sql-devel libqt5-qtsvg-devel libQt5Gui-devel libQt5Core-devel libQt5Sql5-postgresql libQt5Sql5-unixODBC libQt5Sql5-mysql libQt5Sql5-sqlite libICE-devel libSM-devel unixODBC-devel libzip-devel libzstd-devel libmariadb-devel gsl-devel libopenssl-devel postgresql-devel libcurl-devel SDL2_ttf-devel SDL2_mixer-devel SDL2_image-devel libxslt-devel libv4l-devel librsvg-devel gtkglext-devel libgnome-keyring-devel libjpeg62-devel libpoppler-devel libpoppler-glib-devel imlib2-devel gmp-devel qt6-webenginewidgets-devel qt6-svg-devel qt6-gui-devel qt6-core-devel qt6-openglwidgets-devel

En ook apart staande webkitgtk3 moeten we overslaan:


zypper install -y webkitgtk3-devel 
‘webkitgtk3-devel’ is niet aangetroffen in pakketnamen - de eigenschappen worden nu geprobeerd.
Geen enkel item biedt ‘webkitgtk3-devel’ aan.

En na ./reconf-all en ./configure -C -q krijgen we :

|| THESE COMPONENTS ARE DISABLED: 
|| - gb.db.sqlite2
|| - gb.db.sqlite3
|| - gb.db2.sqlite3
|| - gb.gtk3.webview
|| - gb.media
|| - gb.mongodb
|| - gb.openal
|| - gb.qt4
|| - gb.qt4.ext
|| - gb.qt4.opengl
|| - gb.qt4.webkit
|| - gb.qt4.webview
|| - gb.qt5.webkit
|| - gb.sdl
|| - gb.sdl.sound

make -j $(nproc)

.. is gebeurd, dan als root sudo make install…

compiling ...
installing ...
compiling 'gb.media.form' component...
gbc3: error: Component information file not found: gb.media
make[2]: *** [Makefile:684: install-exec-local] Fout 1
make[1]: *** [Makefile:567: install-am] Fout 2
make: *** [Makefile:464: install-recursive] Fout 1

Er zijn wel onderdelen van gambas aanwezig in het systeem, maar niet de IDE:

  • gba3 –help
    Gambas archiver version 3.22.99 eae5007 (master)
  • gbc3 –help
    Gambas compiler version 3.22.99 eae5007 (master)
  • gbi3 –help
    Gambas informer version 3.22.99 eae5007 (master)
  • gbr3 –help
    Gambas interpreter version 3.22.99 eae5007 (master)
  • gbx3 –help
    Gambas interpreter version 3.22.99 eae5007 (master)
  • gbh3 –help
    Extract Gambas help comments from source files
    Conclusie:
  • Je kan een programma op de commandline starten met gbr3 naam.gambas
  • Je kan een programma starten met dubbelklik op de naam.gambas file in Dolphin.

Misschien is er nog een andere mogelijkheid; ik heb een download:

gambas3-ide-3.22.0+20260714+1-42.1.noarch.rpm (RPM-pakket, 2,4 MiB)

Vroeger kon je die openen in Yast, maar nu yast verdwenen is … misschien met “Ontdekken” (Discover). Daarbij wordt het (gebruikers-) wachtwoord gevraagd. Er komt een foutmelding ivm afhankelijkheden die niet opgelost kunnen worden. Andere versies proberen, bv?

Log en error lijstje (in listbox)

Experiment met listboxen voor log en foutberichten op scherm en Ik kan de logberichten daarin zetten met lsbx.Add(s, 0) .

Maar ik wil het op een minder storende manier:

  • Ik heb op mijn Form een aparte listbox voor fouten lsbxErr en één voor gewone logberichten lsbxLog
  • Die zitten samen in een dichtklapbaar parent (Expander), zodat ze niet in de weg staan als ze niet relevant zijn.
  • Als het maximaal aantal lijnen in de listbox (iSize) is overschreden, wordt de oudste lijn verwijderd (onderste)
Form content here..
….
….
Expander with lsbx’s starts under here :


Note: expanded = lsbx’s visible
lsbxLog:
– log line 0
– log line 1
..
lsbxEr:
– err line 0
– err line 1

Zet de instellingen van de form objecten:

  • Form Arrangement: vertical
  • Form content Expand: True
  • Expander.Arrangement: Horizontal
  • Expander Expand: True
  • Iedere listbox Expand: True

We willen het verloop van de berichten zo:

  • Een logbericht komt bovenaan bij in lsbxLog, en verandert niets aan de zichtbaarheid (als Expander open of gesloten stond blijft dat zo)
  • Een errormessage komt bovenaan in de lsbxError, en opent de parent Expander.
  • Het laatste bericht komt als Tooltip te staan van de eigen Listbox én als text van de parent expander; bij gesloten expander is zo het laatste bericht leesbaar.

Om hetzelfde te kunnen doen op al onze forms zetten we de code in MMain:

Public Const csHide As String = "h"
Public Const csShow As String = "s"
Public Const csUnchanged As String = "u"
Public iMaxLsbxLen As Integer = 100

Public Sub addToListbox(lsbx As ListBox, s As String, iSize As Integer, sHideShowUnchanged As String, bCompress As Boolean)
  
  Dim myExpanderParent As Expander

  lsbx.Tooltip = s
  If lsbx.Tag = "" Then
    lsbx.Tag = 0
  Endif
  ' add to list if needed
  If bCompress And lsbx.Count > 0 Then
    ' show repeated item with added string and keep in mind when comparing again..
    If (lsbx[0].Text = s) Or (lsbx[0].Text = s & " (++)") Then
      If lsbx[0].Text = s
        lsbx[0].Text &= " (++)" ' show it is repeated several times
      Endif 
      lsbx.Tag = lsbx.Tag + 1 ' last consecutive count
    Else 
      lsbx.Add(s, 0)
      lsbx.Tag = 1
    Endif
    lsbx.Tooltip &= " (R:" & lsbx.Tag & ")" 
  Else 
    lsbx.Add(s, 0)
  Endif
  ' add size
  lsbx.Tooltip &= "; Size:" & lsbx.Count
  ' adjust parent to make message visible even with closed expander
  myExpanderParent = lsbx.Parent
  Try myExpanderParent.Text = s
  Try myExpanderParent.Tooltip = lsbx.Name
  If Error Then
    Message.Error(Error.Text)
  Endif 
  ' keep within limits
  If lsbx.Count > IIf(isize, iSize, iMaxLsbxLen) Then
    Try lsbx.Remove(IIf(isize, iSize, iMaxLsbxLen))
    If Error Then
      Print "Could not trim " & lsbx.Name & ": " & Error.Text
    Endif
  Endif
  ' does this trigger the parent to expand to make change visible?
  Select sHideShowUnchanged
    Case "h"
      Try myExpanderParent.Hidden = True ' assume parent is Expander 
    Case "s"
      Try myExpanderParent.Hidden = False ' assume parent is Expander 
    Case Else '  incl empty
      ' leave unchanged
  End Select
  If Error Then
    Message.Error(Error.Text)
  Endif
End

Uitbreidingen of aanpassen bv:

  • bewaar log/err in bestand.

Gambas3 start

Algemene uitleg over gambas, momenteel in versie 3.x:

Gambas3 IDE

Dat is de programmeeromgeving om Gambas programma’s te maken. Als je zelf programma’s wil maken moet je opletten dat je de gambas “IDE” mee installeert!

Project

Een nieuw project maakt een directory aan met daarin alles wat met het project te maken heeft:

  • instellingen
  • code
  • scherm-ontwerpen (indien desktop-project)
  • teksten als README, help, licentie..
  • icoon voor project (voor eventuele link desktop)
  • beeldmateriaal voor iconen op knoppen of start/about scherm

Er zijn veel voorbeeldprogramma’s beschikbaar die je kan openen in de IDE om te kijken hoe Gambas werkt, als broncode-archief of via git.

Broncode-archief

De Gambas IDE maakt het gemakkelijk om de broncode van je project klaar te zetten voor transport: met een export functie maak je een standaard Linux .tag.gz bestand.

Als je zo’n .tar.gz bestand krijgt of download, kan je het uitpakken met tar -xzvf naam.tar.gz, en dan maakt dat de projectdirectory, zodat je het project kan openen in de IDE.

CLI

Je kan niet alleen een desktop programma maken, maar ook CLI-programma, zonder een desktop scherm. CLI-programma’s zijn zoals (shell-) scripts, je start ze op de commandolijn, of je kan ze laten lopen uit een timer (cronjobs, ..).

Programma draaien (“run”)

Als je het programma draait vanuit de programmeeromgeving kan je het stap voor stap laten lopen tot gemarkeerde punten in je code, om te onderzoeken wat er juist gebeurt met variabelen enz.

Executable

Als je het programma uitvoerbaar wil maken, als afgewerkt programma dat zelfstandig(*) kan draaien, als “executable”, dan compileer je het tot een .gambas, en je kan automatisch een link (met icoon) laten maken op je desktop als je die optie aanvinkt. Daarop klikken start dan het programma, zonder de programmeeromgeving mee te starten. Dat is dus de versie die de “gebruikers” zullen krijgen. Ze hoeven niet het hele project met de broncode en de hele programmeeromgeving te hebben.

Runtime

  • Het minimum wat nodig is op een computer om de .gambas programma’s uit te voeren is de gambas “runtime”. Die moet je op de doelcomputer dus wel installeren: sudo apt install gambas3-runtime.

sudo apt install gambas3-runtime

Gambas3 gestart, en daarin een project open en laten lopen;
In Taakbeheer zie je:


gbx3

gbr3

Een project gecompileerd en gestart bv met link op de desktop;
In Taakbeheer zie je:


gbr3

Schema

Dit overzicht/schema (over gambas2) is nog grotendeels geldig:

compile
interpreter
Archiver

Links

Terugblik naar Gambas3 in 2019
http://gambas.copyleft.be/blog/archives/2144

Library of Component in Gambas3
http://gambas.copyleft.be/blog/archives/1861

Gambas3 app uitpakken en compileren
http://gambas.copyleft.be/blog/archives/1842

Gambas en Lazarus

Vergelijking tussen de progammeertaal en IDE gambas / freepascal-lazarus

IDEGambas Lazarus
programmeertaalGambasFree Pascal (FPC)
HuidigVersie: 3.2Versies 4.6 + FPC 3.2.
Operating
system
Linux (div. distr.)div platformen
Programmeren
voor
– commandline (CLI)
– Desktop (div. desktops)
– CLI
– Desktop
Syntaxbasic-achtig + OOpascal + OO
Ontstaan

en

evolutie



in 1995,
eerste versie uit in 1999
Versie 1.0 uit in 2005
Versie 2.0 uit in 2008
Versie 3.0 uit in 2011
veel 3.x versies, bv:
Versie 3.20.0 uit in 2025
1999 uit Megido (1998),
componenten 2001
eerste versie uit 2003
Versie 1.0 uit in 2012
Versie 2.0 uit in 2019
Versie 3.0 uit in 2023
Versie 4.0 uit in 2025

Gambas na Tumbleweed update

Tumbleweed dup naar 20260724

Na deze zypper dup opnieuw gambas3 geïnstalleerd met 1 click install van software.opensuse.org; met name de

Stable 3.22.0+20260714+1 

De IDE start nu perfect, starter bevat Gambas on development/ontwikkeling.


Voorheen: probleem Gambas3 na Tumbleweed update 20260609

Na een update van OpenSUSE Tumbleweed (zypper dup) naar 20260515 is Gambas3 verdwenen, en wel zo dat ook de runtime er niet meer is, waardoor voorheen gemaakte Gambas applicaties niet gestart kunnen worden!

Ik probeer de installatie voor Tumbleweed* van software.opensuse.org, daar zijn nu naast de oude Education (Experimental) 3.14.3 versie nu ook een aantal recente Gambas versies bijgekomen bij “Community”:

Ik kies de laaste, stable. Ik krijg hierbij de vraag om gambas-dev-tools (blijkbaar toch iets overgebleven van vorige versie) om te zetten van bron munix naar home:gambas, wat ik dan ook doe.

Nadien werken de links op de desktop naar uitvoerbaare Gambas apps weer (runtime) en heb ik Gambas 3.21.6 (weet niet meer welke versie het voordien was) inclusief IDE geïnstalleerd staan, zonder de voorbeelden.

* Ps: de laatset die ik er terugvind voor Leap onder “Unsupported distributions” is: openSUSE:Leap:15.2, naast de SUSE:SLE-15:GA versies…allemaal “The following distributions are not officially supported. Use these packages at your own risk.”

Samenvoegen broncode van project voor export, print

In Gambas2 had ik een tool om door mijn project te gaan, en ik had het uitgebreid om ook de broncode te printen, die geraakte wat in onbruik, maar bestaat ondertussen ook voor Gambas3: ProbableCause 3.0.2

Gambas3 heeft ondertussen zelf die mogelijkheden, bv statistiek van variabelengebruik, printen van het huidig geselecteerde broncodebestand. Maar niet: printen van het hele project.

Samenvoegen broncodebestanden

Om een “hardcopy” of print te maken van alle broncode kan je die eerst samenvoegen in 1 bestand met hulp van ProbableCause:

  • Start ProbableCause 3.0.2 of hoger
  • File, Open, kies project (directory), bevestig. Je ziet de lijst van Classes en Modules.
  • Kies “scan all” om door de bestanden te lopen.
  • Menu “Export”, “print prepare-compile all sources” maakt een .txt bestand en antwoordt met “File written as .. C-F-M.txt”
  • Aparte keuze voor verzameling van alleen Class, Form, of Module kan ook.

Hardcopy / print

  • Openen/importeren in LibreOffice in een eigen template/vooraf gemaakt standaardbestand met bv kolommmen, aangepast lettertype/grootte en headers/footers.
  • Voor 1 enkel bestand ben je beter af met de printfunctie in Gambas3 zelf: Menu Edit, Print of Bewerken, Afdrukken.
  • Printen in kleur met de gambas kleurmarkering kan ook vanuit Gambas3.
  • Wil je lijn-nummers kan je bv Kate gebruiken: open het (samengevoegd) bestand en kies je bij Afdrukken, tab Tekstinstellingen: “Regelnummering afdrukken”

LibreOffice template

Om zo papier-zuinig maar toch leesbaar mogelijk te printen kan je:

  • je blad A4 vertikaal in twee kolommen verdelen.
  • Het lettertype verkleinen, kies bv 9 punt
  • Een “broncodevriendelijk”-lettertype kiezen, bv Liberation Mono
  • Footer met projectnaam en bladnummering + totaal blz, print datum.

Driver name missing

Deze foutmelding bij een databaseverbinding komt veel voor en betekent weinig.

  • driver name: op het eerste zicht zou de optie van het type ontbreken hConnection.Type=”mysql” bv. Maar dat is het niet altijd.
  • dikwijls is het wel één van de andere gegevens van de connectie die niet kloppen (user, password, name =database name, niet user, ..) dus je kan die tonen om te debuggen
  • bron van de parameters: soms is er iets mis met waar die parameters vandaan komen, bv uit een config file: keyname/parameter juist, kleinen/hoofdletters, wachtwoord (dikwijls moeilijk leesbaar) …,
  • via een schakelmechanisme als DataContext; ook daar: naam van de context, dataset, klein/hoofdletters…

Shell van Gambas2 naar Gambas3

Er is een verschil in de manier hoe Gambas3 het SHELL commando verwerkt t.o.v. Gambas2. Er is een kleine aanpassing nodig om het te weer doen werken:

Gambas2:

SHELL "ping -c 3 192.168.1.1" FOR READ
Public Sub Process_Read()

Dim sLine as String

READ #Last, sLine, -256
DEBUG sLine

Gambas3:

sCommand = "ping -c 3 192.168.1.1"
Shell sCommand For Read As "Process"
Public Sub Process_Read()

DIM sLine as string

sLine = Read #Last, -256
DEBUG sLine