Gambas 2 op openSUSE 11.4

Door omstandigheden moet ik Gambas2 op een nieuwe openSUSE 11.4 installeren, op het randje (over eigenlijk) van de levensduur van deze distributie. Onmiddellijk duikt ook de vraag op hoe hier gambas2 op te krijgen, als de repositories niet meer beschikbaar zouden zijn.

http://software.opensuse.org/package/gambas2

levert twee mogelijkheden op voor openSUSE 11.4:

KDE:KDE3
2.24.0
32 Bit
64 Bit
Source
1 Click Install

home:swyear
2.20.2
Source
1 Click Install

Geluk?

(upd 2015-05) Versie 2.20
Ook nu een “nieuwe” opensuse 11.4 install waarvoor ik Gambas nodig heb. Ik plak de swyear URL in Yast Softwarebronnnen:
repositories/home:/swyear/openSUSE_11.4
Gambas2 kan daarna gestart worden in KDE, maar kreeg geen menu-item/icoon (zelfs niets in recent geïnstalleerd menu).
Bovendien

  • is dit (v. 2.20) niet de meest recente versie die bestaat van Gambas2 (v. 2.24)
  • zitten de voorbeelden er niet bij.

Een menu-item kan je zelf maken, het icoon vind je hier op https://build.opensuse.org/package/show/Education/gambas2
(end upd 2015-05)

2.24
Ik kies de meest recente (bovenste), hoewel daar enkel gesproken wordt over de runtime.

Er wordt kort iets geïnstalleerd, maar in het menu komt Gambas niet voor nadien.

In Yast, Software Management, zoek “gambas”, krijg je wel een uitgebreide keuze aan gambas op het menu: het zijn alle aparte onderdelen; de Gambas2 Runtime Environment blijkt al aanwezig te zijn. Ik selecteer nu de “Gambas IDE” : (dan komt de rest van de componenten mee)

gambas2-ide – The Gambas Development Enviroment.

Nadien is Gambas 2.24 geïnstalleerd, en ook vanuit het menu bereikbaar (niet zo fraai benoemd*):

Menu Recently Installed/Gambas2

Menu Development (nieuw bijgekomen) / “Integrated Envir. (Basic Development Environment) *
Je kan die bescrhijving veranderen met de menu editor: Menu, “programma’s bewerken”, Development openklikken en daar blijkt dat de oorzaak KDE is: Als er maar 1 item voorkomt in het menu krijgt het menu geen submenu’s om dat item te starten, maar telt het menu zelf, hier “Integrated Environment”. Dat werkt goed als je een menu hebt dat “Spreadsheet” heet, en dan bevolkt wordt door 1 of meer spreadsheet programma’s, maar hier is het onduidelijk. Maak eventueel een nieuw submenu op hoofdniveau aan (bv “Snel” met icoon van hartje of rode bol of iets zeer herkenbaars) en zet het daarin (kopieer of sleep).

Upd: Of pech?
Later lukte het niet meer op deze manier, maar eind oktober 2014 installeerde ik zo:
– Yast, Softwarebronnen, toevoegen (URL opgeven).
– plak daar:
http://download.opensuse.org/repositories/KDE:/KDE3/openSUSE_11.4/
Bevestigen en in het softwarbeheer gaan kijken.
Zoek, “gambas2”; kies de gambasIDE en alles wat nodig is wordt mee geselecteerd.


Upd nov 2014
Andere situatie: nieuwe opensuse 2014 installatie met alleen de runtime: ook van http://software.opensuse.org/package/gambas2, dan onder “unsupported distributions” openen, en dan
KDE:KDE3 – 2.24.0 32 Bit
En bevestigen; er begint een download die redelijk wat extra paketten ook afhaalt.
Nadien is de gambas runtime geïnstalleerd:

gambas2 – Runtime Environment for Gambas

