MVP calculadora en C++ Builder

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.

MVP calculadora en C++ Builder

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).

MVP calculadora en C++ Builder MVP calculadora en C++ Builder MVP calculadora en C++ Builder MVP calculadora en C++ Builder

2 comentarios en “MVP calculadora en C++ Builder”

  1. Muy buena e importante información, ciertamente una herramienta tremenda.
    Gracias por compartirla Guti, te mando un abrazo amigo. Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *