Опубликовано: 2020-05-13 08:00:00
Цифровые часы
Эта программа от автора, называющим себя Quiet Snow. Представляет собой цифровые часы с адаптированной функцией снятия скриншота под SCREEN 12, пользуйтесь на здоровье.
Рассмотрим исходный текст программы:
- DECLARE SUB MAKEBMP (NAMEBMP$)
- DECLARE SUB PREPARE ()
- ' PROTSEDURY PECHATI
- DECLARE SUB DRAWCHAR (X%, Y%, CH%, POZ%, MSHTB!)
- DECLARE SUB DRAWCLOCK (XDR%, YDR%, TM$, MASHTAB!)
- ' MASSIVY
- CONST DATADL = 228
- DIM SHARED SIZES%(1 TO 7), SOST%(9, 1 TO 7), I%, K%
- DIM SHARED X1%(1 TO 7, 1 TO 6), X2%(1 TO 7, 1 TO 6)
- DIM SHARED Y1%(1 TO 7, 1 TO 6), Y2%(1 TO 7, 1 TO 6)
- DIM SHARED PZX%(1 TO 7), PZY%(1 TO 7) ' PAINT ZONE - ZONA ZAKRASKI
- SCREEN 12 ' 640X480X16TSV.
- PREPARE
- ' CHITAYEM RAZMERNOSTI
- FOR I% = 1 TO 7
- READ SIZES%(I%)
- NEXT
- ' CHITAYEM KOORDINATY
- FOR I% = 1 TO 7
- ZX% = 0: ZY% = 0
- FOR K% = 1 TO SIZES%(I%)
- READ X1%(I%, K%), Y1%(I%, K%), X2%(I%, K%), Y2%(I%, K%)
- ZX% = ZX% + X1%(I%, K%) + X2%(I%, K%)
- ZY% = ZY% + Y1%(I%, K%) + Y2%(I%, K%)
- NEXT
- PZX%(I%) = ZX% / (SIZES%(I%) * 2): PZY%(I%) = ZY% / (SIZES%(I%) * 2)
- NEXT
- ' CHITAYEM SOSTOYANIYA
- I% = 0
- DO: READ K%
- IF K% = -1 THEN
- I% = I% + 1
- ELSE
- IF K% <> -2 THEN SOST%(I%, K%) = 1
- END IF
- LOOP UNTIL K% = -2
- DO: KB$ = INKEY$
- G! = TIMER: WHILE G! + .5 < TIMER: WEND
- DRAWCLOCK 100, 250, TIME$, 4
- IF INT(TIMER * 2) AND 1 THEN
- LINE (215, 220)-(225, 230), 2, BF
- LINE (215, 270)-(225, 280), 2, BF
- LINE (394, 220)-(404, 230), 2, BF
- LINE (394, 270)-(404, 280), 2, BF
- ELSE
- LINE (215, 220)-(225, 230), 4, BF
- LINE (215, 270)-(225, 280), 4, BF
- LINE (394, 220)-(404, 230), 4, BF
- LINE (394, 270)-(404, 280), 4, BF
- END IF
- IF KB$ = CHR$(32) THEN MAKEBMP "CLOCK"
- LOOP UNTIL KB$ = CHR$(27)
- END
- ' RAZMERY
- DATA 5,6,5,6,5,6,5
- ' 1 > LEVYY VERKH
- DATA -105,-196,-114,-187
- DATA -105,-196,-57,-148
- DATA -114,-187,-114,-3
- DATA -57,-148,-57,-40
- DATA -114,-3,-57,-40
- ' 2 > VERKH
- DATA -93,-208,-102,-199
- DATA -102,-199,-54,-151
- DATA -93,-208,93,-208
- DATA -54,-151,54,-151
- DATA 93,-208,102,-199
- DATA 102,-199,54,-151
- ' 3 > PRAVYY VERKH
- DATA 105,-196,114,-187
- DATA 105,-196,57,-148
- DATA 114,-187,114,-3
- DATA 57,-148,57,-40
- DATA 57,-40,114,-3
- ' 4 > TSENTR
- DATA -109,0,-59,-33
- DATA -109,0,-59,33
- DATA -59,-33,59,-33
- DATA -59,33,59,33
- DATA 59,-33,109,0
- DATA 109,0,59,33
- ' 5 > LEVYY NIZ
- DATA -114,3,-57,40
- DATA -114,3,-114,187
- DATA -57,40,-57,148
- DATA -114,187,-105,196
- DATA -57,148,-105,196
- ' 6 > NIZ
- DATA -102,199,-54,151
- DATA -102,199,-93,208
- DATA -54,151,54,151
- DATA -93,208,93,208
- DATA 54,151,102,199
- DATA 102,199,93,208
- ' 7 > PRAVYY NIZ
- DATA 114,3,57,40
- DATA 57,40,57,148
- DATA 114,3,114,187
- DATA 57,148,105,196
- DATA 114,187,105,196
- ' SOSTOYANIYA
- DATA 2,1,3,5,7,6,-1
- DATA 3,7,-1
- DATA 2,3,4,5,6,-1
- DATA 2,3,4,7,6,-1
- DATA 1,4,3,7,-1
- DATA 2,1,4,7,6,-1
- DATA 2,1,4,5,7,6,-1
- DATA 2,3,7,-1
- DATA 2,1,3,4,5,7,6,-1
- DATA 2,1,3,4,7,6,-1,-2
- ' ZAGOLOVOK *.BMP*
- BGDT: DATA 66,77,54,254,0,0,0,0,0,0,54,4,0,0,40,0,0
- DATA 0,128,2,0,0,224,1,0,0,1,0,8,0,0,0,0,0,0
- DATA 250,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0
- SUB DRAWCHAR (X%, Y%, CH%, POZ%, MSHTB!)
- PCVTL% = 1: PCVTZ% = 2 ' TSVETA DLYA PRISUTSTVUYUSHCHIKH
- OCVTL% = 3: OCVTZ% = 4 ' TSVETA DLYA OTSUTSTVUYUSHCHIKH
- XPLS% = ((DATADL / MSHTB!) * 1.05) * POZ%
- FOR I% = 1 TO 7 ' OT 1-GO DO 7-MI CHASTEY
- IF SOST%(CH%, I%) = 1 THEN ' YESLI CHAST VKLYUCHENA, RISUYEM
- CVTL% = PCVTL%: CVTZ% = PCVTZ%
- ELSE CVTL% = OCVTL%: CVTZ% = OCVTZ%
- END IF
- FOR K% = 1 TO SIZES%(I%) ' RISUYEM VSE LINII
- X11% = X1%(I%, K%) / MSHTB!: X22% = X2%(I%, K%) / MSHTB!
- Y11% = Y1%(I%, K%) / MSHTB!: Y22% = Y2%(I%, K%) / MSHTB!
- LINE (X11% + XPLS% + X%, Y11% + Y%)-(X22% + XPLS% + X%, Y22% + Y%), CVTL%
- NEXT
- PAINT (PZX%(I%) / MSHTB! + XPLS% + X%, PZY%(I%) / MSHTB! + Y%), CVTZ%, CVTL%
- NEXT
- END SUB
- SUB DRAWCLOCK (XDR%, YDR%, TM$, MASHTAB!)
- FOR U% = 1 TO LEN(TM$)
- TC% = ASC(MID$(TM$, U%, 1))
- IF TC% > 47 AND TC% < 58 THEN
- DRAWCHAR XDR%, YDR%, TC% - 48, U% - 1, MASHTAB!
- END IF
- NEXT
- END SUB
- SUB MAKEBMP (NAMEBMP$)
- ' SOZDAYEM *.BMP*
- OPEN NAMEBMP$ + ".BMP" FOR BINARY AS #3
- RESTORE BGDT
- FOR BYTE& = 1 TO 54
- READ ZGLV%: PUT #3, BYTE&, ZGLV%
- NEXT BYTE&: BYTE& = 55
- FOR II% = 0 TO 255
- OUT &H3C7, II%: R% = INP(&H3C9) * 4: G% = INP(&H3C9) * 4: B% = INP(&H3C9) * 4
- BT1% = CVI(CHR$(B%) + CHR$(G%)): BT2% = CVI(CHR$(R%) + "?")
- PUT #3, BYTE&, BT1%: PUT #3, BYTE& + 2, BT2%
- BYTE& = BYTE& + 4
- NEXT II%
- FOR Y% = 479 TO 0 STEP -1
- FOR X% = 0 TO 639
- CVE% = POINT(X%, Y%)
- PUT #3, BYTE&, CVE%: BYTE& = BYTE& + 1
- NEXT X%
- NEXT Y%
- CLOSE #3
- END SUB
- SUB PREPARE
- OUT &H3C8, 1
- OUT &H3C9, 92 / 4: OUT &H3C9, 93 / 4: OUT &H3C9, 77 / 4
- OUT &H3C9, 21 / 4: OUT &H3C9, 26 / 4: OUT &H3C9, 19 / 4
- OUT &H3C9, 120 / 4: OUT &H3C9, 124 / 4: OUT &H3C9, 87 / 4
- OUT &H3C9, 110 / 4: OUT &H3C9, 118 / 4: OUT &H3C9, 86 / 4
- OUT &H3C9, 120 / 4: OUT &H3C9, 124 / 4: OUT &H3C9, 87 / 4
- LINE (50, 180)-(590, 320), 5, BF
- END SUB
Рисунок 1 – Исходный текст для построения цифровых часов
Рисунок 2 – Результат построения цифровых часов
Рисунок 3 – Построение цифр на дисплее
Спасибо за прочтение этой статьи.
Прикрепленные файлы: