Subject Re: Borderless Button
From Michael <michael@itntgroup.com.au>
Date Sun, 17 Feb 2019 21:29:51 -0500
Newsgroups dbase.getting-started

Thanks Mervyn, thats exactly what I was looking for, I would never have worked out how to do it.

What limitations are there?

Best Regards,

Michael.


Mervyn Bick Wrote:

> On 2019-02-17 9:37 AM, Michael wrote:
> > Hi Guys,
> >
> > Is there some way we can make the button completely borderless?
> >   It seems if you put it on a blank canvass and select none as the border it still have a slight line on the right and bottom. I would like to have it completely borderless so that I can blend it in with images but still have all the button characteristics.
>
> Yes but there are conditions and limitations.
>
> In the form's form_onOpen event handler add
>
>        if type("SendMessageA") # "FP"
>           extern clong SendMessageA(chandle, cint, cword, clong) user32
>        endif
>        #define TB_MARKBUTTON 0x406
>        #define TB_BUTTON_IDENTIFIER 0x10
>        #define TB_FALSE 0
>        #define TB_TRUE 1
>  
> SendMessageA(this.pushbutton1.hWnd,TB_MARKBUTTON,TB_BUTTON_IDENTIFIER,TB_FALSE)
>        //Send the message to all pushbuttons you want to appear flat
>
>
> Each pushbutton must have it's systemTheme property set false.
>
> If you set the pushbutton's speedBar property true the user can't tab to it.
>
> If you leave the pushbutton's speedBar property false (the default) the
> user can tab to the control but a dotted box appears on the pushbutton
> when it has focus.
>
> A little example is attached.
>
> Mervyn.
>
> ** END HEADER -- do not remove this line
> //
> // Generated on 2019-02-17
> //
> parameter bModal
> local f
> f = new flat_buttonForm()
> if (bModal)
>    f.mdi = false // ensure not MDI
>    f.readModal()
> else
>    f.open()
> endif
>
> class flat_buttonForm of FORM
>    with (this)
>       onOpen = class::FORM_ONOPEN
>       height = 16.0
>       left = 52.5714
>       top = 1.1364
>       width = 40.0
>       text = ""
>       systemTheme = true
>    endwith
>
>    this.PUSHBUTTON1 = new PUSHBUTTON(this)
>    with (this.PUSHBUTTON1)
>       onClick = class::PUSHBUTTON1_ONCLICK
>       systemTheme = false
>       height = 1.0909
>       left = 12.0
>       top = 1.0
>       width = 15.2857
>       text = ""
>       borderStyle = 4        // Single
>    endwith
>
>    this.PUSHBUTTON2 = new PUSHBUTTON(this)
>    with (this.PUSHBUTTON2)
>       onClick = class::PUSHBUTTON2_ONCLICK
>       systemTheme = false
>       height = 1.0909
>       left = 12.0
>       top = 4.5
>       width = 15.2857
>       text = ""
>       speedBar = true
>       borderStyle = 4        // Single
>    endwith
>
>    this.PUSHBUTTON3 = new PUSHBUTTON(this)
>    with (this.PUSHBUTTON3)
>       height = 1.0909
>       left = 12.0
>       top = 8.0
>       width = 15.2857
>       text = "Pushbutton3"
>    endwith
>
>    this.RADIOBUTTON1 = new RADIOBUTTON(this)
>    with (this.RADIOBUTTON1)
>       onChange = class::RADIOBUTTON1_ONCHANGE
>       height = 1.0909
>       left = 12.0
>       top = 11.5
>       width = 15.7143
>       text = "Show borders"
>       group = true
>       value = true
>    endwith
>
>    this.RADIOBUTTON2 = new RADIOBUTTON(this)
>    with (this.RADIOBUTTON2)
>       height = 1.0909
>       left = 12.0
>       top = 14.0
>       width = 15.7143
>       text = "Hide borders"
>    endwith
>
>    this.TEXTLABEL1 = new TEXTLABEL(this)
>    with (this.TEXTLABEL1)
>       height = 1.0
>       left = 8.0
>       top = 1.0909
>       width = 3.0
>       text = "*"
>       fontSize = 14.0
>       alignHorizontal = 2        // Right
>    endwith
>
>    this.TEXTLABEL2 = new TEXTLABEL(this)
>    with (this.TEXTLABEL2)
>       height = 1.0
>       left = 8.0
>       top = 4.5
>       width = 3.0
>       text = "*"
>       fontSize = 14.0
>       alignHorizontal = 2        // Right
>    endwith
>
>    this.TEXTLABEL3 = new TEXTLABEL(this)
>    with (this.TEXTLABEL3)
>       height = 1.0
>       left = 28.0
>       top = 1.0909
>       width = 12.0
>       text = "*"
>       fontSize = 14.0
>    endwith
>
>    this.TEXTLABEL4 = new TEXTLABEL(this)
>    with (this.TEXTLABEL4)
>       height = 1.0
>       left = 28.0
>       top = 4.5
>       width = 12.0
>       text = "*"
>       fontSize = 14.0
>    endwith
>
>
>    function PUSHBUTTON1_onClick()
>       ? 'PB1 clicked'
>       return
>
>    function PUSHBUTTON2_onClick()
>       ? 'PB2 clicked'
>       return
>
>    function RADIOBUTTON1_onChange()
>       if this.value = true
>          form.pushbutton1.borderStyle = 4
>          form.pushbutton2.borderStyle = 4
>       else
>          form.pushbutton1.borderStyle = 3
>          form.pushbutton2.borderStyle = 3
>       endif  
>       return
>
>    function form_onOpen()
>       if type("SendMessageA") # "FP"
>          extern clong SendMessageA(chandle, cint, cword, clong) user32
>       endif
>       #define TB_MARKBUTTON 0x406
>       #define TB_BUTTON_IDENTIFIER 0x10
>       #define TB_FALSE 0
>       #define TB_TRUE 1      
>       SendMessageA(this.pushbutton1.hWnd,TB_MARKBUTTON,TB_BUTTON_IDENTIFIER,TB_FALSE)
>       SendMessageA(this.pushbutton2.hWnd,TB_MARKBUTTON,TB_BUTTON_IDENTIFIER,TB_FALSE)
>       clear
>       return
>
> endclass
>