Gambas2 op openSUSE 11.0 + KDE4

  • OpenSuse 11.0 met KDE3.5 en KDE4.0.4
  • Ingelogd in KDE4.0.4.
  • repository ingevuld in Yast, Repositories:
    http://download.opensuse.org/repositories/home:/gbvalor/openSUSE_11.0/

    • Een paar keer moeten proberen tot de verdeling van de onderdelen van de url in orde was.
    • Er zijn ook andere versies beschikbaar in deze gbvalor: bv 10.2, 10.3
  • Dan in Yast, zoek, “Gambas2”: geeft een lijst van Gambas-2 componenten; allemaal aangevinkt. Accept.
    Waarop automatische 15 extra packages worden toegevoegd. Continue
    Een 28 Mb wordt aangekondigd.
  • Daarna start Gambas 2.7. Helaas lijken de voorbeelden te ontbreken.
  • Na de installatie een gambas applicatie als source afgehaald en geopend in de IDE, compile/run: ok!

Object eigenschappen “leegmaken”

Het leegmaken* van de eigenschappen van een object vanuit de classe kan met verwijzing
(* ik bedoel hiermee het op 0 zetten voor getallen en het “” zetten van een string)
naar zichzelf met “ME”:

' Class voorbeeld
PUBLIC LongName AS String
PUBLIC Amount AS Float
...
PUBLIC Empty
  WITH ME
  .LongName = ""
  .Amount = 0
  END WITH
...

In de . notatie komen de PROPERTY eigenschappen voor, je zou dus kunnen denken:


' Class voorbeeld
PUBLIC LongName AS String
PUBLIC Amount AS Float
 
PROPERTY Named AS String
PROPERTY READ Numbered AS Integer
...
PUBLIC Empty
  WITH ME
  .LongName = ""
  .Amount = 0
  .Named = ""
  .Numbered = 0
  END WITH
...

Je krijgt geen foutmelding voor .Named = “”
Je krijgt wel een foutmelding voor .Numbered = 0 (“is read only”)

Blijkbaar wordt dus de “automatische” _Write methode aangesproken, die niet bestaat voor het READ-only PROPERTY (enkel leesbaar).

Je moet in de plaats daarvan de eventueel intern gebruikte variabelen op nul zetten:


' Class voorbeeld
PUBLIC LongName AS String
PUBLIC Amount AS Float
 
PROPERTY Named AS String
PROPERTY READ Numbered AS Integer
 
PRIVATE $sNamed AS String
PRIVATE $iNumbered AS Integer
...
PUBLIC Empty
  WITH ME
  .LongName = ""
  .Amount = 0
  END WITH
  $sNamed = ""
  $iNumbered = 0
END
...
PRIVATE SUB Named_Write(Value AS String)
  $sNamed = Value
END

Kopiëren van een object

Kan je met twee objecten:
huidigObject
vorigObject
iets doen als:
vorigObject = huidigObject

Ja, dat gaat inderdaad. Is het ook ok? Wat gebeurt met het vorigObject? Worden alleen de waarden intern overgenomen? Of wijst vorigObject nu naar huidigObject?

DEBUG om PRINTS uit de uitvoerbare code te houden

Gambas heeft een ingebouwd commando DEBUG.
Je kan het gebruiken om iets naar de “console” te sturen, m.a.w. het te tonen via de standaard uitvoer, in de programmeeromgeving (zie schermafdruk).

De DEBUG instructie geeft meer weer dan PRINT; je krijgt in volgorde de naam van de class, de naam van de methode, en tenslotte het regelnummer (van de regel waarin de op dat moment uitgevoerde DEBUG staat).

Bovendien worden, binnen de Gambas omgeving, bij het maken van een “executable” (een uitvoerbaar programma) de DEBUG lijnen uitgefilterd; ze bezwaren je code dus niet. En als je ze er toch uitwil kan je ze gemakkelijk vinden; en ook makkelijk het onderscheid maken met de gewone PRINT instructies.

Op de schermafdruk ook de zoek functie; die maakt onderscheid tussen hoofd-en kleine letters. Soms lijkt “zoek” niet goed te werken, maar komt dat door de instelling: je kan zoeken in de huidige tekst, alleen binnen de huidige procedure, of binnen het hele project.
Debug of Print

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