(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Шаблоны форм, создание и применение (исходники)

Источник: Reacoding

Создание графического интерфейса программы как правило отнимает 50 и более процентов времени, затрачиваемого на ее разработку. Причем, при создании приложений, работающих с реляционными базами данных, приходится создавать довольно большое количество форм для отображения/изменения данных различного рода справочных таблиц. Так же, практически каждое приложение содержит форму About, показывающую информацию о проекте и разработчике. Разумеется, глупо и не производительно тратить время на создание функционально одних и тех же форм. Вот здесь в помощь разработчику Borland C++ Builder предлагает такой мощный инструмент, как Object Repository, позволяющий совместно или повторно использовать формы, проекты, модули данных и т.д.

При создании шаблона необходимо сделать его максимально законченным и функциональным. Так при создании справочников, необходимо, чтобы форма была полностью функциональной, за исключением работы с базой данных. А при создании формы About это требование еще жестче - форма должна быть абсолютно функциональной. Ведь она создается один раз для всех приложений и является визитной карточкой разработчика.

Для начала нужно создать новый проект и сохранить его в отдельной папке под именем MyAbout. Далее в качестве заготовки будем использовать стандартное окно About, предлагаемое в Borland C++ Builder. Для его добавления в приложение выберем команду File->New->Other и во вкладке Forms диалогового окна New Items выберите пиктограмму About box.

Теперь в соответствии со своим собственным эстетическим представлением исправляем внешний вид формы и сохраняем с именем MyAboutBox (имя для формы AboutBoxMy). К примеру, пусть это будет выглядеть так:

Теперь пишем исполняемый код. Ниже приведены примеры листингов:
MyAboutBox.h
//----------------------------------------------------------------------------
#ifndef MyAboutBoxH
#define MyAboutBoxH
//----------------------------------------------------------------------------
#include <vclSystem.hpp>
#include <vclWindows.hpp>
#include <vclSysUtils.hpp>
#include <vclClasses.hpp>
#include <vclGraphics.hpp>
#include <vclForms.hpp>
#include <vclControls.hpp>
#include <vclStdCtrls.hpp>
#include <vclButtons.hpp>
#include <vclExtCtrls.hpp>
#include "Animate.hpp"
#include "GIFCtrl.hpp"
//----------------------------------------------------------------------------
class TAboutBoxMy : public TForm
{
__published:
   TPanel *Panel1;
   TLabel *ProductName;
   TLabel *Version;
   TLabel *Copyright;
   TLabel *Comments;
   TButton *OKButton;
   TLabel *Company;
   TLabel *Author;
   TPanel *Panel2;
   TRxGIFAnimator *ProgPic;
   TLabel *ProdName;
   void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
   void __fastcall FormActivate(TObject *Sender);
   void __fastcall FormCreate(TObject *Sender);
   void __fastcall AuthorClick(TObject *Sender);
private:
   struct TransArray
   {
      WORD LangID, CharSet;
   };
   TransArray *Array;
   DWORD VerInfo,VerSize;
   HANDLE MemHandle;
   LPVOID MemPtr, BufPtr;
   UINT BufferLength;
   char QueryBlock[40];
public:
   virtual __fastcall TAboutBoxMy(TComponent* AOwner);
};
//----------------------------------------------------------------------------
extern PACKAGE TAboutBoxMy *AboutBoxMy;
//----------------------------------------------------------------------------
#endif
а также
MyAboutBox.cpp
//---------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MyAboutBox.h"
//--------------------------------------------------------------------- 
#pragma link "Animate"
#pragma link "GIFCtrl"
#pragma resource "*.dfm"
TAboutBoxMy *AboutBoxMy;
//--------------------------------------------------------------------- 
__fastcall TAboutBoxMy::TAboutBoxMy(TComponent* AOwner)
	: TForm(AOwner)
{
}
//---------------------------------------------------------------------
void __fastcall TAboutBoxMy::FormClose(TObject *Sender, TCloseAction &Action)
{
   ProgPic->Animate=false;
}
//---------------------------------------------------------------------------
void __fastcall TAboutBoxMy::FormActivate(TObject *Sender)
{
   ProgPic->Animate=true;
}
//---------------------------------------------------------------------------
void __fastcall TAboutBoxMy::FormCreate(TObject *Sender)
{
   AnsiString Path(Application->ExeName);
   VerSize=GetFileVersionInfoSizeA(Path.c_str(),&VerInfo);
   if(VerSize>0)
   {
      MemHandle=GlobalAlloc(GMEM_MOVEABLE,VerSize);
      MemPtr=GlobalLock(MemHandle);
      GetFileVersionInfo(Path.c_str(),VerInfo,VerSize,MemPtr);
      VerQueryValue(MemPtr,"\VarFileInfo\Translation",&BufPtr,&BufferLength);
      Array=(TransArray *)BufPtr;
      wsprintf(QueryBlock,"\StringFileInfo\%04x%04x\ProductName",Array[0].LangID,Array[0].CharSet);
      VerQueryValue(MemPtr,QueryBlock,&BufPtr,&BufferLength);
      ProductName->Caption=(char *)BufPtr;
      ProdName->Caption=ProductName->Caption;
      wsprintf(QueryBlock,"\StringFileInfo\%04x%04x\FileVersion",Array[0].LangID,Array[0].CharSet);
      VerQueryValue(MemPtr,QueryBlock,&BufPtr,&BufferLength);
      Version->Caption="Version "+String((char *)BufPtr);
      wsprintf(QueryBlock,"\StringFileInfo\%04x%04x\CompanyName",Array[0].LangID,Array[0].CharSet);
      VerQueryValue(MemPtr,QueryBlock,&BufPtr,&BufferLength);
      Company->Caption=(char *)BufPtr;
      wsprintf(QueryBlock,"\StringFileInfo\%04x%04x\LegalCopyright",Array[0].LangID,Array[0].CharSet);
      VerQueryValue(MemPtr,QueryBlock,&BufPtr,&BufferLength);
      Copyright->Caption="Copyright "+String((char *)BufPtr);
   }
   else
   {
      ProductName->Caption="";
      Version->Caption="";
      Company->Caption="";
      Copyright->Caption="";
   }
}
//---------------------------------------------------------------------------
void __fastcall TAboutBoxMy::AuthorClick(TObject *Sender)
{
   ShellExecute(Handle,"open","www.bcbsql.front.ru",NULL,NULL,SW_RESTORE); 
}
//---------------------------------------------------------------------------
Здесь используется GIFanimator из комплекта RX Library. Если у Вас нет RX Library, придется отказаться от использования формата GIF. Вместо него можно использовать файлы *.avi.
На форму Form1 бросается кнопка. В ее обработчик события OnClick введите код:
void __fastcall TForm1::Button1Click(Tobject *Sender)
{
   AboutBoxMy->ShowModal();
}
В окне Project->Options->VersionInfo заполняем необходимую информацию и подключаем информацию о версии к проекту. Теперь все сохраняем, компилируем и запускаем на выполнение. В результате появится форма с кнопкой. При нажатии на нее увидим наш AboutBox:
Теперь добавим окно AboutBoxMy в Object Repository. Для этого щелкаем правой кнопкой мышки на форме AboutBoxMy и выберем пункт меню Add To Repository. Осталось заполнить требуемые описания и нажать кнопку ОК.
И уже при создании нового проекта не надо думать о создании окна About. Достаточно выбрать его из Object Repository.



 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 28.02.2008 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
КОМПАС-3D v17 Home
Allround Automation PL/SQL Developer - Annual Service Contract - Unlimited
IBM Rational Functional Tester Floating User License
IBM RATIONAL Rose Enterprise Floating User License + Sw Subscription & Support 12 Months
SAP Crystal Reports XI R2 Dev 2006 INTL WIN NUL License (Version 11)
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Программирование на Microsoft Access
CASE-технологии
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
СУБД Oracle "с нуля"
eManual - электронные книги и техническая документация
Один день системного администратора
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100