(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
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год.
Kaspersky Endpoint Security для бизнеса – Стандартный Russian Edition. 10-14 Node 1 year Base License
SAP Crystal Reports 2008 INTL WIN NUL License
Quest Software. Toad for Oracle Development Suite
Stimulsoft Reports.Ultimate Single License Includes one year subscription, source code
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Программирование на Microsoft Access
CASE-технологии
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
СУБД Oracle "с нуля"
Один день системного администратора
Adobe Photoshop: алхимия дизайна
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100