/usr/bin/gambas2
/usr/bin/gambas2-database-manager.gambas
/usr/bin/gambas2.gambas

3 files total

Volgende vraag: hoe gebruiken? Ik heb de runtime geïnstalleerd en ik heb een programma dat in de gambas IDE gecompileerd werd tot een .gambas bestand. Bij pogingen het programma te draaien krijg ik altijd foutmeldingen, bv

/usr/bin/env: gbr2: No such file or directory

gbr is een link naar gbx (zag ik op een systeem met de hele Gambas2 IDE); gbr en gbx bestaan niet hier. Maar zelfs als ze even geleend worden van het andere systeem werkt het hier niet mee.

Ik doe nog eens het ommetje langs de opensuse website en kies nog eens de install van de 32bit versie uit de KDE3 repository:
http://software.opensuse.org/package/gambas2
En na wachtwoord vraag begint packagekit weer iets te installeren. Een hele lijst zelfs, waarin ik zie voorbijkomen:
waarin ook gambas2, en verder: samba, gimp-help, libreoffice converter en extentions, enz… om te eindigen in “File was installed successfully”.
Maar ik zie verder niet veel verschil, behalve dat mijn harddisk nu voor 4.4 Gb vol is ipv 3.9.

Ik voeg dus nog de KDE3 repository toe, manueel, want de community optie werkt niet in mijn huidige 11.4:
http://download.opensuse.org/repositories/KDE:/KDE3/openSUSE_11.4/

Daarna is er veel meer Gambas2 in Yast/Software management.
Ik zie nu alle afzonderlijke componenten, en kies de gambas2-gb-gui alleen uit. Die vereist dan nog een paar extra componenten, zoals de “runtime”- die zal daarmee vervangen worden veronderstel ik.
Ik zit nu aan 4.5 Gb ruimtegebruik.
Ik mis nu gb.form, die in het package management eruitziet als:
gambas2-gb-form - The control component for both GTK+ and qt
(Dat moet je weten als je zypper wil gebruiken). Install.
Zelfde voor:
gb.db: zypper install gambas2-gb-db
gb.db.form: zypper install gambas2-gb-db-form
gb.settings: zypper install gambas2-gb-settings
gb.qt: (dit zijn er een paar meer):
zypper install gambas2-gb-qt

Loading repository data…
Warning: Repository ‘openSUSE-11.4-Update’ appears to outdated. Consider using a different mirror or server.
Reading installed packages…
Resolving package dependencies…

The following NEW packages are going to be installed:
gambas2-gb-qt kdelibs3-default-style qt3

The following recommended package was automatically selected:
kdelibs3-default-style

3 new packages to install.
Overall download size: 3.1 MiB. After the operation, additional 10.2 MiB will be used.
Continue? [y/n/?] (y):
Retrieving package qt3-3.3.8c-219.1.i586 (1/3), 2.8 MiB (9.1 MiB unpacked)
Retrieving: qt3-3.3.8c-219.1.i586.rpm [done (377.9 KiB/s)]
Retrieving package kdelibs3-default-style-3.5.10-232.1.i586 (2/3), 128.0 KiB (381.0 KiB unpacked)
Retrieving: kdelibs3-default-style-3.5.10-232.1.i586.rpm [done (0 B/s)]
Retrieving package gambas2-gb-qt-2.24.0-22.1.i586 (3/3), 190.0 KiB (696.0 KiB unpacked)
Retrieving: gambas2-gb-qt-2.24.0-22.1.i586.rpm [done]
Installing: qt3-3.3.8c-219.1 [done]
Installing: kdelibs3-default-style-3.5.10-232.1 [done]
Installing: gambas2-gb-qt-2.24.0-22.1 [done]

Maar daarna draait de applicatie perfect! En zonder de Gambas2-IDE.

