Met Raki geflambeerde Gambas

Los van het feit dat het menu er gisterenavond dus niet als Gambas-programmeren uitzag, heeft de titel absoluut niets te maken met de pagina over gambas die ik net vond: aflevering 40 van “Brave Gnu World”, van 2002 schat ik.

Daarin wat uitleg over Gambas, en de anekdote waarin Benoît zijn dual-boot windows/linux systeem zit te tunen; hij formatteert vanuit dos zijn harde schijf – helaas de verkeerde, nl die waar Gambas opstond. En natuurlijk geen backups. Uiteindelijk vindt hij nog een toevallige kopie van een maand voordien…

brave-gnu-world/issue-40.en.html

Gambas op Mandriva Spring 2008

Gambas draait op Mandriva, maar met de versie vanwaar ik vertrok is bij-installeren buiten de gemakkelijke Mandrake gebruikersinterface nodig. De basis kan daar misschien wel mee, maar het kan veel sneller op de command line met het urpmi commando.

Op de gambas documentatiesite wordt beschreven wat voor Mandriva moet geinstalleerd worden;

urpmi firebird-devel gettext-devel libbzip2_1-devel libcurl-devel libgtk+2.0_0-devel libkdecore4-devel libmesagl1-devel libmesaglu1-devel libmysql-devel libomniorb-devel libORBit2-devel libpcre-devel libpoppler-devel libpq-devel libqt3-devel librsvg2-devel libSDL-devel libSDL_gfx-devel libSDL_image-devel libSDL_mixer-devel libSDL_ttf-devel libsqlite0-devel libsqlite3-devel libunixODBC1-devel libxml2-devel libxslt-devel postgresql-devel task-c-devel task-c++-devel zlib1-devel libffi-devel

./reconf-all
gb.qte.am:3: `%’-style pattern rules are a GNU make extension
src/Makefile.am:3: `gb.qte.am’ included from here
gb.qte.am:3: `%’-style pattern rules are a GNU make extension
src/ext/Makefile.am:3: `gb.qte.am’ included from here

************************************************************

THESE COMPONENTS ARE DISABLED:

– gb.compress.bzlib2
– gb.corba
– gb.db.firebird
– gb.db.mysql
– gb.db.odbc
– gb.db.postgresql
– gb.db.sqlite2
– gb.db.sqlite3
– gb.gtk
– gb.gtk.svg
– gb.net.curl
– gb.pdf
– gb.qte
– gb.sdl
– gb.sdl.sound

************************************************************

MySQL heb ik zeker wel nodig, dus ik moet op zoek naar mysql-devel.
urpmi mysql-devel werkt niet. (mysql-devel where are thou?)
Gevonden via rpmfind –> mysql-devel (iets met 7)
Daarna:

************************************************************
THESE COMPONENTS ARE DISABLED:

– gb.compress.bzlib2
– gb.corba
– gb.db.firebird
– gb.db.odbc
– gb.db.postgresql
– gb.db.sqlite2
– gb.db.sqlite3
– gb.gtk
– gb.gtk.svg
– gb.net.curl
– gb.pdf
– gb.qte
– gb.sdl
– gb.sdl.sound
************************************************************

Gambas werkt hiermee voorzover ik het nodig heb.

Crash door combobox

Een combobox geeft de mogelijkheid een gebruiker te laten kiezen uit een lijst van waarden, door een “drop-down” lijst (rolluik-lijst).
bv een combobox met leveranciersnamen: cmbxAlleLeveranciers

Door uit bestaande waarden te laten kiezen vermijd je dat verkeerde of onmogelijke input gebeurt.
Toch crasht je applicatie na gebruik van een combobox?

Je laat de gebruiker terechtkomen op de combobox voor een selectie met de code:

cmbxAlleLeveranciers.SetFocus()
cmbxAlleLeveranciers.Select()

Opvallend: hij kan hier letters intikken. Die komen niet zomaar vanzelf in je data terecht, maar wel in het resultaat van de combobox, bv door code die de keuze opvangt:

