Re[6]: Проблема с опубликованием свойства
От: Danchik Украина  
Дата: 31.07.08 00:48
Оценка:
Здравствуйте, wallaby, Вы писали:

[Skip]

Подводя итог выще сказанному:

#ifndef MyCompH
#define MyCompH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>   
#include <DesignEditors.hpp>
//---------------------------------------------------------------------------
class PACKAGE TTestProp : public TPersistent
{
  public:
    TTestProp();
    virtual void __fastcall Assign(TPersistent* source);
__published:
    AnsiString strA;
    AnsiString strB;
};


class PACKAGE TMyComp : public TCustomControl
{
private:
  TTestProp *FTestProp;
protected:
  void __fastcall setTestProp(TTestProp* p);
public:
  __fastcall TMyComp(TComponent* Owner);
  __fastcall ~TMyComp();
__published:
  __property TTestProp* TestProp = {read = FTestProp, write = setTestProp};
};                                                                        

//---------------------------------------------------------------------------
#endif


Имплементация:
#include <vcl.h>
#include <DesignIntf.hpp>

#pragma hdrstop

#include "MyComp.h"
#pragma package(smart_init)

//---------------------------------------------------------------------------
TTestProp::TTestProp()
  : TPersistent()
{
  strA = "Строка A"; 
  strB = "Строка B";
}
//---------------------------------------------------------------------------
void TTestProp::Assign(TPersistent* source)
{
  // здесь допишите Assign не знаю я как в CBuilder делать is
  strA = (TPersistent*)source->strA;
  strB = (TPersistent*)source->strB;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
__fastcall TMyComp::TMyComp(TComponent* Owner)
  : TCustomControl(Owner)
{
  FTestProp = new TTestProp;
}
//---------------------------------------------------------------------------
__fastcall TMyComp::~TMyComp()
{
  delete FTestProp;
}
//---------------------------------------------------------------------------
void __fastcall TMyComp::setTestProp(TTestProp* p)
{
  if (p)
  {
    FTestProp->Assign(p);
  }
}                               
//---------------------------------------------------------------------------


P.S.
Все что относится к редактору свойства вырезано, допишете если понадобится.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.