Programmeren in REXX/Een beetje OORexx: verschil tussen versies
Verwijderde inhoud Toegevoegde inhoud
kGeen bewerkingssamenvatting |
Verbeteringen tekst - navigatiesjabloon |
||
Regel 4:
In dit hoofdstuk behandelen we
*het maken van een extern functiepakket
*het
Verdere informatie kan gevonden worden in het boek '''OODialog Reference''' dat na installatie als bestand ''oodialog.pdf'' terug te vinden is in map ''c:\Program Files\ooRexx\doc\''.
=Extern functiepakket maken=
Met OORexx is het wel mogelijk een extern functiepakket te maken dat niet minder performant is dan een interne functie. Het grootste voordeel is natuurlijk dat we de functies niet steeds moeten toevoegen in elke programma dat er gebruik
Een functiepakket "MijnRoutines.rex" ziet er dan bijvoorbeeld als volgt uit:
'''::ROUTINE
/*+---------------------------------------------------------------+*/
if arg(3)='' then pad=' '; else pad=arg(3)▼
/*| CHOP(string,lengte<,string2>) |*/
return left(arg(1),arg(2),pad)▼
/*| kapt een string af aan bepaalde lengte |*/
'''::ROUTINE RECHTS PUBLIC'''▼
/*| "string2" wordt er desgevallend achtergplakt |*/
if arg(3)='' then pad=' '; else pad=arg(3)▼
/*+---------------------------------------------------------------+*/
return right(arg(1),arg(2),arg(3))▼
call trace 'Off'
if length(arg(1))<=arg(2) then return arg(1)
select
when arg()=3 then return left(arg(1),arg(2)-length(arg(3)))||arg(3)
end
/*+---------------------------------------------------------------+*/
/*| PAD(string,lengte<,pad<,L|R>>) |*/
/*| maakt een string van opgegeven lengte |*/
/*+---------------------------------------------------------------+*/
call trace 'Off'
if length(arg(1))>=arg(2) then return arg(1)
select
when arg()=2 then return left(arg(1),arg(2))
end
Het oproepend programma kan er dan als volgt gebruik van maken:
say chop("Dit is een lange tekst",10,'...') «Dit is een...»
say pad("Een tekst",18,'-') «Een tekst---------»
say pad("Een tekst",18,'-','R') «---------Een tekst»
'''::REQUIRES "D:\RexxProgrammas\MijnRoutines.rex"'''
<!------------------------------------------------------------>
=Grafische schermpjes=
Regel 39 ⟶ 59:
'''InfoMessage'''(bericht)
Een pop-up schermpje verschijnt en toont de opgegeven ''tekst''. Het schermpje heeft een OK-knop. De titel is "Information" en er is een icoontje dat duidt op een bericht.
call InfoMessage("
[[File:InfoMessage.jpg|Voorbeeld]]
===ErrorMessage===
Zoals een InfoMessage functie, maar met als titel "Error" en een icoontje dat op een fout wijst.
Regel 46 ⟶ 67:
'''YesNoMessage'''(bericht[,knop])
Het antwoord is 1 als "Yes" is gekozen, anders is het 0. Bijvoorbeeld:
if \YesNoMessage("Wil je hiermee verder gaan ?"
[[File:YesNoMessage.jpg|Voorbeeld]]
===GetScreenSize===
'''GetScreenSize'''()
Regel 75 ⟶ 97:
Voorbeeld:
bestanden=FileNameDialog("D:\RexxProgrammas\*.rex",,"REXX programma's (*.rex)"'0'x"*.REX",1,,,1,"#")
Later bespreken we een uitgebreider voorbeeld.
===SleepMS===
Deze functie stopt de uitvoering voor een aantal milliseconden.
Regel 125 ⟶ 148:
Voorbeeld:
bestanden=FileNameDialog("D:\RexxProgrammas\*.rex",,"REXX programma's (*.rex)"'0'x"*.REX","LOAD",,,"MULTI","#")
if bestanden<>
if pos("#",bestanten)=0 then do
parse var bestanden pad "#" bestanden▼
end;
do i=1 while bestanden<>''
bestand.i=pad"\"naam
end
end
▲ bestand.0=i-1
end; else bestand.0=0
===InputBox - een waarde opvragen===
Regel 138 ⟶ 165:
naam=InputBox("Hoe heet je ?","Een antwoord graag")
if naam<>"" then say "Je naam is" naam
[[File:InputBox.jpg|Voorbeeld]]
===PasswordBox - een paswoord vragen===
'''PasswordBox'''(vraag,titel[,standaardwaarde][,breedte])
Regel 152 ⟶ 180:
lab.1='Type fotobestanden' ; lab.2='Te analyseren disken'
lab.3='Resultaatsbestand'
addr.101=
dlg = '''.MultiInputBox~new'''("Geef nodige parameters",,
"Parameters", lab., addr.,250)
Regel 161 ⟶ 188:
end; else call exit 28,'Programma onderbroken'
Merk op dat we nu een methode moeten initialiseren en ook uitvoeren. Dit is OORexx schrijfwijze. De antwoorden van de gebruiker komen in velden die de genoemd zijn naar de labels, maar zonder spaties. Ze zijn niet hoofdlettergevoelig, maar moeten wel exact juist zijn.
[[File:MultiInputBox1.jpg|Voorbeeld]]
<br>Er is een klein schoonheidsfoutje op dit schermpje. De tekst bij het tweede veld is gesplitst en gedeeltelijk niet leesbaar. De oplossing is om de allereerste label een breedte te geven die groot genoeg is voor de volgende labels. We voegen daarom voldoende spaties toe en bekomen:
Een alternatieve manier om bovenstaande te schrijven is de volgende:▼
[[File:MultiInputBox2.jpg|Voorbeeld]]
▲<br>Een alternatieve manier om bovenstaande te schrijven is de volgende:
velden="fototype drives outputfile"
res='''MultiInputBox'''("Geef de nodige parameters",,
"Parameters",,
.array~of("Type fotobestanden ","Te analyseren disken","Resultaatsbestand"),,
.array~of("jpg","D E","CSV"),250)
if res \= .Nil then
Regel 181 ⟶ 210:
.array~off("Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag"),,
100,100,"Woensdag")
===MultiListChoice - meerdere
'''MultiListChoice'''(vraag,titel,.array~of(keuze1,keuze2,...[,breedte][,hoogte][,standaardkeuzes])
Dit is een variatie op de ListChoice methode. De standaardkeuzes zijn een lijst van getallen die overeenkomen met de posities in de lijst van mogelijke keuzes.
Regel 192 ⟶ 221:
say "Mogelijke afspraakdag=" dag
end
[[File:MultiListChoice.jpg|Voorbeeld]]
===CheckList - een keuze in een lijst afvlaggen===
'''CheckList'''(vraag,titel,.array~of(keuze1,keuze2,...)[,breedte][,max_in_kolom])
Regel 200 ⟶ 230:
afspraken=CheckList("Welke dagen kan je komen ?","Afspraken",dagen)
if afspraken <> .Nil then do i = 1 to afspraken~items
if afspraken[i] then say "Je kan op"
end
[[File:CheckList.jpg|Voorbeeld]]
<br>Nogmaals, merk op dat we hier werkelijk met arrays werken, en niet met stems, dit is enkel mogelijk met OORexx.
===SingleSelection - unieke keuze uit een lijst===
'''SingleSelection'''(tekst,titel,array~of(keuzes),[breedte][,max_in_kolom])
Regel 210 ⟶ 242:
maand=SingleSelection("Kies je maand","Geboren in",maanden,12,,6)
say "Je bent dus geboren in de maand" maanden[maand]
{{Sjabloon:Navigatie
|Boek =Programmeren in REXX
|vorige =Bestanden beheren
|huidige =Een beetje OORexx
|volgende=Nog voorbeelden}}
{{sub}}
|