Programmeren in REXX/Een beetje OORexx: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
GuyDC (overleg | bijdragen)
kGeen bewerkingssamenvatting
Verbeteringen tekst - navigatiesjabloon
Regel 4:
In dit hoofdstuk behandelen we
*het maken van een extern functiepakket
*het gebruikengebruik van eenvoudige (en enigszins beperkte) grafische schermpjes.
 
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 wilt van wil maken.
 
Een functiepakket "MijnRoutines.rex" ziet er dan bijvoorbeeld als volgt uit:
'''::ROUTINE LINKSCHOP PUBLIC'''
/*+---------------------------------------------------------------+*/
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()=2 then return left(arg(1),arg(2),pad)
when arg()=3 then return left(arg(1),arg(2)-length(arg(3)))||arg(3)
end
'''::ROUTINE RECHTSPAD PUBLIC'''
/*+---------------------------------------------------------------+*/
/*| 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))
when arg()=3 then return rightleft(arg(1),arg(2),arg(3))
ifwhen arg(34)='L' then pad='return '; else pad=left(arg(1),arg(2),arg(3))
ifwhen arg(34)='R' then pad='return '; else pad=right(arg(1),arg(2),arg(3))
end
Het oproepend programma kan er dan als volgt gebruik van maken:
say chop("Dit is een lange tekst",10,'...') &#171;Dit is een...&#187;
say links("Tekst",18)
say pad("Een tekst",18,'-') &#171;Een tekst---------&#187;
say rechts("Tekst",18,'-')
say pad("Een tekst",18,'-','R') &#171;---------Een tekst&#187;
'''::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("DitWelkom isin eende belangrijkwereld berichtvan !REXX")
[[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 ?"),"No") then exit
[[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<>''"" then do
if pos("#",bestanten)=0 then do
parse var bestanden pad "#" bestanden
do i bestand.0=1 while; bestand.1=bestanden<>''
end; parse var bestanden naam '#' bestanden else do
bestand.i=parse var bestanden pad "\#"naam bestanden
do i=1 while bestanden<>''
parse var bestanden padnaam "'#"' bestanden
bestand.i=pad"\"naam
end
bestand.0=i-1
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=fototype"JPG" ; addr.102=drives"C: D:" ; addr.103="D:\Fotolijst.txt"
addr.103=outputfile
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 kiezenkeuzes uit een lijst===
'''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" weekdaysdagen[i] "komen"
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}}
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.