Ooops
October 28, 2020, 11:16:17 PM

Author Topic: [bb] Option Window - Messages and request user response by Nicstt [ 1+ years ago ]  (Read 1437 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : Option Window - Messages and request user response
Author : Nicstt
Posted : 1+ years ago

Description : I wanted a window that would display messages I wanted to advise user of.

This developed - message only window, 1 button 'ok' window also a 2 button yes/no and a 3 button yes/no/cancel.

Specifying Number selects the type of message - 0 no buttons, 1 = 1, 2 = 2 and (surprisingly) 3 = 3.

Enter text required - no other details need to be passed, although the font defaults to ariel.

Can pass an image that requires buttons drawing, or even a fully drawn window with buttons, although the buttons have to be placed specifically to be used correctly.

Sorry about the lack of comments.

I wrote it using 1024x768, however I have tested it using 800x600 and seems to be fine.

I have included a small program to test its use.

To ensure custom drawn window is correct I would enter details required then screen print and copy and paste into a drawing package.

Hope some find it useful.

Edit: ewww thought I'd found a bug, just a mistake on boolean I'd forgotten to change when testing - just changed it. :D


Code :
Code: BlitzBasic
  1. Function AdviceWindowOption(number, gfxGeneric, custom_width, custom_hight, fntGeneric, btnTextColor, message$, boolean)
  2.         ; ********************************************************************************************************************************
  3.         ; AdviceWindowOption(number, gfxGeneric, custom_width, custom_hight, fntGeneric, message$, boolean)
  4.         ; number                        0, 1, 2 or 3 - determines how many buttons each window will have
  5.         ;                                       a number out of range defaults to 0 with a message
  6.         ; gfxGeneric            set it to 0 will let function draw window and buttons when required using defaults
  7.         ; custom_width          0 when happy with defaults or if passing a predrawn graphic - default is 300 or when window has 3 buttons 450
  8.         ; custom_hight          0 when happy with defaults or if passing a predrawn graphic - default is 120
  9.         ;                                       custom size won't allow a control larger than screen size
  10.         ; fntGeneric            0 when happy with defaults - which is unlikely
  11.         ; btnTextColor          black or white - does not affect fntGeneric
  12.         ; message$                      text to be displayed - will be split up into three lines by function
  13.         ;                                       - pass empty if predrawn window has the message displayed
  14.         ;                                       - if string is too long outputs a default message.
  15.         ; boolean                       set to false unless predrawn window (or image/texture) needs buttons adding
  16.         ;                                       - if image is smaller than default size it will be resized - no warning is given
  17.         ;                                       - however, a copy of the image is used preserving the original
  18.         ; ********************************************************************************************************************************
  19.         ; Returns                       reply = 1, 2, 3 or 4 - | 1 = ok button | 2 = yes button | 3 = no button | 4 = cancel button
  20.         ;                                       - also returns Null when no button is displayed if a Null return is required
  21.         ; ********************************************************************************************************************************
  22.         ; Button Size           Default is 127 x 32 - no option to change the size
  23.         ; ********************************************************************************************************************************
  24.         ; example code of use  
  25.  
  26.         ;answer = AdviceWindowOption(1, 0, 0, 0, 0, "Test", False) ;  one button 'ok'
  27.         ;Select answer
  28.         ;       Case 1
  29.                         ; code here would be for what to do with answer (return)
  30.         ;       Case 2
  31.                         ; code here would be for what to do with answer (return)
  32.         ;       Case 3
  33.                         ; code here would be for what to do with answer (return)
  34.         ;       Case 4
  35.                         ; code here would be for what to do with answer (return)
  36.         ;End Select
  37.        
  38.         ; ********************************************************************************************************************************
  39.         ; text displayed on drawn buttons
  40.         btntextOk$ = "OK" : btntextYes$ = "Yes" : btntextNo$ = "No" : btntextCancel$ = "Cancel"
  41.  
  42.         imagefree = False : fontfree = False : fontfreelarge = False
  43.        
  44.         gfxFullScreen = CreateImage(GraphicsWidth(), GraphicsHeight())
  45.  
  46.         ; draws button to use to show button 'activated' 127 x 32
  47.         gfxActiveBtn = CreateImage (127, 32)
  48.         SetBuffer (ImageBuffer(gfxActiveBtn))
  49.         ClsColor 0, 0, 0 : Cls ; cls with color that will be masked
  50.         x1 = 0 : y1 = 0 : x2 = 126 : y2 = 31 ; top left and bottom right coords
  51.         Color 32, 32, 32
  52.         Line x1, y1, x2, y1 : Line x1, y1 + 1, x2 - 1, y1 + 1
  53.         Line x1, y1 + 2, x1, y2 : Line x1 + 1, y1 + 2, x1 + 1, y2 - 1
  54.         Color 255, 255, 255
  55.         Line x1 + 2, y2 - 1, x2, y2 - 1 : Line x1 + 1, y2, x2, y2
  56.         Line x2 - 1, y1 + 2, x2 - 1, y2 - 2 : Line x2, y1 + 1, x2, y2 - 2
  57.         SetBuffer (BackBuffer())
  58.         MaskImage gfxActiveBtn, 0, 0, 0
  59.         If fntGeneric = 0
  60.                 fntGeneric = LoadFont("Ariel",16, False, False, False) ; default font
  61.                 fontfree = True
  62.         EndIf
  63.                 ; makes a copy of imported image as any changes will affect original
  64.         If gfxGeneric <> 0
  65.                 gfxTemp = gfxGeneric
  66.                 gfxGeneric = CopyImage(gfxTemp)
  67.                 gfxTemp = 0
  68.         EndIf
  69.         If gfxGeneric = 0 Or (gfxGeneric <> 0 And boolean = True) ; no graphics passed, or graphic needs buttons adding
  70.                 If boolean = True       ; need to test passing a gfx for window that is being used as background
  71.                         custom_width = ImageWidth(gfxGeneric)
  72.                         custom_hight = ImageHeight(gfxGeneric)
  73.                         resize = False
  74.                         If ImageWidth(gfxGeneric) < 300 And number <> 3
  75.                                 custom_width = 300 : resize = True
  76.                         ElseIf ImageWidth(gfxGeneric) < 450 And number = 3
  77.                                 custom_width = 450 : resize = True
  78.                         EndIf
  79.                         If ImageHeight(gfxGeneric) < 120
  80.                                 custom_hight = 120 : resize = True
  81.                         EndIf
  82.                         If resize = True Then ResizeImage gfxGeneric, custom_width, custom_hight
  83.                 EndIf
  84.                 If custom_width < 300 And number <> 3 Then custom_width = 300
  85.                 If custom_width < 450 And number = 3 Then custom_width = 450
  86.                 If custom_hight < 120 Then custom_hight = 120
  87.                 If custom_width > GraphicsWidth() Then custom_width = GraphicsWidth() : message$ = "custom_width was greater than max allowed!"
  88.                 If custom_hight > GraphicsHeight() Then custom_hight = GraphicsHeight() : message$ = "custom_height was greater than max allowed!"
  89.                 If boolean = False
  90.                         gfxGeneric = CreateImage (custom_width, custom_hight); generic variable to hold gfx data of whatever is passed - 0 will make the default gfx
  91.                         imagefree = True
  92.                 EndIf
  93.                 fntStandardLarge = LoadFont("Comic Sans MS",28, False, False, False) ; used to display text on buttons
  94.                 fontfreelarge = True
  95.                 SetBuffer (ImageBuffer(gfxGeneric))
  96.                
  97.                 If boolean = False Then ClsColor 180, 180, 210 : Cls
  98.                 ; window without buttons - draws border on predrawn background or image after cls
  99.                 Color 255, 255, 255
  100.                 Line 0, 0, custom_width - 1, 0
  101.                 Line 0, 1, custom_width - 1, 1
  102.                 Line 0, 2, 0, custom_hight - 1
  103.                 Line 1, 2, 1, custom_hight - 1
  104.                 Color 32, 32, 32
  105.                 Line 2, 2, custom_width - 1, 2
  106.                 Line 2, 3, custom_width - 1, 3
  107.                 Line 2, custom_hight - 1, custom_width - 1, custom_hight - 1
  108.                 Line 2, custom_hight - 2, custom_width - 1, custom_hight - 2
  109.                 Line 2, 4, 2, custom_hight - 1
  110.                 Line 3, 4, 3, custom_hight - 1
  111.                 Line custom_width - 1, 4, custom_width - 1, custom_hight - 1
  112.                 Line custom_width - 2, 4, custom_width - 2, custom_hight - 1
  113.                 ; draws what buttons are required with text of specified colour - 0 black, 1 white
  114.                 Select number
  115.                         Case 1 ; 1 button - ok
  116.                                 x1_1 = custom_width / 2 - 65 : y1_1 = custom_hight - 40
  117.                                 x1_2 = x1_1 + ImageWidth(gfxActiveBtn) - 1 : y1_2 = y1_1 + ImageHeight(gfxActiveBtn) - 1
  118.                                 Color 255, 255, 255
  119.                                 Line x1_1, y1_1, x1_2, y1_1 : Line x1_1, y1_1 + 1, x1_2 - 1, y1_1 + 1
  120.                                 Line x1_1, y1_1 + 2, x1_1, y1_2 : Line x1_1 + 1, y1_1 + 2, x1_1 + 1, y1_2 - 1
  121.                                 Color 32, 32, 32
  122.                                 Line x1_1 + 2, y1_2 - 1, x1_2, y1_2 - 1 : Line x1_1 + 1, y1_2, x1_2, y1_2
  123.                                 Line x1_2 - 1, y1_1 + 2, x1_2 - 1, y1_2 - 2 : Line x1_2, y1_1 + 1, x1_2, y1_2 - 2
  124.                                 SetFont fntStandardLarge
  125.                                 If btnTextColor = 0 Then Color 32, 32, 32 Else Color 255, 255, 255
  126.                                 Text (custom_width / 2) - (StringWidth (btntextOk$) / 2), y1_1, btntextOk$
  127.                         Case 2  ; 2 buttons - yes, no
  128.                                 x1_1 = 9 : y1_1 = custom_hight - 40
  129.                                 x1_2 = x1_1 + ImageWidth(gfxActiveBtn) - 1 : y1_2 = y1_1 + ImageHeight(gfxActiveBtn) - 1
  130.                                 Color 255, 255, 255
  131.                                 Line x1_1, y1_1, x1_2, y1_1 : Line x1_1, y1_1 + 1, x1_2 - 1, y1_1 + 1
  132.                                 Line x1_1, y1_1 + 2, x1_1, y1_2 : Line x1_1 + 1, y1_1 + 2, x1_1 + 1, y1_2 - 1
  133.                                 Color 32, 32, 32
  134.                                 Line x1_1 + 2, y1_2 - 1, x1_2, y1_2 - 1 : Line x1_1 + 1, y1_2, x1_2, y1_2
  135.                                 Line x1_2 - 1, y1_1 + 2, x1_2 - 1, y1_2 - 2 : Line x1_2, y1_1 + 1, x1_2, y1_2 - 2
  136.                                 SetFont fntStandardLarge
  137.                                 If btnTextColor = 0 Then Color 32, 32, 32 Else Color 255, 255, 255
  138.                                 Text x1_1 + (ImageWidth(gfxActiveBtn) / 2) - (StringWidth (btntextYes$) / 2), y1_1, btntextYes$
  139.                                 x2_2 = custom_width - 9 : y2_1 = custom_hight - 40
  140.                                 x2_1 = x2_2 - ImageWidth(gfxActiveBtn) + 1 : y2_2 = y2_1 + ImageHeight(gfxActiveBtn) - 1
  141.                                 Color 255, 255, 255
  142.                                 Line x2_1, y2_1, x2_2, y2_1 : Line x2_1, y2_1 + 1, x2_2 - 1, y2_1 + 1
  143.                                 Line x2_1, y2_1 + 2, x2_1, y2_2 : Line x2_1 + 1, y2_1 + 2, x2_1 + 1, y2_2 - 1
  144.                                 Color 32, 32, 32
  145.                                 Line x2_1 + 2, y2_2 - 1, x2_2, y2_2 - 1 : Line x2_1 + 1, y2_2, x2_2, y2_2
  146.                                 Line x2_2 - 1, y2_1 + 2, x2_2 - 1, y2_2 - 2 : Line x2_2, y2_1 + 1, x2_2, y2_2 - 2
  147.                                 SetFont fntStandardLarge
  148.                                 If btnTextColor = 0 Then Color 32, 32, 32 Else Color 255, 255, 255
  149.                                 Text x2_1 + (ImageWidth(gfxActiveBtn) / 2) - (StringWidth (btntextNo$) / 2), y2_1, btntextNo$
  150.                         Case 3 ; 3 buttons - yes, no, cancel
  151.                                 x1_1 = 9 : y1_1 = custom_hight - 40
  152.                                 x1_2 = x1_1 + ImageWidth(gfxActiveBtn) - 1 : y1_2 = y1_1 + ImageHeight(gfxActiveBtn) - 1
  153.                                 Color 255, 255, 255
  154.                                 Line x1_1, y1_1, x1_2, y1_1 : Line x1_1, y1_1 + 1, x1_2 - 1, y1_1 + 1
  155.                                 Line x1_1, y1_1 + 2, x1_1, y1_2 : Line x1_1 + 1, y1_1 + 2, x1_1 + 1, y1_2 - 1
  156.                                 Color 32, 32, 32
  157.                                 Line x1_1 + 2, y1_2 - 1, x1_2, y1_2 - 1 : Line x1_1 + 1, y1_2, x1_2, y1_2
  158.                                 Line x1_2 - 1, y1_1 + 2, x1_2 - 1, y1_2 - 2 : Line x1_2, y1_1 + 1, x1_2, y1_2 - 2
  159.                                 SetFont fntStandardLarge
  160.                                 If btnTextColor = 0 Then Color 32, 32, 32 Else Color 255, 255, 255
  161.                                 Text x1_1 + (ImageWidth(gfxActiveBtn) / 2) - (StringWidth (btntextYes$) / 2), y1_1, btntextYes$
  162.                                 x2_1 = custom_width / 2 - 63 : y2_1 = custom_hight - 40
  163.                                 x2_2 = x2_1 + ImageWidth(gfxActiveBtn) - 1 : y2_2 = y2_1 + ImageHeight(gfxActiveBtn) - 1
  164.                                 Color 255, 255, 255
  165.                                 Line x2_1, y2_1, x2_2, y2_1 : Line x2_1, y2_1 + 1, x2_2 - 1, y2_1 + 1
  166.                                 Line x2_1, y2_1 + 2, x2_1, y2_2 : Line x2_1 + 1, y2_1 + 2, x2_1 + 1, y2_2 - 1
  167.                                 Color 32, 32, 32
  168.                                 Line x2_1 + 2, y2_2 - 1, x2_2, y2_2 - 1 : Line x2_1 + 1, y2_2, x2_2, y2_2
  169.                                 Line x2_2 - 1, y2_1 + 2, x2_2 - 1, y2_2 - 2 : Line x2_2, y2_1 + 1, x2_2, y2_2 - 2
  170.                                 SetFont fntStandardLarge
  171.                                 If btnTextColor = 0 Then Color 32, 32, 32 Else Color 255, 255, 255
  172.                                 Text x2_1 + (ImageWidth(gfxActiveBtn) / 2) - (StringWidth (btntextNo$) / 2), y2_1, btntextNo$
  173.                                 x3_2 = custom_width - 9 : y3_1 = custom_hight - 40
  174.                                 x3_1 = x3_2 - ImageWidth(gfxActiveBtn) + 1 : y3_2 = y3_1 + ImageHeight(gfxActiveBtn) - 1
  175.                                 Color 255, 255, 255
  176.                                 Line x3_1, y3_1, x3_2, y3_1 : Line x3_1, y3_1 + 1, x3_2 - 1, y3_1 + 1
  177.                                 Line x3_1, y3_1 + 2, x3_1, y3_2 : Line x3_1 + 1, y3_1 + 2, x3_1 + 1, y3_2 - 1
  178.                                 Color 32, 32, 32
  179.                                 Line x3_1 + 2, y3_2 - 1, x3_2, y3_2 - 1 : Line x3_1 + 1, y3_2, x3_2, y3_2
  180.                                 Line x3_2 - 1, y3_1 + 2, x3_2 - 1, y3_2 - 2 : Line x3_2, y3_1 + 1, x3_2, y3_2 - 2
  181.                                 SetFont fntStandardLarge
  182.                                 If btnTextColor = 0 Then Color 32, 32, 32 Else Color 255, 255, 255
  183.                                 Text x3_1 + (ImageWidth(gfxActiveBtn) / 2) - (StringWidth (btntextCancel$) / 2), y3_1, btntextCancel$
  184.                 End Select
  185.                 SetBuffer (BackBuffer())
  186.         ElseIf gfxGeneric <> 0 And boolean = False ; passing in a ready drawn graphic with standard buttons
  187.                 custom_width = ImageWidth(gfxGeneric)
  188.                 custom_hight = ImageHeight(gfxGeneric)
  189.                 Select number   ; (standard graphic without buttons dealt with in first part of statement)
  190.                         Case 1 ; coords for one button - ok
  191.                                 x1_1 = custom_width / 2 - 65 : y1_1 = custom_hight - 40
  192.                                 x1_2 = x1_1 + ImageWidth(gfxActiveBtn) - 1 : y1_2 = y1_1 + ImageHeight(gfxActiveBtn) - 1
  193.                         Case 2 ; coords for two buttons 'YES' and 'NO'
  194.                                 x1_1 = 9 : y1_1 = custom_hight - 40
  195.                                 x1_2 = x1_1 + ImageWidth(gfxActiveBtn) - 1 : y1_2 = y1_1 + ImageHeight(gfxActiveBtn) - 1
  196.                                 x2_2 = custom_width - 9 : y2_1 = custom_hight - 40
  197.                                 x2_1 = x2_2 - ImageWidth(gfxActiveBtn) + 1 : y2_2 = y2_1 + ImageHeight(gfxActiveBtn) - 1
  198.                         Case 3 ; coords for three buttons 'YES', 'NO' and 'CANCEL'
  199.                                 x1_1 = 9 : y1_1 = custom_hight - 40
  200.                                 x1_2 = x1_1 + ImageWidth(gfxActiveBtn) - 1 : y1_2 = y1_1 + ImageHeight(gfxActiveBtn) - 1
  201.                                 x2_1 = custom_width / 2 - 63 : y2_1 = custom_hight - 40
  202.                                 x2_2 = x2_1 + ImageWidth(gfxActiveBtn) - 1 : y2_2 = y2_1 + ImageHeight(gfxActiveBtn) - 1
  203.                                 x3_2 = custom_width - 9 : y3_1 = custom_hight - 40
  204.                                 x3_1 = x3_2 - ImageWidth(gfxActiveBtn) + 1 : y3_2 = y3_1 + ImageHeight(gfxActiveBtn) - 1
  205.                 End Select
  206.         EndIf
  207.         CopyRect 0, 0, GraphicsWidth(), GraphicsHeight(), 0, 0, FrontBuffer(), ImageBuffer(gfxFullScreen)
  208.         SetFont fntGeneric     
  209.         If number < 0 And number > 3
  210.                 number = 0 : message$ = "'number' passed was outside range - allowed are 0 to 3."
  211.         EndIf
  212.         dly = 5000 ; delay for case 0
  213.         x = ((GraphicsWidth() / 2) - (ImageWidth(gfxGeneric)) / 2)
  214.         xs = GraphicsWidth() / 2
  215.         ys = GraphicsHeight() / 2
  216.         y = ((GraphicsHeight() / 2) - (ImageHeight(gfxGeneric)) / 2)
  217.         sw = StringWidth(message$)
  218.         sh = StringHeight(message$)
  219.         iw = ImageWidth(gfxGeneric) - 6 ; the 6 reduction allows for border
  220.         ih = ImageHeight(gfxGeneric)
  221.         DrawImage gfxFullScreen, 0, 0
  222.         DrawImage gfxGeneric, x, y
  223.         If sw <= iw
  224.                 Color 255,255,0
  225.                 Text xs, ys - sh, message$, True, False
  226.                 dly = 3000
  227.         Else
  228.                 If sw / 2 < iw - 15
  229.                         lenth_ok = False
  230.                         For a = 1 To Len(message$)
  231.                                 If Mid$(message$, a, 1) = " " Or Mid$(message$, a, 1) = "," Or Mid$(message$, a, 1) = "." Or Mid$(message$, a, 1) = ":" Or Mid$(message$, a, 1) = ":" Or Mid$(message$, a, 1) = "!"
  232.                                         message1$ = Left$(message$, a)
  233.                                         message2$ = Right$(message$, Len(message$) - a)
  234.                                         If StringWidth(message1$) <= iw And StringWidth(message2$) <= iw
  235.                                                 If Mid$(message$, a, 1) = " "
  236.                                                         message1$ = Left$(message$, a - 1)
  237.                                                 EndIf
  238.                                                 lenth_ok = True
  239.                                                 Exit
  240.                                         EndIf
  241.                                 EndIf
  242.                         Next
  243.                         Color 255,255,0
  244.                         If number > 0
  245.                                 sw = StringWidth (message1$)
  246.                                 Text x + ((iw + 6 - sw) / 2), y + 20, message1$
  247.                                 sw = StringWidth (message2$)
  248.                                 Text x + ((iw + 6 - sw) / 2), y + 50, message2$
  249.                         Else
  250.                                 sw = StringWidth (message1$)
  251.                                 Text x + ((iw + 6 - sw) / 2), y + 30, message1$
  252.                                 sw = StringWidth (message2$)
  253.                                 Text x + ((iw + 6 - sw) / 2), y + 60, message2$
  254.                         EndIf
  255.                 ElseIf sw / 3 < iw
  256.                         lenth_ok = False : adjust = 25
  257.                         Repeat
  258.                                 For a = adjust To Len(message$)
  259.                                         If Mid$(message$, a, 1) = " " Or Mid$(message$, a, 1) = "," Or Mid$(message$, a, 1) = "." Or Mid$(message$, a, 1) = ":" Or Mid$(message$, a, 1) = ":" Or Mid$(message$, a, 1) = "!"
  260.                                                 message1$ = Left$(message$, a)
  261.                                                 messagetemp$ = Right$(message$, Len(message$) - a)
  262.                                                 If Mid$(message$, a, 1) = " "
  263.                                                         message1$ = Left$(message$, a - 1)
  264.                                                 EndIf
  265.                                                 If StringWidth(message1$) <= iw
  266.                                                         Exit
  267.                                                 EndIf
  268.                                         EndIf  
  269.                                 Next           
  270.                                 For a = 1 To Len(messagetemp$)
  271.                                         If Mid$(messagetemp$, a, 1) = " " Or Mid$(messagetemp$, a, 1) = "," Or Mid$(messagetemp$, a, 1) = "." Or Mid$(messagetemp$, a, 1) = ":" Or Mid$(messagetemp$, a, 1) = ":" Or Mid$(messagetemp$, a, 1) = "!"
  272.                                                 message2$ = Left$(messagetemp$, a)
  273.                                                 message3$ = Right$(messagetemp$, Len(messagetemp$) - a)
  274.                                                 If StringWidth(message1$) <= iw And StringWidth(message2$) <= iw And StringWidth(message3$) <= iw
  275.                                                         If Mid$(message2$, a, 1) = " "
  276.                                                                 message2$ = Left$(messagetemp$, a - 1)
  277.                                                         EndIf
  278.                                                         lenth_ok = True
  279.                                                         Exit
  280.                                                 EndIf
  281.                                         EndIf
  282.                                 Next
  283.                                 adjust = adjust + 1
  284.                         Until lenth_ok = True Or adjust > Len(message$)
  285.                         Color 255,255,0
  286.                         If adjust > Len(message$)
  287.                                 sw = StringWidth ("Message Failed!")
  288.                                 Text x + ((iw + 6 - sw) / 2), y + 80, "Message Failed!"
  289.                         Else
  290.                                 If number > 0
  291.                                         sw = StringWidth (message1$)
  292.                                         Text x + ((iw + 6 - sw) / 2), y + 8, message1$
  293.                                         sw = StringWidth (message2$)
  294.                                         Text x + ((iw + 6 - sw) / 2), y + 30, message2$
  295.                                         sw = StringWidth (message3$)
  296.                                         Text x + ((iw + 6 - sw) / 2), y + 52, message3$
  297.                                 Else
  298.                                         sw = StringWidth (message1$)
  299.                                         Text x + ((iw + 6 - sw) / 2), y + 20, message1$
  300.                                         sw = StringWidth (message2$)
  301.                                         Text x + ((iw + 6 - sw) / 2), y + 50, message2$
  302.                                         sw = StringWidth (message3$)
  303.                                         Text x + ((iw + 6 - sw) / 2), y + 80, message3$
  304.                                 EndIf
  305.                         EndIf
  306.                 Else
  307.                         sw = StringWidth ("Message too Long")
  308.                         Text x + ((iw + 6 - sw) / 2), y + 40, "Message too Long"
  309.                 EndIf
  310.         EndIf
  311.         reply = 0
  312.         Select number
  313.                 Case 0  ; requires text to display message - no buttons
  314.                         Flip 0: Delay dly
  315.                 Case 1  ; requires text to display message - one button 'OK'
  316.                         CopyRect 0, 0, GraphicsWidth(), GraphicsHeight(), 0, 0, BackBuffer(), ImageBuffer(gfxFullScreen)
  317.                         x1_1 = x1_1 + x : y1_1 = y1_1 + y : x1_2 = x1_2 + x - 1 : y1_2 = y1_2 + y - 1
  318.                         Repeat
  319.                                 ML = MouseHit(1)
  320.                                 If ML = True And MouseX() > x1_1 And MouseX() < x1_2 And MouseY() > y1_1 And MouseY() < y1_2
  321.                                         DrawImage gfxFullScreen, 0, 0
  322.                                         DrawImage gfxActiveBtn, x1_1, y1_1
  323.                                         Flip 0 : Delay 200
  324.                                         DrawImage gfxFullScreen, 0, 0
  325.                                         Flip 0 : Delay 100
  326.                                         reply = 1 ; 1 = ok
  327.                                 EndIf
  328.                                 DrawImage gfxFullScreen, 0, 0
  329.                                 Flip 0
  330.                         Until reply <> 0
  331.                 Case 2  ; requires text to display message - two buttons 'YES' and 'NO'
  332.                         CopyRect 0, 0, GraphicsWidth(), GraphicsHeight(), 0, 0, BackBuffer(), ImageBuffer(gfxFullScreen)
  333.                         x1_1 = x1_1 + x : y1_1 = y1_1 + y : x1_2 = x1_2 + x : y1_2 = y1_2 + y
  334.                         x2_1 = x2_1 + x : y2_1 = y2_1 + y : x2_2 = x2_2 + x : y2_2 = y2_2 + y
  335.                         Repeat
  336.                                 ML = MouseHit(1)
  337.                                 If ML = True And MouseX() > x1_1 And MouseX() < x1_2 And MouseY() > y1_1 And MouseY() < y1_2
  338.                                         DrawImage gfxFullScreen, 0, 0
  339.                                         DrawImage gfxActiveBtn, x1_1, y1_1
  340.                                         Flip 0 : Delay 200
  341.                                         DrawImage gfxFullScreen, 0, 0
  342.                                         Flip 0 : Delay 100
  343.                                         reply = 2 : ML = 0 ; 2 = yes
  344.                                 EndIf
  345.                                 If ML = True And MouseX() > x2_1 And MouseX() < x2_2 And MouseY() > y2_1 And MouseY() < y2_2
  346.                                         DrawImage gfxFullScreen, 0, 0
  347.                                         DrawImage gfxActiveBtn, x2_1, y2_1
  348.                                         Flip 0 : Delay 200
  349.                                         DrawImage gfxFullScreen, 0, 0
  350.                                         Flip 0 : Delay 100
  351.                                         reply = 3 : ML = 0 ; 3 = no
  352.                                 EndIf
  353.                                 DrawImage gfxFullScreen, 0, 0
  354.                                 Flip 0
  355.                         Until reply <> 0
  356.                 Case 3  ; requires text to display message - three buttons 'YES', 'NO' and 'CANCEL'
  357.                         CopyRect 0, 0, GraphicsWidth(), GraphicsHeight(), 0, 0, BackBuffer(), ImageBuffer(gfxFullScreen)
  358.                         x1_1 = x1_1 + x : y1_1 = y1_1 + y : x1_2 = x1_2 + x : y1_2 = y1_2 + y
  359.                         x2_1 = x2_1 + x : y2_1 = y2_1 + y : x2_2 = x2_2 + x : y2_2 = y2_2 + y
  360.                         x3_1 = x3_1 + x : y3_1 = y3_1 + y : x3_2 = x3_2 + x : y3_2 = y3_2 + y
  361.                         Repeat
  362.                                 ML = MouseHit(1)
  363.                                 If ML = True And MouseX() > x1_1 And MouseX() < x1_2 And MouseY() > y1_1 And MouseY() < y1_2
  364.                                         DrawImage gfxFullScreen, 0, 0
  365.                                         DrawImage gfxActiveBtn, x1_1, y1_1
  366.                                         Flip 0 : Delay 200
  367.                                         DrawImage gfxFullScreen, 0, 0
  368.                                         Flip 0 : Delay 100
  369.                                         reply = 2 : ML = 0 ; 2 = yes
  370.                                 EndIf
  371.                                 If ML = True And MouseX() > x2_1 And MouseX() < x2_2 And MouseY() > y2_1 And MouseY() < y2_2
  372.                                         DrawImage gfxFullScreen, 0, 0
  373.                                         DrawImage gfxActiveBtn, x2_1, y2_1
  374.                                         Flip 0 : Delay 200
  375.                                         DrawImage gfxFullScreen, 0, 0
  376.                                         Flip 0 : Delay 100
  377.                                         reply = 3 : ML = 0 ; 3 = no
  378.                                 EndIf
  379.                                 If ML = True And MouseX() > x3_1 And MouseX() < x3_2 And MouseY() > y3_1 And MouseY() < y3_2
  380.                                         DrawImage gfxFullScreen, 0, 0
  381.                                         DrawImage gfxActiveBtn, x3_1, y3_1
  382.                                         Flip 0 : Delay 200
  383.                                         DrawImage gfxFullScreen, 0, 0
  384.                                         Flip 0 : Delay 100
  385.                                         reply = 4 : ML = 0 ; 4 = cancel
  386.                                 EndIf
  387.                                 DrawImage gfxFullScreen, 0, 0
  388.                                 Flip 0
  389.                         Until reply <> 0
  390.                 Default
  391.                         Notify "number other than specified in function AdviceWindowOption()!"
  392.         End Select
  393.         FreeImage gfxGeneric
  394.         If fontfree = True Then FreeFont fntGeneric
  395.         If fontfreelarge = True FreeFont fntStandardLarge
  396.         FreeImage gfxActiveBtn
  397.         FreeImage gfxFullScreen
  398.         Return reply
  399. End Function
  400.  
  401. AppTitle "test of Options Function V0.1"
  402. SeedRnd MilliSecs()
  403.  
  404. Const C_screenWidth             = 800           ; width of game screen
  405. Const C_screenHeight    = 600           ; height of game screen
  406. Const C_screenDepth             = 32            ; depth of game screen
  407. Const C_screenType              = 2                     ; type is windowed or full screen - 1 = full screen, 2 = windowed
  408.  
  409. Global fntStandard = LoadFont("Comic Sans MS",24, False, False, False)
  410. Global fntSmallB = LoadFont("Comic Sans MS",48, True, False, False)
  411. Global gfxTest = LoadImage ("Advice window test image.bmp") ; change this to test own graphics
  412.  
  413. Graphics C_screenWidth, C_screenHeight, C_screenDepth, C_screenType
  414. ClsColor 0, 0, 0
  415. SetBuffer(BackBuffer())
  416.  
  417. .again
  418. Repeat
  419.         Cls
  420.         ; what the function is passed - (number, gfxGeneric, custom_width, custom_hight, fntGeneric, btnTextColor, message$, boolean)
  421.        
  422.         SetFont fntSmallB : Color 255, 255, 255
  423.         Text C_screenWidth / 2, C_screenHeight / 6, "Press keys 1 - 4", True, False
  424.         ; press a key to select a window
  425.         Select True ; all options used here display as defaults - except text, default text is ""
  426.                 Case KeyHit(2) ; '1' key
  427.                         answer = AdviceWindowOption(0, 0, 0, 0, 0, 0, "Default Font", False) ;  no buttons
  428.                         mills = MilliSecs() : FlushKeys
  429.                 Case KeyHit(3) ; '2' key
  430.                         answer = AdviceWindowOption(1, 0, 0, 0, 0, 0, "Default Font", False) ;  one button 'ok'
  431.                         mills = MilliSecs() : FlushKeys
  432.                 Case KeyHit(4) ; '3' key
  433.                         answer = AdviceWindowOption(2, 0, 0, 0, 0, 0, "Default Font", False) ;  two button 'yes' & 'no'
  434.                         mills = MilliSecs() : FlushKeys
  435.                 Case KeyHit(5) ; '4' key
  436.                         answer = AdviceWindowOption(3, 0, 0, 0, 0, 0, "Default Font", False) ;  three buttons 'yes', 'no' & 'cancel'
  437.                         mills = MilliSecs() : FlushKeys
  438.         End Select
  439.         ; outputs what response was given by user
  440.         Select answer
  441.                 Case 0 ; no button clicked - normally not required to use return from function
  442.                         Text C_screenWidth / 2, C_screenHeight / 2, "No Buttons to 'click'", True, False
  443.                 Case 1 ; ok button
  444.                         ; code here would be for what to do with answer (return)
  445.                         Text C_screenWidth / 2, C_screenHeight / 2, "OK Button", True, False
  446.                 Case 2 ; yes button
  447.                         ; code here would be for what to do with answer (return)
  448.                         Text C_screenWidth / 2, C_screenHeight / 2, "Yes Button", True, False
  449.                 Case 3 ; no button
  450.                         ; code here would be for what to do with answer (return)
  451.                         Text C_screenWidth / 2, C_screenHeight / 2, "No Button", True, False
  452.                 Case 4 ; cancel button
  453.                         ; code here would be for what to do with answer (return)
  454.                         Text C_screenWidth / 2, C_screenHeight / 2, "Cancel Button", True, False
  455.         End Select
  456.         ; resets variable 'answer' to stop displaying
  457.         If mills + 1000 < MilliSecs()
  458.                 answer = 999
  459.         EndIf
  460.         Flip
  461.  
  462. Until KeyHit(1)
  463.  
  464. ; font changed from default
  465. answer = AdviceWindowOption(2, 0, 0, 0, fntStandard, 0, "Please confirm you wish to quit program?", False) ;  two button 'yes' & 'no'
  466.  
  467. If answer = 3 Then Goto again
  468.  
  469. If answer = 2
  470.         FreeFont fntStandard : FreeFont fntSmallB : FreeImage gfxTest
  471. EndIf
  472.  
  473. EndGraphics : End
  474.  
  475. Include "AdviceWindowOption.bb" ; ensure correct path for include function or copy and paste here instead


Comments :


Steven Noyce(Posted 1+ years ago)

 I am confused.  What is up with the include at the bottom?  Why does this not work if I copy and paste?  I admit I did not spend a whole lot of time trying to figure out what was wrong, but I did sped some time and couldn't figure it out.Help!


mv333(Posted 1+ years ago)

 <div class="quote"> What is up with the include at the bottom? </div>The AdviceWindowOption function is already included in the code, so just remove that last line.<div class="quote"> Why does this not work if I copy and paste? </div>Because it's for BlitzPlus. It works for me in Blitz3D, if i remove the "Notify" line, and the "SetFont fntSmallB" line. I don't understand why that second one kept giving me a "Font does not exist" Runtime Error. Maybe someone else can explain that one......


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal