Eenvoudige grafieken met Gambas2

Article op Linux.com: “Creating simple charts with Gambas 2.0” van 12 december 2007 door Mark Alexander Bain.
Hij volgt een aantal conventies niet, en dat maakt de code moeilijker te lezen:
– Het type van een variabele wordt in Gambas aangegeven door een beginletter (bv iGetal, sNaam, …)
– Hij gebruikt in de namen van de variabelen veel “underscores” om twee delen van een woord te scheiden en die zo leesbaarder te maken. Maar in Gambas heeft die underscore een andere betekenis en wordt met hoofdletters in de woorden gewerkt, hoewel de underscores geen fouten geven in Gambas.
– Omdat er nogal veel met x en y coordinaten gewerkt wordt is het nodig meer betekenisvolle namen te geven.
x_string wordt dan sTitleX ; met 1 letter minder zeg je meer.

Hieronder (een stukje) “vertaalde” broncode:


' Gambas class file

PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()

  drawChart()
  
END

SUB drawChart()
  
  DIM iOriginX AS Integer
  DIM iOriginY AS Integer
  DIM iMaxX AS Integer
  DIM iMaxY AS Integer
  DIM sTitleX AS String
  DIM sTitleY AS String
  
  'Initialize 
  DrawingArea1.Clear
  draw.Begin(DrawingArea1)
  
  ' Axis titles text
  sTitleX = "Value"
  sTitleY = "Date"
  
  ' Origin
  iOriginX = Len(sTitleX) * 10
  iOriginY = DrawingArea1.ClientH - 30
  
  ' Axis length
  iMaxX = DrawingArea1.Width
  iMaxY = DrawingArea1.Height * -1
  
  ' Axis draw
  draw.Line(iOriginX, iOriginY, iMaxX, iOriginY)
  draw.Line(iOriginX, iOriginY, iOriginX, iMaxY)
  
  ' Axis titles
  draw.Text(sTitleX, 0, iOriginY + iMaxY * 0.90)
  draw.Text(sTitleY, iMaxX * 0.90, iOriginY + 10) 
  
  draw.End
  
END

Rolluik: ComboBox als afrol-lijst (Drop-down list)

ComboBox De Combobox lijkt het meest op een gewone “drop down list” of rolluiklijst.
Toch gedraagt hij zich niet zo. Als je op de lijst klikt gaat die niet open, maar krijg je een “carrot” of cursor in het woord “ComboBox1” (knipperend vertikaal streepje).
De enige plek waar je de lijst kan doen openklappen is het pijltje rechts ernaast, en dat is in verhouding een klein vlak.
Om de hele oppervlakte op een klik te laten reageren met openklappen van de keuzelijst kan je het gedrag van “mousedown” definiëren:
Rechtsklik, Events, MouseDown brengt je in de code onder PUBLIC SUB ComboBox1_MouseDown() van de combobox. Voeg daar de “Popup” toe:

PUBLIC SUB ComboBox1_MouseDown()
ComboBox1.Popup()
END

Wil je de lijst nog “gevoeliger” maken kan je in plaats daarvan de lijst al laten openklappen als het pijltje er voorbijkomt:

PUBLIC SUB ComboBox1_enter()
ComboBox1.Popup()
END

Hoe je die lijst terug laat “inklappen” als je niet geselecteerd / geklikt hebt, heb ik niet gevonden.
(misschien met de _leave methode?)