BUTTON

BUTTON #handle.ext, "label", returnVar, corner, x, y {, width, height}

Beschrijving:
Dit statement voegt een knop toe in een venster.
De knop heeft een opschrift (het woordje label (Engels voor etiket)).
De knop verschijnt zodra het venster wordt geopend.
Het venster wordt natuurlijk met het OPEN commando gecreerd.
De breedte en hoogteparameters van de knop zijn optioneel.

Gebruik:
Het BUTTON statement moet worden geplaatst vr het statement voor het te OPENEN venster.

Hier is een korte beschrijving voor elke parameter zoals hierboven vermeld:

#handle.ext
Het #handle gedeelte van de handle-naam van de knop moet gelijk aan het
handle-naam gedeelte van het venster waarin de knop moet verschijnen.
De knop mag daarnaast als optie tevens een unieke extensie achter het gelijke handle-naam gedeelte hebben.
De knop zal tijdens de uitvoering van het programma bevelen kunnen ontvangen.
De extensie begint met een punt en mag daarna uit een willekeurige
reeks alfanumerieke karakters bestaan. Elke knop uit een venster waarvan
de handle #win is zal dus #win als eerste deel van zijn eigen handle-naam hebben.

 

Voorbeelden van knop handles zijn:
#win (geen extensie)
#win.okay
#win.1
#win.cancel
#win.bmpbutton2

"label"
Deze parameter specificeert het opschrift dat op de knop zal verschijnen.
Het kan als letterlijke (feitelijke) tekst, of als string-variabele worden opgegeven.
Zie string-literals en Variabelen.

returnVar
returnVar dient slechts uit n woord te bestaan waar geen aanhalingstekens omheen staan.
Het mag geen string-variabele zijn. Het moet altijd met een letter beginnen,
maar het mag eveneens cijfers bevatten.

Als returnVar een geldig etiket (label) is, dat betekent dus dat het een woord tussen rechte haakjes is,
dan zal het klikken van de knop een programma sprong naar
het gespecificeerde etiket (label) veroorzaken.
Na het klikken van de knop zal daarna de code die volgt na het label worden uitgevoerd.

Als returnVar de naam van een subroutine is, dan zal die subroutine worden geactiveerd
wanneer de knop wordt geklikt, en de handle-naam van de knop zal in de subroutine
als argument worden overgenomen.
Zie ook: Controls en Events

Als returnVar niet een geldig etiket of subroutinenaam is, dan komt de waarde van returnVar
beschikbaar om worden gelezen wanneer het programma bij een inputvar$ statement wordt gestopt.
De waarde zal in de aldaar gespecificeerde variabele worden geplaatst.
Een voorbeeld verschijnt hieronder.

corner (hoekpunt)
Deze parameter moet n van het volgende zijn:
UL, UR, LL, of LR.
Het specificeert welk hoekpunt van het venster als anker (aangrijppunt)
voor de knop dienst doet.
Bijvoorbeeld, als LR wordt gebruikt, dan zal de knop met rechter beneden hoekpunt worden gepositioneerd.
Als de venstergrootte tijdens uitvoering van het programma wordt veranderd,
dan zal de knop altijd op dezelfde positie verschijnen,
in relatie tot het hoekpunt dat als anker werd gespecificeerd.

UL = linksboven (Upper Left)
UR = rechtsboven (Upper Right)
LL = linksonder (Lower Left)
LR = rechtsonder (lower Right)

posx, posy
Deze parameters geven de plaats van de knop ten opzichte van het anker hoekpunt.
posx en posy worden uitgedrukt in pixels.
Waarden kleiner dan n kunnen ook gebruikt worden voor posx en posy.
Bijvoorbeeld, als de ankerhoekpunt UL is en posx is .9 en posy is .9,
dan zal de knop geplaatst worden op 9/10 van de afstand van het venster in
zowel x als y richting vanaf de linkerbovenhoek.
Deze methode om knoppen te plaatsen of verplaatsen positioneert ze
in relatie tot de grootte van het venster, in plaats van de eerder genoemde
vorm van verankeren via een gespecificeerd hoekpunt.

