AdvancedCharacterControl (C++)
From RAD Studio Code Examples
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
- 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 )