Valse echo eet letter op bij invoer en weergave

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 …

Gambas 3 (en 2) zoeken voor OpenSUSE 12.1

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).

opensuse install gambas
Je komt op een soort Package Search, waar je kan kiezen uit Gambas 2 en 3 voor verschillende versies van openSUSE.

  • Versie 3 is net uit: “3.0.0.3”

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.

  • Versie 2-2.23 is de (laatste?) stabiele versie van de 2.x tak (voor KDE3), terwijl de huidige distributies aan KDE4 toe zijn. (Bv mijn laatste installatie op openSUSE 11.3 was versie 2-2.21)

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!

Afgeleide klasse van Listbox, vanuit code het object maken/instantiëren en gebruiken in een VBox

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:

  • Hoe maak ik een klasse die afgeleid is van een bestaande (Listbox)?
  • Hoe maak ik de objecten van die klasse vanuit code; “on the run”?
  • Hoe kan ik de extra mogelijkheden programmeren?
  • Hoe bereik ik de bestaande mogelijkheden van de ouder-klasse Listbox?

Eerste poging:
Continue reading

Gambas 1 + 2 + 3 op Fedora 16

Proficiat voor Fedora 16: Bij deze distributie is in het package management (install/remove software, zoekveld “gambas”) een uitgebreide keuze aanwezig:

  • Gambas 3 (2.99.5) 2.99.6 na een online update op 6/1/2012
  • Gambas 2 (2.23.1)
  • Gambas 1 (1.0.19)

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)

Gordijn: Een HSplit om twee GridViews te schalen zoals in een spreadsheet

Doel:
Het scherm is in twee verdeeld: links en rechts een rooster met gegevens, ongeveer er uitziend als een rekenblad/spreadsheet.

De gegevens aan de linkse kant wil je altijd zien omdat ze vaste titels en gegevens van de rij bevatten, bv de naam van een persoon (naam, voornaam, geb.datum, in dienst datum), waarvan in de volgende kolommen gegevens te zien zijn, bv aanwezigheden in een maand.

Van het linkse rooster is de eerste kolom meestal genoeg, de andere gegevens zijn “verborgen” achter de data van het rechtse rooster. Maar af en toe wil je toch de andere gegevens raadplegen, bv even naar de geboortedatum kijken, en wil je het rooster wat breder maken. Het lijkt alsof je een gordijn opzijschuift.

Er zijn meer kolommen met gegevens dan het scherm breed is, dus het rechtse rooster kan horizontaal scrollen. Er zijn ook meer rijen dan het scherm kan weergeven, dus beide roosters scrollen ook vertikaal.

Je hebt dus twee gridviews nodig: GridView1 links en GridView2 rechts.
Met de HSplit kan je horizontaal een “schuiver” krijgen om twee elementen met een middengrip groter/kleiner te maken, horizontaal in dit geval. Maar om dat te kunnen is er een “hoger” element nodig, dat de twee gridviews omvat, en van waaruit de Split kan werken, hier een HBox.

Gebruik van HSplit met GridViews

In de IDE rechts bij eigenschappen (properties), tabblad “hierarchy” krijg je dan deze structuur (zie afbeelding).

Het vervelende is dat de twee grids hun eigen scrolbars hebben, en niet alleen horizontaal maar ook vertikaal afzonderlijk scrollen. Dan klopt de horizontale lijn van de gegevens niet meer.

Daar kan je wel manueel en mouw aan passen; bv het weergeven van log gegevens, linkse grid de titel of naam van een logitem, rechtse grid de gegevens of data die gelogd en weergegeven worden.

Als je in het linkse “names” grid naar beneden scrolt moet het rechtse data-grid meescrollen:

PUBLIC SUB grvwLogNames_Scroll()

  grvwLogData.ScrollY = grvwLogNames.ScrollY

END

En omgekeeerd ook natuurlijk; als je in de data scrolt moeten de namen meescrollen:

PUBLIC SUB grvwLogData_Scroll()

  grvwLogDataNames.ScrollY = grvwLogData.ScrollY

END

Bovendien is het handig dat een klik op het rechtse grid ook “werkt”, dwz eigenlijk hetzelfde doet als een klik op het linkse grid.

PUBLIC SUB grvwLogData_Click()

  grvwLogNames.Row = grvwLogData.Row
  grvwLogNames_Click

END

Gambas2 en Gambas3 op Fedora 15 – KDE

Ik gebruik een vers van DVD geïnstalleerde Fedora 15 (zonder updates) in KDE uitvoering.

In principe* kunnen Gambas2 en Gambas3 perfect naast elkaar draaien (* gelezen op de gambas mailinglist).

Als test selecteer ik de Gambas3 development environment met alle beschikbare onderdelen; ik klikte ze allemaal individueel aan om zeker alles te hebben.

Er werden automatisch een aantal bijkomende compenenten geselecteerd, bevestigd.

Ik installeer daarna ook Gambas2 bij, om eens te kijken of het conflicten geeft. Ook hier een aantal bijkomende packages voorgesteld, die ik bevestig (waaronder kde3 libs).

