说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何简单地把几个标准组件的组合封装成一个可以安装的新组件?

编辑:说三道四文库 发布时间:2018-02-20 02:25
HTML文档下载 WORD文档下载 PDF文档下载
我看到参考书都是在CPP文件里写代码,创建子组件,用代码安排布局。有没有象PB那样的对象画板,可以显示地安排子组件的布局和初始属性?我想要运行时生成TabSheet,每个TabSheet上都是几个Edit,Split,Statusbar的组合。
不要告诉我用“Create Componet Template”。
自然是采用类的聚合
比如:
//---------------------------------------------------------------------------
#ifndef PictureSelectorH
#define PictureSelectorH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
const String Strings[] = {
  "handshak.bmp",
  "factory.bmp",
  "chemical.bmp",
  "shipping.bmp",
  "finance.bmp"
};

class PACKAGE TUnlPictureSelector : public TWinControl
{
private:
  TComboBox* FComboBox;
  TImage* FImage;
protected:
  void __fastcall ComboBoxClick(TObject* Sender);
  virtual void __fastcall CreateWnd();
public:
  __fastcall TUnlPictureSelector(TComponent* Owner);
};
//---------------------------------------------------------------------------
#endif


//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "PictureSelector.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(TUnlPictureSelector *)
{
  new TUnlPictureSelector(NULL);
}
//---------------------------------------------------------------------------
__fastcall TUnlPictureSelector::TUnlPictureSelector(TComponent* Owner)
  : TWinControl(Owner)
{
  Width = 240;
  Height = 205;
  FComboBox = new TComboBox(this);
  FComboBox->Left = 0;
  FComboBox->Top = 0;
  FComboBox->Width = 150;
  FComboBox->Style = csDropDownList;
  FComboBox->OnClick = ComboBoxClick;
  FComboBox->Parent = this;
  FImage = new TImage(this);
  FImage->Left = 0;
  FImage->Top = FComboBox->Height;
  FImage->Width = Width;
  FImage->Height = Height - FComboBox->Height;
  FImage->Parent = this;
}
//---------------------------------------------------------------------------
void __fastcall TUnlPictureSelector::CreateWnd()
{
  TWinControl::CreateWnd();
  if (!ComponentState.Contains(csDesigning)) {
    for (int i=0;i<6;i++)
      FComboBox->Items->Add(Strings[i]);
    FComboBox->ItemIndex = 0;
    ComboBoxClick(0);
  }
}

void __fastcall TUnlPictureSelector::ComboBoxClick(TObject* Sender)
{
  int index = FComboBox->Items->IndexOf(FComboBox->Text);
  FImage->Picture->LoadFromFile(Strings[index]);
}
//---------------------------------------------------------------------------


其实我的意思是可视化安排布局,比如里面封装一个StatusBar,用属性编辑器可以方便地分割Panel,不用程序一条一条写。不过看来没这摸好的事。你写的方法我会,只是,不知“类的聚合”是什么意思?
就是组合类的意思
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