The easiest way to create custom controls for DataFlex WebApp is to use the cWebHtmlBox class

The cWebHtmlBox class is a simple control that allows the developer to send custom HTML code to the client

Lets see how this works

//

Object oMyCustomHtml is a cWebHtmlBox
    Set psHtml to "<b>Hello World</b>
End_Object

the code above would show the text “Hello World” in bold

Now lets create a class for a simple test control

//

// use DAW WebHtmlBox class
Use cWebHtmlBox.pkg

Class cMyCustomControl is a cWebHtmlBox
    Procedure Construct_Object
        Forward Send Construct_Object

        Set psHtml To "<b>Hello World</b>"
    End_Procedure
End_Class

The code above is a new class that creates our custom control that shows the bold Hello World text.

Now lets try to do something a little more functional

Lets create a class that uses the psLabel property for a text label and creates custom HTML including the use of custom CSS styling and we also add a property to change the appearance of the label in code

//

Class cMyCustomControl is a cWebHtmlBox
    Procedure Construct_Object
        Forward Send Construct_Object

        Property Boolean pbBold False        
    End_Procedure
    
    Function HtmlValue String sLabel Returns String
        String sHtml
        If (pbBold(Self)) Begin
            Move  ('<div Class="myCustomControl"><span><b>'+sLabel+'</b></span></div>') to sHtml            

            // or we could use a different css class for the bold option
            // Move  ('<div Class="myCustomControlBold"><span><b>'+sLabel+'</b></span></div>') to sHtml            
        End
        Else Begin
            Move  ('<div Class="myCustomControl"><span>'+sLabel+'</span></div>') to sHtml            
        End
        
        Function_Return sHtml
    End_Function
    
    Procedure Set psLabel String sLabel
        String sHtml
        
        Get HtmlValue sLabel to sHtml
                
        Set psHtml to sHtml
    End_Procedure
    
    Procedure DoSetLabel String sLabel
        String sHtml

        Get HtmlValue sLabel to sHtml

        Send UpdateHtml 
    End_Procedure
End_Class

in the above code we create a property with the name of pbBold.

The HtmlValue function accepts a string parameter and then builds a small piece of HTML code. It builds different html depending on the pbBold property.

In addition we define a setter for the psLabel property that in turn calls the HtmlValue function to get the HTML code and then sets the psHtml web property.

Another method the DoSetLabelmethod is declared to allow dynamic changing of the content during runtime without the use of web properties to avoid the overhead of the content of the property being syncronized

to use the new class we can use the following code

//

Object oMyCustomHtml is a cMyCustomControl
    Set pbBold to True
    Set psLabel to "Hello World"
End_Object

In order to add CSS styling we have to create a CSS style. In order to do this we can create a new CSS file in the AppHtml folder. Lets create a text file called myustomControl.css and add the following CSS

//

.myCustomControl {
    border: 2px solid red;
}

this will create a red border with 2 pixels width around our control

but in order for the web application to find our style we need to modify the web applications index.html file

open the index.html file and modify as shown below

//

    <!-- DataFlex Custom Controls (do not remove this line, used for automatic insertion) -->

    <link rel="stylesheet" type="text/css" href="myustomControl.css" />

make sure to refresh the browser to reload the index.html file and the control should now use the new styling

This is a very simple way of creating a custom control and is also rather limited. We will also show how to add more sophisticated controls using Javascript as well