- 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.Valueook 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:



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
| IDE | Gambas | Lazarus |
| programmeertaal | Gambas | Free Pascal (FPC) |
| Huidig | Versie: 3.2 | Versies 4.6 + FPC 3.2. |
| Operating system | Linux (div. distr.) | div platformen |
| Programmeren voor | – commandline (CLI) – Desktop (div. desktops) | – CLI – Desktop |
| Syntax | basic-achtig + OO | pascal + 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”:
- home:gambas:3.20 (Community) 3.20.4+20250520+1
- home:gambas:3.21 (Community) 3.21.6+20260423+1
- home:gambas:master (Community) 3.21.99+git.20260517….
- home:gambas:stable (Community) 3.21.6+20260423+1
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