MODE 22 ON ERROR: OSCLI "REFRESH ON":END an%=0 c%=1 a$="WOW! Rotating text :-)" *REFRESH OFF REPEAT an%+=1: IF an%>=360 THEN an%=an%-360 c%+=1: IF c%=16 THEN c%=1 ENDIF CLG a%=FNangled("Arial",40,2,a$,an%,512,384,c%) *REFRESH WAIT 1 UNTIL FALSE END REM Draws text at the specified angle and colour DEFFNangled(font$,height%,weight%,text$,angle,X%,Y%,col%) LOCALfont%,oldfont%,L% DIMU%LOCAL1024:U%=(U%+1)AND-2 SYS"CreateFont",height%,0,angle*10,angle*10,weight%,0,0,0,0,0,0,0,0,font$TOfont% SYS"SelectObject",@memhdc%,font%TOoldfont% SYS"SetTextColor",@memhdc%,&1000000+col% SYS"SetBkColor",@memhdc%,&1000000+@vdu%?71 SYS"SetBkMode",@memhdc%,1 SYS"MultiByteToWideChar",&FDE9,0,text$,LENtext$,0,0TOL% SYS"MultiByteToWideChar",&FDE9,0,text$,LENtext$,U%,L% SYS"TextOutW",@memhdc%,X%,Y%,U%,L% SYS"SetBkMode",@memhdc%,2 SYS"InvalidateRect",@hwnd%,0,0 SYS"SelectObject",@memhdc%,oldfont% SYS"DeleteObject",font% =0
MODE 22 ON ERROR: OSCLI "REFRESH ON":END an%=0 c%=1 a$="WOW! Rotating text :-)" w%=FNstringwidth(a$) *REFRESH OFF REPEAT an%+=1: IF an%>=360 THEN an%=an%-360 c%+=1: IF c%=16 THEN c%=1 ENDIF CLG dx%=w%*COSRAD(an%)+@vdu%!220*COSRAD(an%-90) dy%=w%*SINRAD(an%)+@vdu%!220*SINRAD(an%-90) a%=FNangled("Arial",40,2,a$,an%,512-dx%,384+dy%,c%) PLOT 69,1024,768 :REM Centre of rotation, in BB4W graphics units *REFRESH WAIT 1 UNTIL FALSE END REM Draws text at the specified angle and colour DEFFNangled(font$,height%,weight%,text$,angle,X%,Y%,col%) LOCALfont%,oldfont%,L% DIMU%LOCAL1024:U%=(U%+1)AND-2 SYS"CreateFont",height%,0,angle*10,angle*10,weight%,0,0,0,0,0,0,0,0,font$TOfont% SYS"SelectObject",@memhdc%,font%TOoldfont% SYS"SetTextColor",@memhdc%,&1000000+col% SYS"SetBkColor",@memhdc%,&1000000+@vdu%?71 SYS"SetBkMode",@memhdc%,1 SYS"MultiByteToWideChar",&FDE9,0,text$,LENtext$,0,0TOL% SYS"MultiByteToWideChar",&FDE9,0,text$,LENtext$,U%,L% SYS"TextOutW",@memhdc%,X%,Y%,U%,L% SYS"SetBkMode",@memhdc%,2 SYS"InvalidateRect",@hwnd%,0,0 SYS"SelectObject",@memhdc%,oldfont% SYS"DeleteObject",font% =0 : DEF FNstringwidth(a$) LOCAL @vdu.m.c&, @vdu.l.x%, @vdu.l.y%, ?444 VDU 5,23,16,0|30,11,23,16,64|10,10 PRINT a$; @vdu.l.y% = GET(0,0) : REM SDL thread sync. = @vdu.l.x%