cmbxAlleLeveranciers_Change()

Als de gebruiker kiest uit de lijst heb je een change event. Maar ook op het moment dat daar iets ingetikt wordt heb je “change” events.

Als je dan de .Text waarde gebruikt om op te zoeken in de databank,

(waar je denkt dat die enkel kan bestaan uit tekst-waarden uit de lijst):

LeverancierNr = haalLeverancierNr(cmbxAlleLeveranciers.Text)

.. kan je in de problemen komen!

De oplossing: zet de combobox ReadOnly in het schermontwerp
(of met code: cmbxAlleLeveranciers.ReadOnly = TRUE ).

Opgelet! Dan mag je cmbxAlleLeveranciers.Select() niet meer gebruiken (dit is het selecteren voor wijziging van de tekst – wat dus niet meer kan). De SetFocus() is voldoende want de combobox reageert nu anders.
In plaats van cmbxAlleLeveranciers_Change()
gebruik je cmbxAlleLeveranciers_LostFocus()

combox gewoon en ReadOnly
De combobox in die twee uitvoeringen hier:
(uit de gambasdoc documentatie)

Combobox1, de bovenste, is zoals hij standaard gemaakt wordt in de Gambas programmeeromgeving:
– wit tekstveld.
– ReadOnly = FALSE

De tweede, opengeklapt met items zichtbaar, is
– ReadOnly = TRUE
– te herkennen aan de grijze bovenste lijn Item1.

Gambas Gids op Ubuntu

Een Ubuntu gebruiker heeft een gids gemaakt voor gebruik van Gambas door nieuwkomers. Hij maakt daarin een Gambas programma “pamphlets”.
De uitleg beschijft:

  • de installatie van Gambas op Ubuntu
  • installatie van de door hem gebruikte databank Sqlite3 op Ubuntu
  • afhalen en installatie van de door hem gemaakte demo
  • opbouw van scherm en code
  • maken van een uitvoerbaar programma dat vanop de desktop gestart kan worden

Een schermafbeelding van het programma: “screenshot”

De blog met de uitleg als een blog met de naam kalaharix.

De broncode download pamphlet.tar.gz
(en tar -xzvf pamphlet.tar.gz om uit te pakken)

De broncode download leesbaar als pdf-bestand

Versienummer van je eigen programma

Als je in de programmeeromgeving kijkt naar de eigenschappen van je project via menu
Applicatie Versienummer
Project / Properties

zie je daar een nummer in drie delen, verspreid over drie “spinbox” vakjes.

Je kan hier het nummer manueel instellen, wordt bewaard met je programma.

Maar als je van je programma of project een uitvoerbare versie maakt:
Make Executable, Source Archive, Install package (icoon van tandwiel), of via het menu en daar “executable”,
dan wordt het laatste getal van het versienummer automatisch met 1 verhoogd.
Het nummer wordt niet verhoogd als je enkel compileert met compile/compile all, of als je een source archive maakt!

Je kan ook in je applicatie het versienummer weergeven;

  • stel dat je op een “About” scherm een textlabel hebt txlbTitle, met de titel van je programma als tekst.
  • in de openingscode van het venster die tekst aanvullen met het versienummer:

    txlbTitle.Text &= Application.Version

Nb: het getoonde voorbeeld is een “read-only” voorbeeld uit de gambas omgeving; dat zie je aan de plaats van de applicatie in het directory pad; normaal zal een programma waar je zelf aan werkt in een home directory staan, bv /home/wig/gambasapps/myprogram.

Settings toepassing

Eenvoudige toepassing van Instellingen of configuratiebestand

Start een nieuw project met de naam ConfigSettings.
Kies bij Project Type, Options “File Settings Files Management”
Controle: Daardoor is onder project eigenschappen gb.settings aangekruist.

Vertrek op de nieuwe FMain form:
– maak een button bovenaan “btnShowConfig“.
– dubbelklik op de knop en vul er de volgende code in:

Message.Info(File.Load(Settings.path &/ Application.Name & ".conf"))
CATCH
Message.Error(Error.Text & " fout met config - bestaat niet? ")

= Een “run” levert normaal de foutmelding op.

Een beetje lager zet je een invultekstveld “txbxSetText1
Maak een nieuwe knop en zet die ernaast, met naam “btnSetText1” en zet in de code van click:

PUBLIC SUB btnSetText1_Click()

Settings["Instelling1"] = txbxSetText1.Text

END

= Een “run” doet niets nieuws lijkt op het eerste zicht. btnShowConfig geeft zelfde foutmelding. Je verlaat het programma.

= Een direkt daaropvolgende “run” met opvragen van btnShowConfig verrast misschien met je “instelling” van het tekstveld van de vorige “run”: onder een hoofding General (die je niet opgaf – standaard dus):

[General]
Instelling1=”txbxSetText1″

en een knop “ok”. Opeenvolgende “runs” tonen dat steeds de vorige ingevulde tekst, die je met btnSetText bevestigde, opgeslagen was.

Dat kan je terugvinden in de verborgen config directory:

/home/loginname/.config/gambas/

met de naam

ConfigSettings.conf

Open dat bestand met kate of een andere code-tekstverwerker en voeg een tweede “instelling” toe:

[General]
Instelling1="geheim"
Instelling2="nieuw"

Laat het programma lopen en vraag de instellingen op.

update 2012 11 30
Als je een configuratie-instelling opvraagt maar je bent niet zeker of die bestaat, geef je een standaardwaarde op die gebruikt moet worden bij ontbreken van de te zoeken instelling.

iHoogte = Settings[“General/Hoogte”, 120)

Als je wil testen of een configuratie-sleutel voorkomt of niet, zet je zelf “NULL” als alternatieve standaardwaarde.

IF isNull(Settings[“General/Runcounter”, NULL])
Settings[“General/Runcounter”] = 0
ENDIF

Gambas op Programming Language News

Op Programming Language News kondigden ze Gambas 2.6 aan op “http://plnews.org/posts/gambas_26_released_20080512_060951.html” May 12, 2008.
Gambas is er een vast onderwerp in de “http://plnews.org/category/Languages__BASIC/” rubriek BASIC.



Update 2011: de plnews.org website blijkt helaas verdwenen….
links afgekoppeld; citaat uit http://web.archive.org/web/20081216002426/http://plnews.org/category/Languages__BASIC/ hieronder:

PLNews: Programming Language News
News, articles, announcements and information focusing on computer programming languages and their implementations.
[Page 6] Older
December 09, 2008
REALbasic 2008 Release 5 Released
Posted: 2008-12-09 07:28:23
Languages :: BASIC

REALbasic 2008 Release 5 has been released. REALbasic is an object-oriented BASIC dialect and development environment, supporting Windows, Mac OS X, and Linux.

This release includes: support for printing source code in colour, improved auto-complete support, bug fixes, and other changes.
November 27, 2008
Run BASIC v1.01 Released
Posted: 2008-11-27 19:35:01
Languages :: BASIC

Run BASIC v1.01 has been released. Run BASIC is a Web-based BASIC implementation built upon Liberty BASIC.

This release includes a free edition for personal use.
October 31, 2008
Gambas 2.9.0 Released
Posted: 2008-10-31 06:18:40
Languages :: BASIC

Gambas 2.9.0 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: IDE improvements, networking component fixes, Gambas Server Pages, bug fixes, and other changes.
September 23, 2008
REALbasic 2008 Release 4 Released
Posted: 2008-09-23 20:35:37
Languages :: BASIC

REALbasic 2008 Release 4 has been released. REALbasic is an object-oriented BASIC dialect and development environment, supporting Windows, Mac OS X, and Linux.

This release includes: support for tab stops, development environment improvements, new warnings, support for constants in declarations, support for digitally signing applications on Mac OS X, bug fixes, and other changes.
August 30, 2008
Gambas 2.8.2 Released
Posted: 2008-08-30 20:41:21
Languages :: BASIC

Gambas 2.8.2 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: the completion of the Simplified Chinese translation, working bit manipulation functions, IDE improvements, and other changes.
August 25, 2008
Gambas 2.8.1 Released
Posted: 2008-08-25 06:16:59
Languages :: BASIC

Gambas 2.8.1 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes bug fixes.
August 18, 2008
Gambas 2.8 Released
Posted: 2008-08-18 06:20:26
Languages :: BASIC

Gambas 2.8 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: support for compilation using GCC 4.3, IDE improvements, updated translations, bug fixes, and other changes.
July 24, 2008
REALbasic 2008 Release 3.1 Released
Posted: 2008-07-24 06:27:12
Languages :: BASIC

REALbasic 2008 Release 3.1 has been released. REALbasic is an object-oriented BASIC dialect and development environment, supporting Windows, Mac OS X, and Linux.

This release includes bug fixes.
May 12, 2008
Gambas 2.6 Released
Posted: 2008-05-12 06:09:51
Languages :: BASIC

Gambas 2.6 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: IDE improvements and fixes, the correct handling of symbol polymorphism with inheritance depths greater than two, memory leak fixes, bug fixes, and other changes.
April 22, 2008
FreeBASIC 0.18.5 Beta Released
Posted: 2008-04-22 06:11:32
Languages :: BASIC

FreeBASIC 0.18.5 Beta has been released. FreeBASIC is an open-source BASIC compiler offering compatibility with Microsoft QuickBasic, while also adding features such as inline assembly, pointers, unsigned data types, and more.

This release includes: installation changes, bug fixes, and other changes.
April 06, 2008
Gambas 2.5 Released
Posted: 2008-04-06 09:59:31
Languages :: BASIC

Gambas 2.5 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: updated Spanish translations, IDE improvements, and other changes.
March 14, 2008
Gambas 2.3 Released
Posted: 2008-03-14 06:19:12
Languages :: BASIC

Gambas 2.3 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: IDE support for creating Debian and Ubuntu packages for component projects, the opening of device files by the interpreter in non-blocking mode, updates to the MySQL database driver, and other changes.
February 22, 2008
Gambas 2.1 Released
Posted: 2008-02-22 06:19:10
Languages :: BASIC

Gambas 2.1 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: support for 64-bit systems, support for OpenBSD, IDE improvements, bug fixes, and other changes.
January 16, 2008
REALbasic 2008 Release 1 Announced
Posted: 2008-01-16 06:13:45
Languages :: BASIC

REALbasic 2008 Release 1 has been announced. REALbasic is an object-oriented BASIC dialect and development environment, supporting Windows, Mac OS X, and Linux.

This release will include: support for introspection, additional language features and other improvements.
January 14, 2008
BBC BASIC for Windows 5.80a Released
Posted: 2008-01-14 21:42:38
Languages :: BASIC

BBC BASIC for Windows 5.80a has been released. It is a BBC BASIC implementation for Windows systems.

This release includes: improved support for console programs, improved QBasic compatibility, support for high-numbered I/O devices, support for right-to-left printing languages, bug fixes, and other changes.
January 06, 2008
Run BASIC Personal Server v1.0 Released
Posted: 2008-01-06 09:50:56
Languages :: BASIC

Run BASIC Personal Server v1.0 has been released. Run BASIC is a Web-based BASIC implementation built upon Liberty BASIC.
January 04, 2008
FreeBASIC 0.18.3b Released
Posted: 2008-01-04 21:49:49
Languages :: BASIC

FreeBASIC 0.18.3b has been released. FreeBASIC is an open-source BASIC compiler offering compatibility with Microsoft QuickBasic, while also adding features such as inline assembly, pointers, unsigned data types, and more.

This release includes: support for CONST qualifiers, improved QuickBasic compatibility, bug fixes, and other changes.
December 19, 2007
Gambas 2.0 RC2 Released
Posted: 2007-12-19 21:27:29
Languages :: BASIC

