FMXStringHandling (C++)
Contents
Description
This example is a Multi-Device Application that shows how to handle strings in a FMX Form. It is a simple register framework that checks if the entered username and password are valid for registration.
To build and test this example, create a Multi-Device Application - C++, then add the next objects to the form:
- 3 TEdit controls and name them
usernameEdit
,passwordEdit
andrPasswordEdit
. - 3 TLabel controls.
- 2 TButton controls and name them
clearButton
andregisterButton
.
Code
Add the following code to the OnCreate event handler of the form:
// ---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender) {
passwordEdit->Password = true;
rPasswordEdit->Password = true;
Label1->Text = "Username:";
Label2->Text = "Password:";
Label3->Text = "Re-enter password:";
}
At this moment the form should look like in the following image:
Add the following code to the OnClick event handler of the clearButton
:
// ---------------------------------------------------------------------------
void __fastcall TForm1::clearButtonClick(TObject *Sender) {
usernameEdit->Text = "";
passwordEdit->Text = "";
rPasswordEdit->Text = "";
}
The example accepts an username with the length between 5 and 25 characters and that begins with a letter. An accepted password has between 6 and 32 characters and contains a digit, a lowercase letter, a capital letter and a special character(#,$,%,...). Also the password and the re-entered password must match.
The following piece of code contains two functions that are used to verify the username and the password strings:
// ---------------------------------------------------------------------------
bool __fastcall checkUserName(String username) {
// check length
if (username.Length() < 5 || username.Length() > 25) {
ShowMessage("Username must be between 5 and 25 characters long");
return false;
}
// verify if first letter is a character
if (TCharacter::IsDigit(username[1])) {
ShowMessage("Username must begin with a letter");
return false;
}
return true;
}
// ---------------------------------------------------------------------------
bool __fastcall checkPassword(String password, String rPassword) {
// check password length
if (password.Length() < 6 || password.Length() > 32) {
ShowMessage("Your password must be 6 to 32 characters long");
return false;
}
// parse the password string to look for a letter uppercase,
// a letter lowercase, a number and a special character
bool uppercase = false, lowercase = false, number = false,
specialChar = false;
for (int i = 1; i <= password.Length(); i++) {
if (TCharacter::IsDigit(password[i])) {
number = true;
}
else if (TCharacter::IsLetter(password[i])) {
if (TCharacter::IsUpper(password[i])) {
uppercase = true;
}
if (TCharacter::IsLower(password[i])) {
lowercase = true;
}
}
if (TCharacter::IsSymbol(password[i]) || TCharacter::IsPunctuation
(password[i]) || TCharacter::IsSeparator(password[i])) {
specialChar = true;
}
}
if (!uppercase) {
ShowMessage("Password must contain an capital letter!");
return false;
}
if (!lowercase) {
ShowMessage("Password must contain a lowercase letter!");
return false;
}
if (!number) {
ShowMessage("Password must contain a number!");
return false;
}
if (!specialChar) {
ShowMessage("Password must contain a special character!");
return false;
}
// check if the two password match
if (password.Compare(rPassword)) {
ShowMessage(
"The passwords you entered do not match! Please try again!");
return false;
}
return true;
And finally, and the following piece of code to the OnClick event handler of the registerButton
:
// ---------------------------------------------------------------------------
void __fastcall TForm1::registerButtonClick(TObject *Sender) {
System::String username;
System::String password;
System::String rPassword;
username = usernameEdit->Text;
password = passwordEdit->Text;
rPassword = rPasswordEdit->Text;
if (checkUserName(username) && checkPassword(password, rPassword)) {
// add information to INI file
ShowMessage("Success!");
}
}
Uses
- System.String
- System.UnicodeString.Length
- System.UnicodeString.Compare
- System.Character.TCharacter
- System.Character.TCharacter.IsUpper
- System.Character.TCharacter.IsLower
- System.Character.TCharacter.IsDigit
- System.Character.TCharacter.IsSymbol
- System.Character.TCharacter.IsLetter
- System.Character.TCharacter.IsPunctuation
- System.Character.TCharacter.IsSeparator
- FMX.Edit.TEdit
- FMX.Edit.TEdit.Password
- FMX.StdCtrls.TLabel
- FMX.Controls.TTextControl.Text
- FMX.StdCtrls.TButton
- FMX.Controls.TControl.OnClick
- FMX.Forms.TForm.OnCreate