Na een paar keer net te lang wachten was ik toch eens op tijd voor het wachtwoord maar liep de installatie toch niet verder, dus ik sloot software installatie en startte het terug op.

Ik zoek op gambas2, krijg een lijst met alle gambas2 componenten. Zoals gezegd werkt CTRL-A niet (select all), en moet ieder pakket afzonderlijk aangeklikt worden. Ik zoek naar een verwijzing naar het complete pakket, of de IDE, dan wordt zoveel mogelijk mee geïnstalleerd: Gambas IDE, the complete gambas development environment.
Ik krijg een foutmelding dat een component dezelfde functionaliteit levert als een eerder geinstalleerde (nl bij Gambas3), en ik kan niet “skip” of “ignore” doen, alleen “ok”, wat eenvoudigweg afbreekt.

Ik verwijder de gambas3 scripter (die verdacht werd oorzaak te zijn van het overlappend pakket), en installeer daarna de gambas2 IDE (complete).

Gambas2 Examples en Gambas2 help worden niet automatisch mee-geïnstalleerd, selecteer apart en installeer.

Dan is het tijd voor een poging om de scripter van gambas3 terug te installeren: dat lukt niet (dezelfde foutmelding van overlapping). Misschien bestaat er nog een command-line manier om de installatie alsnog te forceren… mijn mijn experimentijd was om.

In het menu, onder “development” zijn nu zowel Gambas 2 (versie 2.23) als versie 3 (3.0 alfa; versienummer 2.99.5 – use at your own risk!) te starten.

Mail sturen vanuit Gambas

MailFromGambas Kies component “gb.net.smtp” in Project/Properties/Components.
Je krijgt dan beschikking over een smtp opject met volgende eigenschappen en methodes:

gb.net.smtp
 SmtpClient
   Add
   Alternative
   Bcc
   Cc
   From
   Host
   Port
   Send
   Subject
   To

De meeste eigenschappen kan je gewoon een tekstwaarde toewijzen, bv .Host = "..."
De lijst van de bestemmelingen wordt gegeven door de string .To.
Om een bestemmeling toe te voegen moet je To.Add("..") gebruiken, bv in een loop per adres dat je wil toevoegen.
Voor de inhoud van de mail .Add("..")
Attachments zijn halvelings voorzien maar lijken in 2.x versies (<2.21) niet altijd te werken (alleen te werken voor pure tekst).
Attachments hebben een type: IANN
Zie ook de documentatie van de gb.net.smtp module.

Een voorbeeld van code (die bij het schermvoorbeeld hoort):
Continue reading

Gambas in OpenSuse 11.1

Ik heb al een repository gevonden in de gbvalor reeks:

http://download.opensuse.org/repositories/home:/gbvalor/openSUSE_11.1/i586/

Toevoegen in het pakketbeheer (repository) in Yast2: in 1 keer plakken werkte niet (mogelijk vanwege de : in de url) dus opdelen ongeveer zo:

  • protocol http
  • server download.opensuse.org
  • directory repositories/home:/gbvalor/openSUSE_11.1/i586/

Bevestig de digitale sleutel van dit repository.

Zoeken naar software in Yast:

Zoek : “gambas2”

Een hele lijst met gambas2 onderdelen verschijnt. Klik rechts, select all.

Installeer; bevestig de afhankelijkheden (dependencies).

Resultaat:
Software menu, Development, gambas2 start Gambas 2.14

Update mei 2010:
* Aangezien dit de laatste openSuse versie is met de KDE 3.5 zou je voor deze versie kunnen kiezen, bv door een installatie van een net-install iso die je alsnog afhaalt van de opensuse site.
Als je na installatie in de repositories de “openSuse-Education” repository kiest, krijg je gambas versie 2.13 geïnstalleerd.

* Recenter: gbvalor
Ofwel de gbvalor repository toevoegen die ondertussen gambas versie 2.18 heeft:
http://download.opensuse.org/repositories/home:/gbvalor/openSUSE_11.1
en import de key.
Software management, zoek “gambas2”, de-installeer eventueel oudere versies; selecteer gambas2 nieuwe versie.

Volgorde tabs wijzigen in tabstrip?

TabStrip
Veronderstel dat je een tabstrip in elkaar stak zoals op de afbeelding. Maar nu is er een probleem; je wil dat gebruikers terechtkomen in de “algemene” tabstrip General. Helaas staat die achteraan, en de eerste wordt geopend.

  • Klik de “properties” kant van het scherm open (rechts) als dat nog niet gebeurd is. Klik bovenaan op Hierarchy. Daar zie je de onderdelen apart staan. Helaas zijn ze niet te selecteren om de volgorde te veranderen…
  • Ook klikken en slepen in de GUI gaat niet.

Oplossing gevonden:

Muiscursor boven het tabblad, rechtsklik; kies “Move tab”: “first” / “previous” / “next” / “last”, …Move First