Eens de meestgebruikte componenten geïnstalleerd zijn toekomstige programma’s minder omslachtig te installeren, tenzij ze weer een nieuwe component nodig hebben.
Dit soort afhankelijkheden wordt waarschijnlijk opgevangen als je vanuit Gambas installatie-packages maakt.


Upd 2016-01-19: toevoegen repo gaat niet in Yast, wel zo:
zypper ar http://download.opensuse.org/repositories/KDE:/KDE3/openSUSE_11.4 gambasKDE3

Door de bestanden in een map lopen (files in directory)

Hier een stukje code waar door een map (directory) wordt gelopen en alle bestanden uit die directory worden weergegeven.

  • De directory komt hier uit een object ($hCardGame.sLocation), maar het is een gewone string met het volledige pad in, je kan het als test vervangen door de home directory zoals in de commentaar van de code wordt gesuggereerd.
  • Set1 is de subdirectory die doorlopen wordt.
  • De selectie van de files is hier een aantal grafische bestanden: png, jpg, jpeg; die worden eerst in een array gestoken.
  • Dan wordt de array uitgelezen met een FOR EACH / NEXT lus
  • Binnen die lus gebeurt een test, hier om te kijken of de lijst met namen niet te lang wordt
  • De uitvoer gaat naar een listbox, hier lsbxLog genaamd.

Dus behalve onderstaande code heb je daarbuiten de listbox en het object met eigenschap sLocation nodig (of vervang het door een parameter in de procedure).

PUBLIC SUB listImages()
  
  DIM sDirectory AS String
  DIM aFiles AS String[]
  DIM sFileName AS String
  DIM sList AS String 
  
'  Directory = System.User.Home
  sDirectory = $hCardGame.sLocation &/ "Set1"
  lsbxLog.Add(sDirectory, 0)
  aFiles = Dir(sDirectory, "*.png")
  aFiles.Insert(Dir(sDirectory, "*.jpg"))
  aFiles.Insert(Dir(sDirectory, "*.jpeg"))
  
  sList = ""
  FOR EACH sFileName IN aFiles
    sList &= ";" & sFileName
    IF Len(sList) > 80
      lsbxLog.Add(sList, 0) ' buffer full, show current part
      sList = ""
    ENDIF 
  NEXT
  lsbxLog.Add(sList, 0) ' final part
  
END

KDE 4.8.5 en Gambas2

Opgemerkt in Gambas2 op KDE 4.8.5 (opensuse 12.2): geen icoon in bovenrand venster en taakwisselaar

FMain: icoon is ingesteld op een png file in de properties, icon van FMain.

In de IDE toont de bovenrand ook dat ingestelde logo.

Start applicatie vanuit IDE: het FMain venster heeft niet het gekozen icoon, maar het algemene X icoon.

Gecompileerde applicatie: ook geen icoon in vensterrand.

In KDE 4.4.4 nog geen probleem.

Het kan wel zijn dat de voorwaarden waaraan het icoon moet voldoen in deze KDE versie “strenger” zijn geworden; en dat het gebruikte icoon vroeger ook al niet voldeed aan de standaard.

Ter vergelijking, dit is hoe de gambas IDE zelf* eruitziet (normaal met icoon):

KDE 4.8.5:

* (de Gambas IDE is zelf een gambas programma).

Ps: in Gambas3 werkt het wel.

Gambas 2 en 3 op openSUSE 12.1

En dit is een derde installatie van Gambas op openSUSE 12.1, die vlekkeloos vlot verloopt.
(todo: na deze en deze)

