Showing posts with label user interface. Show all posts
Showing posts with label user interface. Show all posts

Thursday, June 8, 2017

How to change user font

static void tmxSetUserFont(Args _args)
{
    #define.fontName('Arial')
    #define.fontSize(8)
    UserInfo userInfo;

    select forUpdate userInfo
        where userInfo.id == curUserId();
    if(userInfo)
    {
        ttsBegin;
        userInfo.formFontName = #fontName;
        userInfo.formFontSize = #fontSize;
        userInfo.update();
        info(strFmt("New user '%3' font set to '%1' of '%2' size", userInfo.formFontName, userInfo.formFontSize, userInfo.id));
        ttsCommit;
    }
    else
    {
        error(strFmt("User '%1' not found!", curUserId()));
    }

}

Monday, July 11, 2011

Paint it black: How to color rows in Table form control

There a lot of answers on how to color grid lines and cells -- for example, this DisplayOption using from DAXGuy. However, my goal is to show how one can paint rows in Table form control. I use the standard tutorial form tutorial_Form_Table from AX2009.

On the table control, we need to change a bit EditControl method where we define in which color the current row will be painted. (Here, I provided you with a link where you can choose RGB colors to paint the hell at your own.)


// Color the active line in a table
FormControl editControl(int column, int row)
{
    #DEFINE.colorDarkTurkoise(112,147,219)                  // colors at your personal perception of hell
    #DEFINE.colorNeonBlue(77,77,255)
    #DEFINE.colorRosyBrown(255,193,193)
    #DEFINE.colorSaddleBrown(139,69,19)
    int oldStrColor = WinApi::RGB2int(#colorRosyBrown);     // colors for cells not in focus
    int oldIntColor = WinApi::RGB2int(#colorSaddleBrown);
    int newIntColor = WinApi::RGB2int(#colorNeonBlue);      // colors for the selected line
    int newStrColor = WinApi::RGB2int(#colorDarkTurkoise);
    ;
    // this is columns with int controls
    if ((column == 2) || (column == 4))
    {
        // not in the header
        if (row > 1)
        {
            // this is in the selected line
            if (row == table.row())
                intEdit.backgroundColor(newIntColor);
            else
                intEdit.backgroundColor(oldIntColor);
            return intEdit;
        }
        // this is the header
        else
        {
            if (row == table.row())
                editline.backgroundColor(newStrColor);
            else
                editline.backgroundColor(oldStrColor);
            return editline;
        }
    }
    else
    {
        if (row == table.row())
            editline.backgroundColor(newStrColor);
        else
            editline.backgroundColor(oldStrColor);
        return editline;
    }

}

So, when the user selects another row, all its controls change their color--it's your responsibility to return the correct form control: StringEdit, IntEdit and so on.

The second method where we redraw the form is activeCellChanged.


public void activeCellChanged()
{
    ;
    super();
    // do not forget to repaint the form!
    element.redraw();
}

Coloring can be realized much more complicated with different color scheme, calculated conditions etc.

Monday, December 21, 2009

Phone Number Formatting Mask

It is pity but AX does not have the mask functionality on StringEdit fields. (versions 3.x- 4.x at least)

I changed the standard functionality for Phone field of Customers form so that the input phone number will be formatted as (xxx) xxx-xxxx[x]

For example, if one input 1234567890 it will be presented and saved as (123) 456-7890

===>

For 12fs3.45*6.78--90 it will be presented and saved as (123) 456-7890 with no non-numericals.

12345678901234567 will be as (123) 456-7890123456 it does not truncate the tail.

If finally it does not look like (xxx) xxx-xxxx the system alerts the user about that however the input value will be saved.



The following methods were added/changed:

ClassDeclaration of Customers form

public class FormRun extends ObjectRun
{
...

boolean sisValidateCalled;
}


StringEdit Phone field methods:

public void enter()
{
super();
sisValidateCalled = false;
}

public boolean validate()
{
#define.CorrectPhoneLettersNumber(14)
boolean ret;
int length;
Phone newPhone;
;
ret = super();

// creates new phone number in the format (xxx) xxx-xxxx[x]
newPhone = SISTools::formatPhoneNumber(this.text());
length = strlen(newPhone);

if (length != #CorrectPhoneLettersNumber)
checkFailed(strfmt("Phone numbers should be like: (xxx) xxx-xxxx"));

CustTable.Phone = newPhone;
CustTable_ds.write();
sisValidateCalled = true;
return ret;
}
public boolean leave()
{
boolean ret;

ret = super();

if (!sisValidateCalled)
this.validate();

return ret;
}

SISTools class (some collection of utilities)

// creates new phone number in the format (xxx) xxx-xxxx[x]
static public Phone formatPhoneNumber(Phone _phone = "")
{
Phone newPhone = "";
str char;
int length = strlen(_phone);
int i;
container numbers = ['0','1','2','3','4','5','6','7','8','9'];
;
// remove all non numbers from field text
for (i=1; i<=length; i++)
{
char = substr(_phone,i,1);
if (confind(numbers,char))
{
newPhone = newPhone + char;
}
}
length = strlen(newPhone);

// create new phone number in the format (xxx) xxx-xxxx from 1234567890
newPhone = "(" + substr(newPhone,1,3) + ") " + substr(newPhone,4,3) + "-" + substr(newPhone,7, length-6);

return newPhone;
}

Inspired by Sonny Wibaba Adi