AdvancedCharacterControl (C++)

From RAD Studio Code Examples
Jump to: navigation, search

Language:

Description

The following example demostrates the use of some advanced method in the Character unit. An edit box is configured to allow 2 unicode characters (since there may be surrogate pairs).

Code

__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TForm(Owner)
{
        /* Allow two characters to be typed into
        the edit box. In case of Unicode surrogates,
        2 characters represent one real character.
        */
        edtChar->MaxLength = 2;
}
 
void __fastcall TMainForm::edtCharChange(TObject *Sender)
{
        UCS4Char u4;
        TUnicodeCategory cat;
        String value;
 
        value = edtChar->Text;
 
        /* Do nothing on empty edit */
        if (value == "")
                return;
 
        /* Note that 2 characters may represent a surrogate pair!
         Only allow control codes and alpha-numeric values in */
        if (!Character::IsLetterOrDigit(value[1]) &&
                !Character::IsControl(value[1]) &&
                !IsSurrogate(value[1]))
                return;
 
        /* Covert the entered char to UCS4 */
        u4 = ConvertToUtf32(value, 1);
 
        /* And now convert back */
        if (ConvertFromUtf32(u4) != value)
                MessageDlg("Cannot happen!", mtError, TMsgDlgButtons() << mbOK, 0);
 
        MessageDlg("The numeric value of the character is " +
                FloatToStr(GetNumericValue(value[1])), mtInformation, TMsgDlgButtons() << mbOK, 0);
 
        /* Get the unicode category of the character */
        cat = GetUnicodeCategory(value[1]);
 
        MessageDlg(Format("The character '%s' category is: %d ",
                ARRAYOFCONST((value[1], cat))), mtInformation, TMsgDlgButtons() << mbOK, 0);
}

Uses

Personal tools