BBC BASIC for Windows
Programming >> Graphics and Games >> Red/Green/Blue/Gray buttons Custom designed
http://bb4w.conforums.com/index.cgi?board=graphics&action=display&num=1458186093

Red/Green/Blue/Gray buttons Custom designed
Post by michael on Mar 17th, 2016, 03:41am

Here is post 1 of 2.. these posts will:
1) Create Predefined Buttons for an app named RGB COLOR MIXER TOOL
2) The second post will show the function and look of the buttons
Code:
   
   SWP_HIDEWINDOW = &80
      SWP_NOMOVE = 2
      SWP_NOSIZE = 1
      SWP_NOZORDER = 4
      SWP_SHOWWINDOW = 64
      LR_LOADFROMFILE = 16
      BM_SETIMAGE = 247
      BS_BITMAP = &80
      ON CLOSE : QUIT
      INSTALL @lib$+"winlib5"
      INSTALL @lib$+"timerlib"

      REM SET MODE TO 8 USING VDU
      VDU 22,8
      REM SET LINE THICKNESS TO 3
      VDU 23,23,3|
      REM OFF
      GCOL 1

      REM create and save button images------------------------------------

      REM**********(Filename,H,V,BEGIN,SIZE,R,G,B,Dimmer)    Dont use .BMP as it is automatically added in PROC
      PROC_button("MyGRAYBUTTON",500,500,15,30,200,185,200,15)
      PROC_button("MyREDBUTTON",500,580,15,30,250,0,0,15) REM RED
      PROC_button("MyGREENBUTTON",500,660,15,30,0,250,0,15) REM GREEN
      PROC_button("MyBLUEBUTTON",500,740,15,30,100,100,255,15) REM BLUE

      REM The colors will be hard to adjust as you have no tool to customize the colors (YET) -its coming
      REM its really trial and error with the dimmer setting, and RGB settings.. (too much value gap can make your button look odd)
      REM MAIN --------------------------------
      (mou)
      WAIT 0 : REM just wait, nothing to do !
      GOTO (mou)

      DEF PROC_button(filename$,H,V,BEGIN,SIZE,X,C,A,DI)
      filename$=filename$+".BMP"
      R=X
      G=C
      B=A
      P=SIZE-BEGIN
      P=P/2
      P=BEGIN+P
      FOR Y=P TO SIZE
        COLOUR 1,X,C,A
        LINE H-Y,V-Y,H+Y,V-Y
        LINE H+Y,V-Y,H+Y,V+Y
        LINE H+Y,V+Y,H-Y,V+Y
        LINE H-Y,V+Y,H-Y,V-Y
        X=X-DI
        C=C-DI
        A=A-DI
        IF X<2 THEN X=2
        IF C<2 THEN C=2
        IF A<2 THEN A=2
      NEXT Y
      FOR Y=BEGIN TO P
        COLOUR 1,X,C,A
        LINE H-Y,V-Y,H+Y,V-Y
        LINE H+Y,V-Y,H+Y,V+Y
        LINE H+Y,V+Y,H-Y,V+Y
        LINE H-Y,V+Y,H-Y,V-Y
        X=X+DI
        C=C+DI
        A=A+DI
      NEXT Y
      COLOUR 1,R,G,B
      FILL H,V
      REM I hope I dont burn out any brain cells with this solution...LOL
      file1$=@usr$+ filename$
      h$=STR$(H-SIZE-8)
      v$=STR$(V-SIZE-8)
      size$=STR$(SIZE*2+12)
      combinit$=h$+","+v$+","+size$+","+size$
      pos1$=combinit$
      OSCLI "SCREENSAVE "+file1$+" "+pos1$

      ENDPROC



 