Gestart van een installatie van openSUSE vanaf CD-rom met een image van 12.1 32-bit, download afkomstig van de openSUSE website. Na volledige installatie en alle updates op zoek naar Gambas; we weten van vroeger dat gambas meestal in de community repositories beschikbaar is bij de “Education” packages:

  • Software Repositories: Community “Education”
    URL: http://download.opensuse.org/repositories/Education/openSUSE_12.1/
  • Daarna in Software Management: Zoek “gambas”:
    Zowel versie 2 als versie 3 zijn beschikbaar.
    Zowel de individuele paketten als het geheel ().
    Als je bv gambas3-IDE selecteert, worden alle gambas3 onderdelen mee-geselecteerd; nadien ook nog heel wat afhankelijkheden, zeker als je nog geen programmeertools of omgeving geïnstalleerd had staan. Versie: Gambas 3.3.2
    Voor Gambas2 worden heel wat (oude) KDE3 onderdelen geïnstalleerd. Versie: 2.24

Een melding op het scherm die zonder klikken verdwijnt

In het hoofdscherm van een programma, moet na het drukken van een knop een venster getoond worden met gegegevens uit een databank.

FMain is het hoofdprogramma,
btGetData de knop om de gegevens te vragen.
FDataRecords is het nadien te tonen venster.

Het ophalen van die gegevens gebeurt in FDatarecords en duurt even, waardoor het venster niet onmiddellijk verschijnt. De gebruiker zou in de verleiding kunnen komen nog eens op de ophaal-knop te drukken omdat er “niets gebeurt”.

Ik wil een venster tonen met een melding; bv:

Message.Info("Gegevens worden gelezen en geïnterpreteerd.\n Druk om verder te gaan en wacht tot venster verschijnt ....")

Het nadeel is dat de gebruiker dat venster moet wegklikken. Ik wil een venster dat vanzelf verdwijnt, bv door het maken van een nieuw venster met een nieuwgemaakte tekst:

 
PUBLIC SUB btGetData_Click()
'
  DIM hMessage AS Window
  DIM hText AS TextLabel
  ' de knop even buiten gebruik stellen
  btGetData.Enabled = FALSE
  ' berichtvenster ergens in het midden van FMain (parent)
  hMessage = NEW Window(ME)
  WITH hMessage
    .Width = 600
    .Height = 100
    .X = (.Parent.Width - .Width) / 2
    .Y = (.Parent.Height - .Height) / 2
    .Visible = TRUE
    .Border = .Fixed
    .Picture = Picture.Load("Patroon.png")
  END WITH 
  ' tekst die in het venster komt, met afmetingen in verhouding tot berichtvenster
  hText = NEW TextLabel(hMessage)
  WITH hText
    .Alignment = Align.Left
    .Width = hMessage.Width - 20 - 20
    .y = (hMessage.Height - 20) / 2
    .x = 20
    .Font.Size = 13
    .Alignment = Align.Center
    .Text = ("Retrieving the information from the database - wait ...")
  END WITH 
  hMessage.Show()
  ' bericht even tijd geven om op te komen alvorens aan FDatarecords te beginnen
  WAIT 0.001
  FDataRecords.Show()
  ' bericht sluiten en knop terug vrijgeven
  hMessage.Close()
  btGetData.Enabled = TRUE
END

Je kan ook nadien pas het venster een plaats geven:
hMessage.Move(300, 300)

Een beginners-gids voor Gambas, aangepast aan versie 3

Beginners guide to Gambas
Hoe eenvoudig kan het zijn:
* beginnersguidetogambas.com
Een Engelstalig werk, ook vroeger hier al vermeld, oorsprong VS.

Het was het eerste en enige werk dat in de begindagen van Gambas 1 en 2 te vinden was, en onmisbaar voor elke beginner.

Het mooie is dat deze uitgave bijgewerkt is tot versie 3 van Gambas.

Er zijn nog een paar extra’s:

  • Gambas3_Examples_not_edited
  • BGG_Projects_by_Chapter
  • GambasFormControlsReference (OpenDocument Sheet) zie hieronder:

    This table shows controls that we typically place on Gambas forms. They are valid for Gambas3 and Qt4 or GTK+, and most of them are also valid for

    Een overzicht van de controls, niet mooi maar wel handig. Engelstalig. Een kleine uitsnede:

