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

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

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

Gambas 3 op Arduino Uno Q

De Arduino Uno Q is een bord met naast de typische “uno” headers en een STM 32U585 processor, ook een “algemene” processor, van Qualcomm: Dragonwing, die 2 GB ter beschkking heeft, en er is 16 GB eMMC ruimte, wifi en bluetooth. Je hebt een uitbreiding nodig via de USB-C om scherm, muis, toetsenbord en eventueel ethernet aan te sluiten, en hem te starten als volledige “pc”.

Het voorgeïnstalleerde systeem is Linux, Debian, maar dat staat niet vermeld op het doosje. De desktop is XFCE, en via Synaptic package manager kan je gemakkelijk Gambas3 zoeken, kiezen (mark), en installeren (apply, apply changes). Resultaat is bv 3.20.2-1 hier bij mij. Gambas komt ook mooi mee in het Development menu te staan, naast Arduino App Lab. Er is 0,3 Gb ruimte in beslag genomen (van 7 naar 7,3 Gb used in df -h).

Ik heb geen Arduino dingen gebruikt, alleen geprobeerde of Gambas op zich werkt: een CLI test applicatie en een Graphic Application met een paar knoppen en een gridview; allebei geen probleem. Ik vermoed dat de “brug” naar de Arduino functionaliteit echter niet zo eenvoudig zal zijn. Maar als je een Arduino sketch maakt die ergens data schrijft, kan je met veel plezier daar een Gambas interface op los laten…


Settings bestand beschadigd

Op een paar momenten krijg ik een beschadigd configuratiebestand application.conf. Dat wordt gemaakt en ingevuld/uitgelezen door gebruik van de Settings component van gambas.

In het bestand wordt achteraan dit stuk test ingevoegd:

[gb.settings].Settings.Save.192: 

Dat gebeurt net voor de laatste “header” in het bestand, bv:

[gb.settings].Settings.Save.192: [Cam]
Imagedir="/home/cybr/Data/StockPiPictures-In"
WaitBeforePic=3
Current="raspistill"
Command="raspistill -t 1 -vf -hf -o /home/cybr/Camera/"

Ik heb het voorgehad bij twee verschillende projecten. Het is steeds dezelfde tekst, op dezelfde plaats. Die tekst komt niet in mijn project voor lijkt me, kan die toch niet vinden.

(todo: versies?)

3.19.3 @opensuse, @raspberrypiOs…

(todo: omstandigheden?)

Ik vindt in mijn code een paar keer een aanroep naar Settings.Save zonder haakjes, het moet zijn: Settings.Save().

Gambas op Raspberry Pi 500+ Debian 13.1

Gambas selecteren

Net zoals bij versie 12 komt Gambas helaas niet voor in de aanbevolen software, en moet je bij Preferences, add/remove software zoeken naar “gambas”. We vinden versie 3.20.2, en er wordt een hele rij sub-paketten getoond. Kies de complete Visual Development Enviroenment for Gambas, en de rest zal automatisch meekomen (hopelijk). “Apply”… de flikkerende aan/uitknop verraadt de aktiviteit van de installatie. Daarna is Gambas toegevoegd in het menu “Programming”.

Installatie

Het valt op dat een aantal gambas paketten niet mee geselecteerd werden, en misschien moeten we later iets apart toevoegen, maar we proberen eerst de standaard installatie uit zonder wijziging. We sluiten softwareinstallatie en starten Gambas. Handig in vergelijking met de pi400 of pi500 is hier echt wel dat je feedback krijgt van die led, ik weet dat Gambas aan het starten is en wacht rustig af. Gambas start mooi op met een gevangenispakje (horizontaal gestreepte achtergrond zoals voorheen ook dikwijls, maar dat verdwijnt meestal als je begint te werken, of bv het venster iets kleiner zet).

Gambas 3

Ik klik de Tip of the day weg, en ik kan kiezen uit verschillende mogelijheden om een nieuw project te starten: CLI, desktop, web….

  • new project, new commandline application, en main wordt automatisch gevuld met Print "Hello world"
  • . Run toont idd .. maar het flitst snel over het scherm. Kies onderaan het Console icoon om die terug zichtbaar te maken.
  • File, New project, Graphical. FMain een knop geven en een lijntje code
    Public Sub  Button1_Click()
    .
      Message.Info("Hello Gambas world")
    End

Fijn dat het installeren zo vlot verloopt. Later eens proberen een bestaand project te openen met wat meer code en libraries en zo…

.