And here is the buttons in Action: Keep the buttons for later when I post RGB COLOR MIXER TOOL
Code:
     
 SWP_HIDEWINDOW = &80
      SWP_NOMOVE = 2
      SWP_NOSIZE = 1
      SWP_NOZORDER = 4
      SWP_SHOWWINDOW = 64
      LR_LOADFROMFILE = 16
      BM_SETIMAGE = 247
      BS_BITMAP = &80
      ON CLOSE : PROCclose : QUIT
      INSTALL @lib$+"winlib5"
      INSTALL @lib$+"timerlib"
      REM SET MODE TO 8 USING VDU
      VDU 22,8
      REM SET LINE THICKNESS TO 3
      VDU 23,23,3|
      REM OFF
      GCOL 1
      REM create and save button images------------------------------------
      file1$=@usr$+"MyREDBUTTON.bmp"
      file2$=@usr$+"MyGREENBUTTON.bmp"
      file3$=@usr$+"MyBLUEBUTTON.bmp"
      file1b$=@usr$+"MyGRAYBUTTON.bmp"
      CLS
      REM -----------------------------------------------------------------
      REM create buttons --------------------------------------------------
      butnu1=FN_button("",300,200,40,40,FN_setproc(PROCbutnu1),BS_BITMAP)
      butnu2=FN_button("",340,200,40,40,FN_setproc(PROCbutnu2),BS_BITMAP)
      butnu3=FN_button("",380,200,40,40,FN_setproc(PROCbutnu3),BS_BITMAP)
      REM -----------------------------------------------------------------
      REM assign images to buttons----------------------------------------
      SYS "LoadImage", 0, file1$, 0, 40, 40, LR_LOADFROMFILE TO hbitmap1
      SYS "SendMessage", butnu1, BM_SETIMAGE, 0, hbitmap1
      SYS "LoadImage", 0, file2$, 0, 40, 40, LR_LOADFROMFILE TO hbitmap2
      SYS "SendMessage", butnu2, BM_SETIMAGE, 0, hbitmap2
      SYS "LoadImage", 0, file3$, 0, 40, 40, LR_LOADFROMFILE TO hbitmap3
      SYS "SendMessage", butnu3, BM_SETIMAGE, 0, hbitmap3
      SYS "LoadImage", 0, file1b$, 0, 40, 40, LR_LOADFROMFILE TO hbitmap1b
      REM -----------------------------------------------------------------
      REM MAIN --------------------------------
      (mou)
      WAIT 0 : REM just wait, nothing to do !
      GOTO (mou)
      END
      REM -------------------------------------
      REM clicking buttons will jump here automatically -------------------
      DEF PROCbutnu1 : PRINTTAB(0,27);"Button 1" : PROCflash1
      DEF PROCbutnu2 : PRINTTAB(0,27);"Button 2" : PROCflash2
      DEF PROCbutnu3 : PRINTTAB(0,27);"Button 3" : PROCflash3
      LOCAL X,Y,CC,I%
      FOR I%=1 TO 20000
        X=RND(100)
        Y=RND(100)
        CC=RND(200)
        COLOUR 1,X+Y,CC,Y+X
        LINE X,Y,X,Y
      NEXT I%
      ENDPROC
      REM -----------------------------------------------------------------
      DEF PROCflash1 : LOCAL A%
      SYS "SendMessage", butnu1, BM_SETIMAGE, 0, hbitmap1b
      A%=FN_ontimer(100,PROCflash1off,0)
      ENDPROC
      DEF PROCflash1off
      SYS "SendMessage", butnu1, BM_SETIMAGE, 0, hbitmap1
      ENDPROC
      DEF PROCflash2 : LOCAL A%
      SYS "SendMessage", butnu2, BM_SETIMAGE, 0, hbitmap1b
      A%=FN_ontimer(100,PROCflash2off,0)
      ENDPROC
      DEF PROCflash2off
      SYS "SendMessage", butnu2, BM_SETIMAGE, 0, hbitmap2

      ENDPROC
      DEF PROCflash3 : LOCAL A%
      SYS "SendMessage", butnu3, BM_SETIMAGE, 0, hbitmap1b
      A%=FN_ontimer(100,PROCflash3off,0)
      ENDPROC
      DEF PROCflash3off
      SYS "SendMessage", butnu3, BM_SETIMAGE, 0, hbitmap3
      ENDPROC
            REM delete the stuff we made
      DEF PROCclose
      SYS "DeleteObject", hbitmap1
      SYS "DeleteObject", hbitmap2
      SYS "DeleteObject", hbitmap3
      SYS "DeleteObject", hbitmap1b
      PROC_closewindow(butnu1)
      PROC_closewindow(butnu2)
      PROC_closewindow(butnu3)
      ENDPROC