Breedte, Hoogte {, width, height}
Deze optionele parameters specificeren hoe breed en hoog de knop zal zijn, gemeten in pixel.
Als deze parameters niet in statement van de BUTTON (KNOP) worden gebruikt,
dan zal Liberty BASIC deze maten zelf kiezen en groot genoeg maken
zodat de grootte van de knop geschikt is om het gespecificeerde opschrift te tonen.

Het detecteren van het indrukken van de knop
Het klikken op de knop wordt gedetecteerd en indien het statement SCAN was gebruikt,
wordt daarnaar gehandeld. Als SCAN niet wordt gebruikt, dan moet de programma uitvoering
met een INPUT worden gestopt of naar een WAIT (wachten) worden geleid,
waarna pas op het indrukken van de knop zal worden gereageerd.

Dit voorbeeld gebruikt een label als handler:
button #main.exit, "Exit", [exitClicked], UL, 10, 10
open "Button Example" for window as #main
[loop]
wait

[exitClicked]
notice "The Exit button was clicked. Goodbye."
close #main
end

Dit voorbeeld gebruikt een subroutine als knop-handler:
button #main.exit, "Exit", exitClicked, UL, 10, 10
open "Button Example" for window as #main

[loop]
wait

sub exitClicked buttonhandle$

notice "The button handle is ";buttonhandle$;" Goodbye."
close #main
end
end sub

Dit voorbeeld geeft een waarde tijdens een input statement:
button #main.ok, "Okay", yes, UL, 10, 10
button #main.cancel, "Cancel", no, UL, 70, 10
open "Use Input Example" for window as #main
#main "trapclose [quit]"
[loop] input answer$
if answer$ = "yes" then notice "You clicked Okay."
if answer$ = "no" then notice "You clicked Cancel."
goto [loop]

[quit]
close #main
end

Default Button
Een venster van type DIALOOG kan een knop met de extensie ".default" bevatten.
Als de gebruiker dan op de ENTER toets duwt terwijl het dialoogvenster geselecteerd is,
dan is het alsof de knop met de extensie "default" is gedrukt en de uitvoering
van het propgramma zal dan bij de [branchLabel] van die knop verdergaan.
In het voorbeeld hieronder, zal het programma naar de [okay] routine aftakken wanneer de gebruiker ENTER drukt.

button #win.default, "Okay",[okay],UL,200,100

open "Test" for dialog as #win

Verandering na LB3:
Elke knop die in een DIALOOG venster geselecteerd is, fungeert als standaard (default) knop.
Als een andere control dan de knoop geselecteerd is,
dan is de knop met de extensie ".default" de defaultknop, als zo een knop bestaat.

Button commando's:

#handle.ext "string"
Dit commando verandert het opschrift van de knop.
De string "string" kan een feitelijke tekst zijn die tussen aanhalingsteken wordt geplaatst,
of een string-variabele zijn.

#handle.ext "!setfocus" Met dit commando kunnen we de knop selecteren.
Dit betekent dat elke toets indruk naar die knop zal worden geleid.

#handle.ext "!locate x y width height"
Dit commando verplaatst de knop in zijn venster. Dit werkt slechts als de knop
(of andere control) binnen een dialoog of binnen een gewoon window type venster wordt geplaatst.
De control zal qua grootte niet worden bijgewerkt en ook voor wat betreft de plaats
niet worden bijgewerkt voordat er een opdracht voor het verversen wordt verzonden naar het venster.
Zie het RESIZE.BAS- voorbeeldprogramma.

#handle.ext "! font facename pointSize"
Deze opdracht verandert het lettertype van de knop in het gespecificeerde lettertype en lettergrootte.
Als de exact gevraagde lettertype en bijbehorende gevraagde lettergrootte niet aanwezig zijn,
dan zal Liberty BASIC proberen om een zo dichtmogelijk gelijkende lettertype en grootte te vinden,
waarbij grootte de voorkeur heeft boven soort.

Er is meer informatie over het specificeren van fonts: Hoe Fonts te specificeren

Voorbeeld:
#handle.ext "! font times_new_roman 10"

#handle.ext"! enable "
Dit zorgt ervoor dat er toegang tot de control is.

#handle.ext "! disable"
Dit maakt de control inactief , de knop wordt licht grijs.

#handle.ext "! show"
Dit zorgt er voor dat de control zichtbaar wordt.

#handle.ext "! hide"
Dit verbergt de control en maakt het onzichtbaar.