Después de mi C++ Builder in the requirements, una de las tareas que se nos encargó como Most Valuable Professional (MVP) de Embarcadero, fue la de crear una calculadora y grabar esa actividad en vídeo. Ello permitirá ver cómo se usan las herramientas y cómo mejorarlas.
Siendo la mayoría MVP de Delphi, me apetecía mucho participar, pero no quería (ni podía) dedicarle horas y horas. Estuve 10 o 15 minutos pensando y mirando en la documentación, hasta que al final encontré un enfoque sencillo y rápido de implementar que cumplía con los criterios de «calculadora», y que además era RAD. Por supuesto le falta toda la gestión de errores, y el código es muy mejorable. Pero como prueba de concepto servía.
Invertí media hora buscando softwares gratuitos que permitieran grabar la pantalla en vídeo, y finalmente, algo más de 10 minutos en programar y probar la GutiCalculator. Desarrollar un software nativo para Windows, por sencillo que éste sea en tan sólo 10 minutos, da una idea de la productividad que ofrece RAD Studio y C++ Builder.
Para evitar que termine perdiéndose, os dejo el vídeo del making-off:
Este es la única función de usuario que se encarga de manejar toda la operativa:
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormKeyPress(TObject *Sender, System::WideChar &Key)
{
static String sLastDisplay = "";
//Add digits
if ((isdigit(Key)) && (lblDisplay->Caption.Length() < 19))
{
lblDisplay->Caption += Key;
}
//Manage operations
else if ((Key == '+') || (Key == '-') || (Key == '*') || (Key == '/'))
{
sLastDisplay = lblDisplay->Caption;
lblDisplay->Caption = "";
lblOperation->Caption = Key;
}
//Clear display
else if (Key == 27)
{
lblDisplay->Caption = "";
lblOperation->Caption = "";
}
//Remove last char
else if ((Key == '\b') && (lblDisplay->Caption.Length() > 0))
{
lblDisplay->Caption = LeftStr(lblDisplay->Caption, lblDisplay->Caption.Length() - 1);
}
//Show result
else if ((Key == '\r') || (Key == '='))
{
if (lblOperation->Caption == '+')
{
lblDisplay->Caption = StrToInt64(sLastDisplay) + StrToInt64(lblDisplay->Caption);
}
else if (lblOperation->Caption == '-')
{
lblDisplay->Caption = StrToInt64(sLastDisplay) - StrToInt64(lblDisplay->Caption);
}
else if (lblOperation->Caption == '*')
{
lblDisplay->Caption = StrToInt64(sLastDisplay) * StrToInt64(lblDisplay->Caption);
}
else if (lblOperation->Caption == '/')
{
lblDisplay->Caption = StrToInt64(sLastDisplay) / StrToInt64(lblDisplay->Caption);
}
}
}
Y por supuesto, el código fuente completo y el binario enlazado estáticamente para Win32 aqui (1 MB. en formato ZIP).
Muy buena e importante información, ciertamente una herramienta tremenda.
Gracias por compartirla Guti, te mando un abrazo amigo. Saludos.
Gracias por estar ahí y por todo el soporte Ricardo.