Vamos a ver cuál sería nuestro primer componente completo. La finalidad de este componente es muy básica. Sun funcionalidad consiste en que se instale el componente de la aplicacion al cargarse dentro de la barra de tareas y que se destruya cuando se cierre la aplicación como hacen algunas aplicaciones del mercado.
El código sería el siguiente :
/--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "BarraTareas.h" #pragma package(smart_init) //--------------------------------------------------------------------------- // ValidCtrCheck is used to assure that the components created do not have // any pure virtual functions. // static inline void ValidCtrCheck(TBarraTareas *) { new TBarraTareas(NULL); } //--------------------------------------------------------------------------- __fastcall TBarraTareas::TBarraTareas(TComponent* Owner) : TComponent(Owner) { CMMESSAGEICON = 401; FForm = new TForm(Application,0); FForm = (TForm*)this->Owner; tnd.uID = (UINT)IDI_WINLOGO; tnd.cbSize = sizeof (NOTIFYICONDATA); tnd.hWnd = ((TForm*)(this->Owner))->Handle; tnd.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP; tnd.uCallbackMessage = CMMESSAGEICON; tnd.hIcon = ((TForm*)(this->Owner))->Icon->Handle; Shell_NotifyIcon (NIM_ADD, &tnd); } //--------------------------------------------------------------------------- __fastcall TBarraTareas::~TBarraTareas() { Shell_NotifyIcon (NIM_DELETE, &tnd); } //--------------------------------------------------------------------------- namespace Barratareas { void __fastcall PACKAGE Register() { TComponentClass classes[1] = {__classid(TBarraTareas)}; RegisterComponents("Samples", classes, 0); } } //--------------------------------------------------------------------------- |
Y el archivo de cabecera quedaría de la siguiente manera :
//--------------------------------------------------------------------------- #ifndef BarraTareasH #define BarraTareasH //--------------------------------------------------------------------------- #include <SysUtils.hpp> #include <Controls.hpp> #include <Classes.hpp> #include <Forms.hpp> #include "ShellApi32.h" //--------------------------------------------------------------------------- class PACKAGE TBarraTareas : public TComponent { private: TForm *FForm; UINT CMMESSAGEICON; NOTIFYICONDATA tnd; protected: public: __fastcall TBarraTareas(TComponent* Owner); __fastcall TBarraTareas::~TBarraTareas(); __published: }; //--------------------------------------------------------------------------- #endif |
El único código que quizás nos pueda despistar un poco es la utilización de la propiedad OWNER del componente que explicaremos en el siguiente apartado.