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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | //--------------------------------------------------------------------------- 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.