Het lelijke op de site is de flash-box waar de downloads in zitten, maar dus:

http://beginnersguidetogambas.com/

Gevonden dankzij een tip van Jon Nicholson

Oude grap: Gnu Visual Basic

Ik stootte toevallig op een oude 1-april grap, waarin iemand Richard Stallman het uitbrengen van een Visual Basic cloon laat aankondigen: Gnu Visual Basic. Ik kan niet afleiden uit de brongegevens van wanneer deze grap dateert, maar waarschijnlijk van voor Gambas enige bekendheid had. Als je niet beter wist zou je zelfs denken dat het over Gambas gaat (waarom begint het met een G? Gnu’s Alternative Means BASic? – Sorry Minisini, but you never really explained where the G A M came from – or were you really bitten by a shrimp?)

Het zou oorspronkelijk gepubliceerd zijn op freshmeat (dat ondertussen freecode heet). Momenteel is het nog na te lezen op deze site: www.shlomifish.org/humour/GNU-Visual-Basic
Om het artikel geloofwaardig te maken werd zelfs een website gemaakt over Gnu Visual Basic, maar het e-mail adres daarop spreekt boekdelen:
owner-gnuvb@april.org

Naar die site moet je niet op zoek gaan want die staat nu vol opdringerige reklame, kwestie van nog een beetje van de URL-bekendheid te profiteren zeker.

Kijk dus liever naar het origineel: gambas (op sourceforge)

Probeer niet te debuggen (Don’t TRY to DEBUG)

Tijdens het werken aan een project kan je snel “DEBUG” code tussenvoegen om feedback of een resultaat te kunnen volgen in de commandolijn onderaan…   Working on code, I encoutered an interesting problem using DEBUG …

DEBUG "test"
toont “test” in het zwarte venster, maar evengoed kan je een variabele laten zien:
DEBUG sSqlStatement
of nog iets duidelijker voor jezelf:
DEBUG "SQL statement is:" & sSqlStatement

Een andere techniek is het gebruik van TRY (code) / IF ERROR (code).

Mijn fout was de combinatie van de twee:

TRY DEBUG resultOfProcedure()
IF ERROR
(code)
ELSE
(code)
ENDIF

In de IDE werk dat perfect, maar het probleem steekt de kop op als je het project compileert; de DEBUG code wordt niet meer uitgevoerd (tenzij je compileert met behoud van DEBUG code), en de applicatie crasht.

Het behouden van DEBUG code kan je aanzetten in de IDE bij het compileren naar een uitvoerbaar programma:

Menu: Project, Make, Executable (ctrl-alt-m)

Open daar onderaan > Options en kies “Keep debugging information in executable”

Door dit verschil kon ik de fout opsporen: door de TRY DEBUG combinaties te vervangen door TRY PRINT werkte de uitvoerbare versie wel na “make executable”.

English version:(Don’t TRY to DEBUG)



Problem using DEBUG

If you code:
DEBUG "test"
it shows “test” in the black window underneath the Gambas IDE, but of course it is more interesting to show the content of a variable
DEBUG sSqlStatement
maybe with some explanation on the same line (in case the variable is empty):
DEBUG "SQL statement is:" & sSqlStatement

Another thing is the use of TRY (code) / IF ERROR (code).

My error was the combination of both:

TRY DEBUG resultOfProcedure()
IF ERROR
(code)
ELSE
(code)
ENDIF

In the IDE it does what you want, but the problem pops up if you run the compiled project.
The DEBUG code is not included any more* and your program crashes.
* Except if you compile with option to keep debug info.

In the IDE, you find the option to keep the DEBUG code here:

Menu: Project, Make, Executable (ctrl-alt-m)

Open > Options and check

“Keep debugging information in executable”.

If you run the program afterwards, the “TRY-DEBUG” crash will not happen. If you replace TRY DEBUG by TRY PRINT, the crash will not happen any more in the compiled program.
Problem identified!

Commandolijn, SHELL: Distributie en versie opvragen

Een commandolijnprogramma kan je vanuit Gambas uitvoeren met SHELL of EXEC.

bv:

EXEC [ "ls", "-lF"]

Vanaf er “wildcards” in komen, als een ‘*’ om een reeks niet op voorhand gedefinieerde files aan te duiden, moet je SHELL gebruiken.

bv:

SHELL "ls /etc/*release"

Je kan in de Gambas IDE in het console venster onderaan de resultaten zien.

Je kan de uitvoer naar een variabele binnen Gambas sturen door de lijn te eindigen met

TO sVariabele

Klein voorbeeldje:

Maak een nieuw project “Command line application”

plak in MMain:

' Gambas module file

PUBLIC sParameter AS String
PUBLIC sCommand AS String
PUBLIC sAnswer AS String

PUBLIC sLine1 AS String
PUBLIC sLine2 AS String


PUBLIC SUB Main()

  sCommand = "ls /etc/*release"
  
  SHELL sCommand TO sAnswer
  
  DEBUG "Answer was: >" & Trim$(sAnswer) & "<"
  
  sAnswer = Trim$(sAnswer)
  
  sCommand = "cat " & sAnswer
  
  SHELL sCommand TO sAnswer
  
  DEBUG "Answer was: >" & Trim$(sAnswer) & "<"
  
  sLine1 = Left$(sAnswer, String.InStr(sAnswer, gb.NewLine))
  
  DEBUG "sLine1 is: " & sLine1
  
END

Hier kan je code uittesten die je elders in een grotere applicatie inbouwt; sParameter en sLine2 dienden daarvoor.

Printen uit Gambas: tekst, html of echt.

Eenvoudige tekst, html, of ingebouwd printen?

  1. Voor uitvoer kan je gemakkelijk een txt bestand maken vanuit gambas, dat je dan in eender welk programma kan openen en printen (bv Kate, …).
  2. Een andere mogelijkheid, waarmee je veel kanten uit kan is .html files maken vanuit gambas: die kunnen zowel bekeken worden met de browser, als van daaruit geprint. Als ze op een bereikbare plaats (gedeelde map of webserver) staan, zijn ze gemakkelijk te delen. (zie ook “html rapport weergeven of printen“)
  3. Je kan ook printen vanuit Gambas, dan moet je echt alles doen wat erbij komt; pagina beschrijven enz.

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:

  • gb
  • gb.qt (bevat Draw, gebruikt voor sturen van grafische informatie naar het Printer object)
  • gb.qt.ext (bevat Printer)

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:

  • Orientation (Portrait, Landscape)
  • Size “A4”
  • Copies (getal)
  • ColorMode (Black, Color)
  • Resolution (bv 600)

bv: Printer.Orientation=Printer.Landscape

Opbouwen van print in 4 stappen:

  1. Printer.Setup()
    Oproepen van print setup : geeft een standaard venster “Setup Printer” met de printerkeuze (als er meer printers zijn), en andere instellingen als “Printer Settings”, “opties”, papierformaatkeuze en aantal prints.
    Printer.Setup() geeft een waarde terug naargelang knop “OK” (FALSE) of “Cancel” (TRUE) gedrukt wordt.
    Aangezien “Cancel” TRUE geeft kan je een test doen met:

    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.

  2. *1)
    Draw.Begin(Printer)

    vanaf hier begint het printen
     
  3. Draw.Text((“Voorbeeldtekst”), iStartX, iStartY)
    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!

  4. Draw.End
    *2)

    Tot hier loopt het printen;

* Opmerking: “Application.Busy”

  1. INC Application.Busy
    wordt door de voorbeeldprogramma’s verhoogd net voor Draw.Begin
  2. DEC Application.Busy
    Application.Busy wordt door de voorbeeldprogramma’s verlaagd net na Draw.End
  3. 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