Gambas 2.0 RC2 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: improvements to the development environment, support for displaying rich text in GridView cells, and Observer class support for catching events after they have been processed.
November 14, 2007
Gambas 1.9.91 Released
Posted: 2007-11-14 06:21:00
Languages :: BASIC

Gambas 1.9.91 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: support for using Gambas as a scripting language, improvements to the IDE icon editor, enhancements to the gb.pdf component, and interpreter support for returning error stacktraces.
October 24, 2007
Visual Basic Language Specification 9.0 (Beta 2) Available
Posted: 2007-10-24 06:25:00
Languages :: BASIC

The Visual Basic Language Specification 9.0 (Beta 2) document is now available. “The Visual Basic Language Specification provides a complete description of the Visual Basic language 9.0.”

Instellingen of configuratiebestand

Gambas heeft een bibliotheek voor het gebruiken van een configuratiebestand, en die krijg je door bij de eigenschappen van het project de gb.settings component aan te duiden.

In code vraag je een waarde zo op:

ME.iBoven = Settings["Venster/Boven", ME.iBoven]
ME.iLinks = Settings["Venster/Links", ME.iLinks]
...

Er zitten herkenbare elementen in de werkwijze van het configuratiebestand, als een herkenbare hoofding en naam=waarde elementen:

...
[Venster]
Boven=13
Links=18
Hoogte=154
Breedte=235
...

Met Settings kan de waarde even gemakkelijk bewaard worden:

..
Settings["Venster/Boven"] = ME.iBoven
...

Je kan waarden ophalen, bewaren, vergeten, terughalen en wegschrijven.

Het gebruik wordt summier omschreven in de gambas Settings documentatie.

Een voorbeeld is de Gambas IDE zelf, met in /home/username/.config/gambas/gambas2.conf zijn instellingen.

Daarin zie je ook arrays in zowel de waarde als de naam:

[FColorChooser]
Geometry=[493,333,294,357]
...
File[1]="/home/username/Data/GambasPrj/Dev/Hello"
File[2]="/home/username/Data/GambasPrj/MyExamples/SimpleCharts"
...

Zo kijk je na waar het staat – steek de code bv onder een button_Click():

PRINT File.Load(Settings.path &/ Application.Name & ".conf")
CATCH
  Message.Error(Error.Text & " fout met config - bestaat niet? ")


De waarde van Settings.path is niet wijzigbaar (tenzij je een eigen settings object maakt).

Het configuratiebestand wordt niet automatisch aangemaakt, dus zal in eerste instantie niet bestaan.
Het moet nochtans niet zelf als leeg bestand gecreëerd worden. (ps: wat als een opgegeven directory nog niet bestaat?)

Met Settings.Save wordt het gemaakt, maar ook dan pas als er iets te bewaren valt, bv na het commando om de instellingen van het huidige venster (ME) te bewaren: Settings.Write(ME).

code onder een button btTest:

PUBLIC SUB btTest_Click()
   Message.Info("settings staan hier: " & Settings.Path)
   Settings.Write(ME)
   Settings.Save()
   CATCH
     Message.Error(Error.Text)
END

Het config bestand bevat daarna dan bv:

[FMain]
Geometry=[0,0,742,798]

Er zijn 2 manieren om instellingen te bewaren:

  • object, automatisch :
    Voor Window objecten kan je instellingen bewaren en opvragen met eenvoudige .Write en .Read
  • eigen parameters: sTeststring = Settings["Factuur/Laatstenummer"] om op te vragen en
    Settings["Factuur/Laatstenummer"] = sTeststring om op te halen.

Eens het bestand bestaat kan je er altijd parameters bij in zetten. In je code:

Settings["Factuur/Laatstenummer"] = "08001234"
Settings["Versie/Versienummer"] = "v1.0"
Settings["Versie/Serienummer"] = "-0001"

.. verandert het laatste factuurnummer en voegt (als het nog niet bestond) een hoofdstuk Versie toe met de parameters Versienummer en Serienummer.