Grafische Segmenten - <redraw segname>

Algemene discussies en vragen omtrent Liberty BASIC programma's. Stuur zoveel mogelijk delen van listings (snippets) in als je hulp wilt.

Moderators: anthonio, Abcott

Grafische Segmenten - <redraw segname>

Berichtdoor glpape » ma mei 02, 2011 3:22 pm

Ik heb hier een voorbeeld dat 8 segmenten cre-eert, ze dan verbergt en dan één voor één weer op het scherm zet.

Code: Selecteer alles
REM  01052011  This version deals with redrawing specified segments only.
'    Without  <#WG "flush SegZero">  SegRed is het hele initiele venster, met de rode bal;
'       met deze regel is het alleen de graphics sinds de laatste flush, i.e. alleen de rode bal.

 10 nomainwin
    call SetWdwC 0, 0, 350, 550
    open "" for graphics as #WG
    #WG "trapclose [qq]"

'20 #WG "size 1; down; set -10 -10"                       ' without this "drawing" it also works !
    #WG "flush SegZero"                                   ' this line is necessary

 30 #WG "color red; size 36; down; set 120 50"
    #WG "flush SegRed"

 40 #WG "color lightgray; size 36; down; set 130 110"
    #WG "flush SegGray"

 50 #WG "color green; size 36; down; set 140 170"
    #WG "flush SegGreen"

 60 #WG "color blue; size 36; down; set 150 230"
    #WG "flush SegBlue"

 70 #WG "color yellow; size 40; down; set 160 300"
    #WG "flush SegYllw"

 80 #WG "color black; size 36; down; set 170 370"
    #WG "flush SegBlack"

 90 #WG "color pink; size 36; down; set 180 440"
    #WG "flush SegPink"

100 call Pause 1500
'   #WG "redraw SegZero"                                  ' this line to clear the screen
    #WG "place 10 10; size 1; boxfilled 320 490"          ' alternatief voor  < "redraw SegZero" >

110 call Pause 1000
    #WG "redraw SegBlue"
    #WG "redraw SegPurple"                                ' niet-bestaand segment - geen probleem

120 call Pause 1000
    #WG "redraw SegGray"
'   wait

130 call Pause 1000
    #WG "redraw SegGreen; redraw SegBlack"

140 call Pause 1000
    #WG "redraw SegRed"
'   #WG "redraw "; SegRed                                 ' volgens helpfile - werkt niet !


150 call Pause 1000
    #WG "redraw SegPink; redraw SegYllw"

160 wait
    [qq]
    close #WG  :  end

169
    sub SetWdwC a,b,c,d                          ' Centers window with 0 for both first params
    UpperLeftX = ((DisplayWidth - c)/2) + a      ' Adjust horiz, neg values move window left
    UpperLeftY = ((DisplayHeight - d)/2) + b     ' Adjust vert, neg values move window up
    WindowWidth = c
    WindowHeight = d
    end sub
179
    sub Pause pp                                 ' pause in milliseconds
    tt = time$("ms") : dd = date$("days")
    while  time$("ms") + 3600*24*1000*k  < tt + pp
    k = date$("days") - dd
    wend
    end sub



Eén regel in de code is belangrijker dan alle andere, denk ik : regel [21]. Doet 2 dingen :
= slaat het lege grafisch venster op als segment waarmee je later het venster kunt schoonvegen [101];
= maakt dat SegRed alleen de rode figuur opslaat, niet ook de rest van het lege venster.
Met een < REM > voor regel [21] gedraagt SegRed zich heel anders.

Liberty heeft geen direct commando om individuele segmenten van het scherm ter verwijderen. < delsegment; redraw > doen dat wel maar wissen ook het segment uit het geheugen. We behelpen ons met de code in [101] of [102]. Of je moet items opslaan in bitmaps.

Een fout in de helpfile in regel [142].
Met getallen werkt alles : < #g "redraw "; nummer > of < #g "redraw nummer" > . Makkelijk, of juist verwarrend ?
Let wel op de spatie achter redraw in de eerste versie.

< redraw > en < delsegment > voor niet-bestaande segmenten geven geen error [112].

En nog iets :
1. activeer < wait > in [122],
2. verplaats het venster naar buiten het scherm en weer terug : en Wat Zien We Nu ??
Idem als je een ander venster over je grafisch venster opent. Als je er erg mee zit en het enthousiasme hebt kun je het venster Always-on-Top maken en zo dat het niet kan worden verplaatst, met API's of stylebits. Of bitmaps.

Vr groet,

George Pape.
glpape
 
Berichten: 83
Geregistreerd: za nov 08, 2008 5:32 pm

Keer terug naar Liberty BASIC Code

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron