keesb
New Member
Posts: 22
|
Post by keesb on Oct 10, 2024 16:47:18 GMT
Bij deze in de bijlage een alternatief voor het "Pie" en "Piefilled"-commando in LB. De originele LB commando's produceren nogal vervormde taartpunten en zijn daardoor onbruikbaar. De essentiële routines zijn pie2 en Floodfill, let wel op correct gebruik van GetDC en ReleaseDC. De opvulkleur kan natuurlijk ook in de code worden opgegeven zonder ColorDialog. Speel ook eens met de 2 verschillende vulstijlen, zie toelichting aan het einde van de file. Het commentaar spreekt hopelijk voor zichzelf en anders hoor ik dat graag.
|
|
|
Post by Marco Kurvers on Oct 11, 2024 12:54:33 GMT
Kees, ik heb twee dingen voor je.
Omdat je "flush" uitvoert, moet je in de label, waar je het venster sluit, eerst "discard" aanroepen om het geflushte geheugen vrij te geven.
De code waar je de drie waarden r g b uit de COLORDIALOG wilt halen, kan met één regel.
Jouw code:
colordialog "",FClr$ ' FClr$ kan bv "255 0 0 red" zijn print FClr$ if FClr$<>"" then A$="" for i=1 to len(FClr$) ch$=mid$(FClr$,i,1) if ((ch$>="0") and (ch$<="9")) or (ch$=" ") then A$=A$+ch$ next FClr$=A$ goto [Again] end if goto [WaitLoop]
kun je vervangen door:
colordialog "", FClr$ if FClr$ = "" then goto [WaitLoop] FClr$ = left$(FClr$, instr(FClr$, afterlast$(FClr$, " ")) - 1) goto [Again]
De FOR lus en de controle zijn op deze manier niet nodig.
Kijk maar eens naar dit test programmaatje:
colordialog "", FClr$ FClr$ = left$(FClr$, instr(FClr$, afterlast$(FClr$, " ")) - 1) print FClr$
|
|
|
Post by Marco Kurvers on Oct 11, 2024 13:50:06 GMT
Sterker nog, mijn regel hoeft eigenlijk helemaal niet. Wat je kiest, wordt gewoon door "backcolor" geaccepteerd. Dat heb ik nu ontdekt. Mijn regel veroorzaakt een fout als er maar één code is, zoals de "darkred". Heeft de FClr$ de vierde waarde erbij, zoals "red", dan mag dat er gewoon bij.
Een regel als:
#w "backcolor 128 0 0 darkred"
Wordt geaccepteerd.
Je kunt dus mijn manier als niet verzonden beschouwen, maar je ziet nu dat ook jouw controle met de FOR lus helemaal niet nodig is.
Voorbeeld met de listing die ik woensdag liet zien, maar nu met de keuze van de colordialog.
WindowWidth = 500 WindowHeight = 500 OPEN "GetBMP en DrawBMP" FOR GRAPHICS AS #w #w "trapclose Quit" #w "down" #w "fill brown" #w "color red" colordialog "", FClr$ if FClr$ = "" then FClr$ = "black" print FClr$ #w "backcolor "; FClr$ #w "place 50 50" #w "circlefilled 50" #w "getbmp circle 0 0 100 100" #w "drawbmp circle 300 300" #w "flush" WAIT SUB Quit handle$ UNLOADBMP "circle" #w "discard" CLOSE #w END END SUB
Het enige wat in jouw code nu staat is dit:
colordialog "",FClr$ ' FClr$ kan bv "255 0 0 red" zijn print FClr$ if FClr$ = "" then goto [WaitLoop] goto [Again]
Het werkt. Probeer maar eens uit. Zet de nomainwin in commentaar zodat je de kleur ziet verschijnen.
|
|
|
Post by frizhd on Oct 12, 2024 7:12:37 GMT
Bij deze in de bijlage een alternatief voor het "Pie" en "Piefilled"-commando in LB. De originele LB commando's produceren nogal vervormde taartpunten en zijn daardoor onbruikbaar. De essentiële routines zijn pie2 en Floodfill, let wel op correct gebruik van GetDC en ReleaseDC. De opvulkleur kan natuurlijk ook in de code worden opgegeven zonder ColorDialog. Speel ook eens met de 2 verschillende vulstijlen, zie toelichting aan het einde van de file. Het commentaar spreekt hopelijk voor zichzelf en anders hoor ik dat graag.
|
|
|
Post by frizhd on Oct 12, 2024 7:15:09 GMT
Meesterlijk Kees, dit doet het hart van een leerling sneller kloppen. Ik veroorloof mij een summier commentaar. Zinvolle documentatie, zowel voor de verwijzing van o.a. de ellips (wiskunde) als floodflill (programmeren). Declaratie en gebruik van variabelen helder, efficiënt en gemakkelijk leesbaar, mooie schermindeling en gebruik van knoppen. Correspondentie tussen scherm en vindbaarheid in de list. Flow goed volgbaar van hoofdscherm en diens routines. Gebruik van labels, gosub, subs, functies etc, alles mooi geordend, gestructureerd, dankzij het heldere brein van een programmeur, die een fraaie lay-out van de code in een consequente eigen logische stijl beheerst. Een bruikbaar alternatief voor de PIE van LB. En het overwegend gebruik van Engels? Juist, want ook een publicatie van dit programma in het internationale forum van LB is op zijn plaats. Er valt veel van te leren. Je hebt mijns inziens een inspirerend voorbeeld neergezet en discussie over details zal beginners en gevorderden verder brengen.
|
|
keesb
New Member
Posts: 22
|
Post by keesb on Oct 12, 2024 10:29:18 GMT
Bijna bezwijkend onder de ongekende superlatieven en haast bovenmenselijke eigenschappen die mij door Friz worden toegedicht kan ik alleen maar met het schaamrood op de kaken stamelen dat ik het "discard"-statement vergeten ben terwijl ik afgelopen Woensdag nog enorm zat te hameren op het voorkomen van geheugenlekken.
"Les extrèmes se touchent" denk ik dan maar met excuses voor deze treffende maar helaas niet-Nederlandse uitdrukking, ondertussen constaterend dat in het extreme geval van een taartpunt tussen 0 tot 360 graden de uitersten elkaar inderdaad ook raken. Voor de liefhebbers van verwijzingen naar deze gedachte/constatering vanuit een meer filosofisch/historisch perspectief, zie Aristoteles in zijn Eudemian Ethics (https://en.wikipedia.org/wiki/Eudemian_Ethics) en later Blaise Pascal in zijn "Pensées" (https://nl.wikipedia.org/wiki/Pens%C3%A9es).
|
|