AdvancedCharacterControl (C++)
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
- System.Character.IsLetterOrDigit ( fr | de | ja )
- System.Character.IsControl ( fr | de | ja )
- System.Character.ConvertFromUtf32 ( fr | de | ja )
- System.Character.GetNumericValue ( fr | de | ja )
- System.Character.GetUnicodeCategory ( fr | de | ja )
- System.Character.TUnicodeCategory ( fr | de | ja )
- Vcl.StdCtrls.TCustomEdit.MaxLength ( fr | de | ja )