In afwachting van Gambas3 in het Ubuntu/Linux Mint softwarebeheer, kun je Gambas3 installeren via onderstaande PPA.
Open een konsole:
$ sudo add-apt-repository ppa:nemh/gambas3
$ sudo apt-get update
$ sudo apt-get install gambas3
In afwachting van Gambas3 in het Ubuntu/Linux Mint softwarebeheer, kun je Gambas3 installeren via onderstaande PPA.
Open een konsole:
$ sudo add-apt-repository ppa:nemh/gambas3
$ sudo apt-get update
$ sudo apt-get install gambas3
Eenvoudige tekst, html, of ingebouwd printen?
De online documentatie vermeldt onder Gambas versie 2.0 de uitleg van 3.0.
Gambas 2.21 bevat in ieder geval een “voorbeeld” toepassing: “Printing”, dat al bestaat sinds 2006.
Die bevat de componenten:
Nota:
Deze componenten gaan niet samen met de algemene gb.gui component.
Wel kan je voor de gb.gtk en gb.gtk.ext kiezen, vermoedelijk verschaffen ze ongeveer dezelfde functionaliteit met licht anders uitzicht (KDE = Qt, Gnome = GTK).
In Gambas3 bestaat een Printer (gb.qt4) object.
Voor Gambas2: gebruik het “Printer” object, dat ondermeer volgende eigenschappen heeft:
bv: Printer.Orientation=Printer.Landscape
Opbouwen van print in 4 stappen:
IF NOT Printer.Setup() ' print commands ELSE ' Message.Error("print setup canceled") ENDIF
Het aanroepen van Printer.Setup() is niet verplicht, maar wel nuttig voor de gebruiker.
*1)
Draw.Begin(Printer)
Draw.Rect(iStartX, iStartY, iBreedte, iHoogte)
Zet tekst of teken vormen, bv: Teken een rechthoek op locatie … met afmetingen …
Draw.Rect(800, 800, 80, 40) ‘ zet bovenaan links een klein rechthoekje op papier.
Hoewel 800, 800 doet vermoeden dat het evenver van de boven als van de zijkant staat is dat niet het geval!
Draw.End
*2)
Tot hier loopt het printen;
* Opmerking: “Application.Busy”
INC Application.Busy
DEC Application.Busy
Tekst wordt geprint op plaats x, y met:
Draw.Text(“Deze tekst wordt afgedrukt”, x, y)
Een paar andere eigenschappen kunnen ingesteld worden met/als:
Printer.Orientation = Printer.Landscape Printer.Size = "A4" Draw.Font.Size = 18 Draw.Font.Name = "Arial" Draw.Font.Underline = TRUE Draw.Font.Bold = TRUE
en dat kan voor het aanroepen van Printer.Setup() gebeuren; je zal de instelling daar weergegeven zien, bv als je Printer.Landscape hebt ingesteld en nadien Printer.Setup() aanroept, staat “Paper Format” op “Landscape” in de drop-down box in het “Setup Printer” venster.
Waarschijnlijk wil je een aantal (public of private) variabelen declareren, als:
' Gambas module file PUBLIC iFirstColStart AS Integer = 120 PUBLIC iSecondColStart AS Integer = 2000 PUBLIC iThirdColStart AS Integer = 5500 PUBLIC iCurRow AS Integer = 800 ' PUBLIC iRepeatColStart AS Integer = iSecondColStart PUBLIC iDimensionColStart AS Integer = 3000 PUBLIC iColorColStart AS Integer = 3500 PUBLIC iNumberColStart AS Integer = 4000 PUBLIC iDeliveredColStart AS Integer = 4500 ' PUBLIC iFontSizeMainData AS Integer = 28 PUBLIC iFontSizeMidData AS Integer = 24 PUBLIC iFontSizeDataTitle AS Integer = 14 PUBLIC iFontSizeSmallData AS Integer = 10 PUBLIC iFontTinyData AS Integer = 7 PUBLIC sFontMainData AS String = "Arial" ' PUBLIC fborder AS Float PUBLIC fTextHeight AS Float PUBLIC fTop AS Float
Om te vermijden dat teksten door elkaar lopen in de print kan je de data wat inkorten, eventueel proefondervindelijk, bv:
PUBLIC iMaxCusLen AS Integer = 12 PUBLIC iMaxOrdNameLen AS Integer = 20
Hier een stukje code waarin dat gebruikt wordt:
IF NOT Printer.Setup() ' some printer settings Printer.Size = "A4" Printer.Orientation = Printer.Landscape ' why this? INC Application.Busy ' Draw printer page Draw.Begin(Printer) border = Printer.Resolution Draw.Rect(100, 100, 10, 10) ' just to fix the corner ' Draw.Ellipse(3000, 3000, 1200, 190) iCurRow = 300 Draw.Text("Klant", iFirstColStart, iCurRow) Draw.Text("Ordernaam", iSecondColStart, iCurRow) Draw.Text("Ordernr", iThirdColStart, iCurRow) iCurRow = 500 ' Draw.Rect(iFirstColStart, iCurRow, 2200, 300) Draw.Font.Size = iFontSizeMainData Draw.Font.Name = sFontMainData Draw.Font.Bold = TRUE Draw.Text(thisOrder.ShortCusName(iMaxCusLen), iFirstColStart, iCurRow, 1200) Draw.Text(thisOrder.ShortOrdName(iMaxOrdNameLen), iSecondColStart, iCurRow) Draw.Rect(iThirdColStart - 100, iCurRow, 1200 - 100, 280) Draw.Text(thisOrder.sOrdCode, iThirdColStart, iCurRow) ' ... enz. Draw.End DEC Application.Busy ELSE Message.Error("Printing was canceled") ENDIF
Meer pagina’s printen?
PUBLIC SUB GoNextPage() Printer.NewPage() INC iPageNumber iCurRow = iRowStart END
De versie van je eigen programma kan je in een tekstvariabele steken met:
sMijnVersie = Application.version
Maar als je daarnaast de versie van Gambas zelf nodig hebt?
Binnen Gambas is er geen commando om dat op te vragen.
In de IDE is die natuurlijk zichtbaar in het menu: ? , About Gambas (bv: 2.21).
Maar als je de gambas versie wil weergeven vanuit je draaiende gambas programma?
Meestal zal je dan de runtime bedoelen; die heet gbx (van gambas execute). In gambas 2 is dat gbx2, in gambas 3 vermoedelijk gbx3.
In je besturingssysteem kan je meestal de versie van een programma opvragen met
programmanaam --version
Wat ook geldt voor Gambas:
gbx2 –version
2.21.0gba2 –version
2.21.0gbc2 –version
2.21.0gbi2 –version
2.21.0gbr2 –version
ERROR: #35: Cannot open file ‘–version’: No such file or directory
Zie ook: archiver, compiler, informer.
Linux command prompt is bruikbaar vanuit Gambas:
EXEC ["gbx2", "--version"] TO sRuntimeVersie
Een applicatie die op zich wel werkt, start “soms” niet op, maar geeft volgende foutmelding:
This application has raised an unexpected
error and must abort.[13] Null object.
FMain.?.0
Na enige tijd wordt duidelijk dat ik ze wel kan draaien vanuit de IDE, waar ik dus het project open en “run” kies.
Op een ander toestel waar de applicatie gecompileerd is en gestart wordt van een icoon op de desktop, treedt de bewuste fout steeds op. Het is nochtans identiek dezelfde source, met misschien een miniem verschil in versies Linux/Kde/Gambas IDE.
Als ik het fenomeen terugzie bij een andere applicatie lijkt er een verband te zijn: programma’s die ik start vanuit de gewone, standaard voorezien FMain werken wel na compilatie. De applicatie die ik laat opstarten vanuit een module “MMain” geeft de foutmelding – niet vanuit de IDE dus, maar wel als gecompileerde versie die gestart wordt met een klik op het icoon naar de “programmanaam.gambas” file.
upd 22/03/2012: Ik ben niet helemaal zeker van deze analyse, ik meen toch nog een ander voorbeeld te zijn tegengekomen waar de Show() correct was. Misschien is het een “combinatie van problemen” ?
Update:
Een interessant verschil blijkt te zitten in het behouden van de debug informatie bij het compileren. Als dat “aan” staat crasht de applicatie niet als je ze start vanop de link op de desktop!
“Make executable”, “options”, “Keep debugging information in executable”.
(Oorzaak van de fout: zie “Don’t TRY to DEBUG“)
Gambas 2 uit gbvalor
Dit is een andere (*) installatie van Gambas 2 en 3 op openSUSE 12.1 en ze verliep vlekkeloos:
– openSUSE 12.1 van DVD geïnstalleerd.
– software bijgeïnstalleerd: lamp server enz.
– community repositories laten scannen, en .
– repository bijgeïnstalleerd: Google zoek op “gbvalor”, waarvan ik weet dat het de gambas repository is die ik meestal gebruik.
– in Yast, repositories, nieuwe, geef URL, de URL ingeplakt; die wordt gecheckt en aanvaard.
– software management, zoek “gambas”; de hele reeks gambas componenten is beschikbaar.
– Kies Gambas2 IDE, bevestig alles.
– Daarna is het menu-item “Development” bijgekomen (in de “classic” menu-style), met daarin Gambas2; start perfect.
– Nadien wordt het pakket vermeld als behorende tot “Development/Tools/IDE” en als leverancier “openSUSE-Education”.
Als je view op Repositories zet, vind je zowel Gambas 2 als 3 terug onder openSUSE BuildService – Education.
Hetzelfde voor Gambas3:
– Yast, software management, zoek “Gambas”
– Selecteer “Gambas 3 IDE”, bevestig.
– Gambas 3 is daarna opgenomen in het menu onder “Developement”, en start perfect.
– Nadien bij “Package Group: Development/Tools/IDE”, vendor “openSUSE-Education”
Bij Software, view “Pattern” is gambas3 IDE terug te vinden onder “Youth Education Desktop software”, gambas2 vind ik niet terug.
(*)
Op een eerdere openSUSE 12.1 installatie kreeg ik Gambas3 oorspronkelijk niet vlot geïnstalleerd, maar dat was misschien niet representatief…
Ik had een vervelende fenomeen van een soort “echo” op mijn scherm in een textbox, die ik wilde vullen met de invoer van een andere textbox.
De invoer gebeurde in txbxEditField.
Het was de bedoeling dat als de tekst daar klaar was, en de gebruiker enter of return drukt, de tekst ingevuld wordt in een cel in een tabel “tbvwDoel”. Het invullen in die tabel gebeurde met de functie valToTable() die in essentie niet meer doet dan:
tbvwDoel[iRowSelected, iColNewValue].Text = txbxEditField.Text
Ik ving bij het invoeren de Enter en de Return knop op om de invoer te aanvaarden:
PUBLIC SUB txbxEditField_KeyPress()
IF Key.Enter
valToTable()
btEditOk_Click()
ENDIF
IF Key.Return
valToTable()
btEditOk_Click()
ENDIF
END
Maar het vervelende effect was dat in de tabel de tekst die ingetikt wordt zichbaar is maar telkens met 1 letter vertraging, met 1 letter minder dan wat ingegeven is. Dat is bijzonder irrittant voor de gebruiker, die eigenlijk kijkt naar de plaats in de tabel in plaats van naar het invulveld.
Het is een kleine “logische” fout:
PUBLIC SUB txbxEditField_KeyPress()
IF Key.Code = Key.Enter
valToTable()
btEditOk_Click()
ENDIF
IF Key.Code = Key.Return
valToTable()
btEditOk_Click()
ENDIF
END
Nu gebeurt wat de bedoeling is. Het andere, verkeerde effect is leuk om te onthouden …
Vooraf: Installeer openSUSE 12.1, bv van een CD/DVD waarvan je de inhoud kan afhalen van http://software.opensuse.org/121/en ( Algemeen: http://www.opensuse.org/ )
Gambas 3
Daarna zoek je Gambas voor openSUSE:
http://en.opensuse.org/Gambas; in de rechtse kolom heb je “Download for openSUSE:” en de links naar 12.1, 11.4 en 11.3 (op moment van dit schrijven).
Je komt op een soort Package Search, waar je kan kiezen uit Gambas 2 en 3 voor verschillende versies van openSUSE.
Bovenaan de lijst met software staat meestal het algemene pakket – de interpreter- (zoek programmeeromgeving of “IDE”, met alles erbij of installeer dat later), eronder de afzonderlijke modules, om enkel te installeren wat je nodig hebt.
Rechts staat de “repository” waar het uitkomt; bv “Education/oepnSUSE_12.1”.
Net daaronder een “1 Click install” link.
Net daaronder krijg je een gedetailleerde tabel met (link naar) i586-, src- (source) en x86_64- (64 bit) versies.
Een klik op “1 Click install” link en Firefox biedt aan om gambas3.ymp te openen met “Yast 1-Click Install”. (ok)
Er worden automatisch een paar repositories (perl, python, Education, non-oss..) toegevoegd. (bevestig: next).
Select the software components you wish to install: [v] gambas3
Alles staat klaar, dus bevestig (next) en bevestig nog eens het overzicht.
Geef het root wacthwoord om te mogen installeren. Ik bevestigde de key van Perl en van python (trust).
Sluit af na:
Software installation
Installation was successful. (Finish)
Gambas IDE
Meestal staat na installatie Gambas bij in je menu; ik merk hier in het “traditionele” KDE-menu dat er geen rubriek (programmeren of Educational of zo) is bijgekomen. Evenmin zie ik het verwachte “laatst geïnstalleerd” menu-item. Nee, opnieuw inloggen voegt het niet toe.
De gambas die ik gekozen had was dus de basis Gambas Basic interpreter, niet de volledige IDE (= Integrated Development Environment; programmeeromgeving).
Gelukkig zijn nu wel de juiste repositories aanwezig en is het maar kwestie van de IDE te gaan kiezen in het softwarebeheer:
– Menu, Yast, install/remove software.
– Zoek “gambas”.
– Kies uit de lijst de IDE (automatisch worden een aantal andere mee geselecteerd), en al wat je nog denkt nodig te hebben.
– Bevestig (Accept), bekijk “Automatic changes”, ga verder (continue).
Je ziet dat er nu iets meer gedownload wordt; dat duurt even en je ziet alles voorbijrollen tot het klaar is.
Nu krijg je in het menu wel een “Recently Installed” keuze, met daarin
Gambas3 (Basic Development Environment 3)
Er is ook een menu “Development” bijgekomen (als je dat nog niet had), met daarin dezelfde keuze om Gambas te starten.
Update:
Direct na installatie: Oops!! Gambas3 start niet uit het menu!
Na een hele reeks updates (op 5/3/2012) waarin ik heel wat “Gambas” bestanden zag voorbijrollen op het scherm, start Gambas 3 perfect op, en het eerste beste voorbeeldprogramma dat erbij zat kon geopende worden in de IDE en gecompileerd/gestart worden.
Gambas 2
Optie: installeer daarnaast tevens Gambas2, ook via Yast, Software Management.
Nota: Daar haal je wel een hoop KDE3 mee binnen!
De installatie verloopt vlot (repositories zijn al voorzien, dus enkel kiezen uit de software).
Er komt een menu-item bij onder Development-Integrated Environment: Gambas2…
Gambas 2 start op met het bekende scherm, voorzien van voorbeeldprogramma’s.
Nota:
Later, op een andere installatie gebruikte ik een andere weg: Gambas 2 en Gambas 3 op OpenSUSE 12.1
Veel programmeer-plezier!
Bij gebruik van een databank lijkt de eenvoudigste manier om de fouten op te slaan in de databank; tenzij de fouten juist gaan over de databankverbinding.
Een alternatief is ze op te slaan naar een tekstbestand “error.log”, zoals de meeste programma’s. Het is bedrijfszekerder en de fouten zijn gemakkelijk te raadplegen zonder dat de applicatie draait, of zonder zelfs de databank draait.
Wat moet er in de foutlijn in de logfile staan? Minstens:
Foutmelding, datum, tijd, systeeminformatie als user@host
Een paar voorbeelden uit /var/log:
Zypper:mail
2010-07-27 11:32:25 <1> mybox(17593) [zypp] RpmDb.cc(~RpmDb):310 ~RpmDb()
2010-07-27 11:32:25 <1> mybox(17593) [zypp] RpmDb.cc(closeDatabase):805 closeDatabase: RpmDb[NO_INIT]
2010-07-27 11:32:25 <1> mybox(17593) [zypp] TargetImpl.cc(~TargetImpl):302 Targets closedX.org:
(II) intel(0): Output VGA is connected to pipe A
(II) intel(0): [drm] dma control initialized, using IRQ 16
(II) Mouse[1]: ps2EnableDataReporting: succeeded
(II) AIGLX: Suspending AIGLX clients for VT switch
(II) intel(0): xf86UnbindGARTMemory: unbind key 0mail.err
Aug 25 10:24:01 linux postfix/postfix-script[3310]: fatal: the Postfix mail system is not running
Moeten er alleen fouten in staan, of ook meldingen van bv een toestand? Dan wordt het meer een soort “message log”. Cups lijkt letters te gebruiken als I = info, E = Error, W = warning:
/var/log/cups/error_log
I [25/Aug/2010:15:15:49 +0200] Started “/usr/lib/cups/cgi-bin/admin.cgi” (pid=1119)
E [25/Aug/2010:15:15:49 +0200] CUPS-Add-Modify-Printer: Unauthorized
W [10/Sep/2010:15:19:40 +0200] [Job 1886] Unknown choice “Auto” for option “InputSlot”!
Of moet je het scheiden zoals bij “mail“, in verschillende bestanden:
mail.err
mail.info
mail.warn
Kan bv de “debug” omgeleid worden naar een bestand? Dan heb je de debug meldingen bij het programmeren+draaien van de code, en vergelijkbare data in de log.
Log snoeien: hoe lang mag log worden? FIFO die oudste data verliest, of telkens bij nieuwe start de vorige log leegmaken?
Doel: weergave van de dagen van de week, waarbij iedere dag een reeks waarden bevat (orders). De dagen van een week zijn vertikaal gegroepeerd.
De dag wordt voorgesteld als een soort listbox, met op iedere lijn de weergave van een ordernummer. Maar ik wil niet alle Dag-Listboxen, met steeds dezelfde eigenschappen, op het scherm tekenen.
De orders worden er naartoe “gesleept” (vierkantje op schermafbeelding) en komen in de lijst als je ze loslaat boven de dag (maandag op schermafbeelding).
Als er meer orders in de listbox komen, moet hij “groeien”, dwz de hoogte van de listbox moet groter worden; en omgekeerd moet hij ook kunnen krimpen.
Bovendien: de Dag-Listbox moet meer kunnen dan een listbox, ik maak dus een afgeleide klasse bv myListbox, of zo. Beter: ik noemt die CPlanDay; het geeft de planning voor die dag weer.
VBox ordent een aantal van mijn Listboxes (objecten van CPlanDay) vertikaal tot een week.
Volgende vragen bleven me open toen dat gelukt was:
Eerste poging:
Continue reading
Proficiat voor Fedora 16: Bij deze distributie is in het package management (install/remove software, zoekveld “gambas”) een uitgebreide keuze aanwezig:
Je kan zowel kiezen voor de individuele paketten als voor de hele programmeeromgeving als voor de runtime.
Bij installatie van de programmeeromgeving krijg ik nadien een foutmelding in verband met KDE.
Bij het opstarten blijken de “Examples” niet mee geïnstalleerd te zijn.
Ook de “Help Files” zijn niet automatisch geïnstalleerd, maar kunnen eenvoudig na-geïnstalleerd worden: klik op optie-box en “Apply”! Voor Gambas2 is dat gelukt, gambas 3 blijven de voorbeelden leeg maar ik weet niet of dat aan de pre-release versie ligt (2.9 ipv 3.0)