|
Dit document beschrijft de progress
class waarover het artikel Thermometertje aan de wand, vertel mij eens even de tussenstand,
gepubliceerd in SDGN-Magazine nr. 60, werd geschreven.
De documentatie van de thermometerCopyright Viafox Eerst
zal een formobject moeten worden gecreëerd, op basis van de formclass frm_progress, met behulp van de
createobject() functie. Bijvoorbeeld: local
loProgress loProgress =
createobject( 'frm_progress' ) * * Alhier diverse declaraties. * Zie verderop. * loProgress.show() Zonder
declaraties oogt het venster leeg. Er staan alleen 4 containers op en die
hebben bovendien nog de minimum omvang. De containers (ook wel secties genoemd)
zijn weer de thuisbasis voor de diverse soorten objecten die aan het venster
toegevoegd kunnen worden. De containers zullen altijd onder elkaar, in een
specifieke volgorde, worden gehouden. Die volgorde is ingegeven door mijn
ideëen over wat gebruikers verwachten van de graphical user interface. De 4
secties/containers:
Deze
secties worden hieronder nader uitgewerkt. Sectie 1: Text
Op
de volgende wijze kunnen aan de 'text' sectie een of meer teksten worden
toegevoegd. (Normaal gesproken zal één tekst volstaan.) local array
loText[3] loText[1] =
loProgress.addText('tekst 1') loText[2] =
loProgress.addText('tekst 2',2) loText[3] =
loProgress.addText('tekst 3') Standaard
wordt ruimte voor één regel tekst gereserveerd. In het voorbeeld van de 2e
declaratie geldt dat er 2 regels voor de tekst worden gereserveerd. De programmeur
zal zelf moeten inschatten hoeveel regels de tekst behoeft. De tekst zal
worden omkaderd. De
teksten zijn te manipuleren: loText[1].text(
'Andere tekst' ) loText[1].edtText.<property>
= <value> loText[1].edtText.<method()> In
de eerste regel wordt de tekst gewoon vervangen. De tweede en derde regel geven
aan dat diverse standaard editbox manipulaties mogelijk zijn. Ook zijn de tekstblokken te verwijderen, volgens het LIFO-principe (last-in, first-out): loProgress.removeText() Sectie 2: Progress
Items
Op
de volgende wijze kunnen aan de 'progress items' sectie meerdere 'progress
items' worden toegevoegd: local array
loItem[3] loItem[1] =
loProgress.addProgressItem('tekst 1') loItem[2] =
loProgress.addProgressItem('tekst 2', 2 ) loItem[3] = loProgress.addProgressItem('tekst
3') Standaard
wordt ruimte voor één regel itemtekst gereserveerd. In het voorbeeld van de 2e
declaratie geldt dat er 2 regels voor de itemtekst worden gereserveerd. De
programmeur zal zelf moeten inschatten hoeveel regels de itemtekst behoeft. De
items zijn te manipuleren:
Aanvankelijk
beginnen de items met de layout 'nog te doen'. Die layout is te herstellen met
de aanroep: loItem[3].soon() Bij
iedere status hoort een specifiek ikoon. Ook
zijn de items te verwijderen, volgens het LIFO-principe (last-in, first-out): loProgress.removeProgressItem() Sectie 3: Progress
Bars
Op
de volgende wijze kunnen aan de 'progress bars' sectie meerdere 'progress bars'
worden toegevoegd: local array
loBar[3] loBar[1] =
loProgress.addProgressBar() loBar[2] =
loProgress.addProgressBar() loBar[3] =
loProgress.addProgressBar() De
bars zijn te manipuleren:
loBar[1].update(
<procent>, <tekst> ) De
bar is te resetten: loBar[1].reset() Ook
zijn de bars te verwijderen, volgens het LIFO-principe (last-in, first-out): loProgress.removeProgressBar() Sectie 4: Break
Op
de volgende wijze kan aan de 'break' sectie een 'allow break' worden
toegevoegd: local loBreak loBreak =
loProgress.addAllowBreak()
Vanaf
dat moment is te controleren of de gebruiker het proces wenst te onderbreken: if
loProgress.escaped() * breek
proces af endif De
'allow break' is uit te schakelen. Dat kan handig zijn als een gedeelte van het
proces geen 'break' mag hebben. loThermo.lAllowBreak
= .F. Ook
is de 'allow break' weer te verwijderen: loProgress.removeAllowBreak() Vanaf
dat moment zal de thermometer niet meer controleren op onderbreken. Breedte
Standaard
kent het venster een bepaalde breedte. Soms zijn er teveel teksten, items,
etcetera, waardoor het geheel hoger is dan de monitor kan tonen. In dat geval
kan met de volgende declaratie de breedte worden aangepast, waarbij nValue een
waarde in pixels is: loProgress.formwidth(
<nValue> ) Hoewel
de Formwidth method ook tussentijds kan worden aangeroepen, is het verstandiger
de declaratie snel na de createobject() te verrichten. Clickable Areas
De
thermometer kent twee gebieden die met de muis aanklikbaar zijn, de titelbalk
en de Onderbrekenknop. Door
de linkermuisknop ingedrukt te houden op de titelbalk en vervolgens te slepen
kan de gebruiker de form verplaatsen. De
Onderbrekenknop is alleen beschikbaar als een 'allow break' is toegevoegd aan
de 'break' sectie. Aanklikken van de Onderbrekenknop heeft hetzelfde effect als
drukken op de ESC-knop. De caption van de nderbrekenknop is instelbaar: loBreak._breakbutton.caption
= <text> Wel
is het zo dat de class alleen kan controleren op de muispositie en -klik als
het even de focus heeft gekregen door de aanroep loProgress.escaped() of
loProgress.checkMouse(). Die laatste aanroep is nodig als het om een proces
gaat waar een 'allow break' - en dus een loProgress.Escaped() - ongewenst is. Wanneer
de class merkt dat de mousepointer boven een 'clickable area' is, dan zal er
een beperkt aantal seconden worden gewacht op een muisklik. Mocht die muisklik
niet komen, dan zal de focus weer teruggegeven worden aan het proces. Bij de
volgende focus wordt er door de thermometerclass niet opnieuw een aantal
seconden gewacht als de mousepointer dan nog steeds op precies dezelfde plaats
staat. De wachttijd (default is 2 seconden) is instelbaar met een property: loProgress.nWait4Click
= <value>
|