-
m_kostik (27.05.11 23:07) [0]Здравствуйте, господа хорошие программисты!
Возникло у меня затруднение при написании собственного компонента (RAD Studio 2010 C++Builder). Объявляю компонент так:
файл Person.h
#ifndef PersonH
#define PersonH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
#define PANEL_HEIGHT 10
class PACKAGE TCustomPanel1 : public TCustomPanel
{
private:
protected:
public:
TImage *Foto;
TPanel *LeftSpouse;
__fastcall TCustomPanel1(TComponent* Owner);
__published:
};
//---------------------------------------------------------------------------
#endif
файл Person.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Person.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(TCustomPanel1 *)
{
new TCustomPanel1(NULL);
}
//---------------------------------------------------------------------------
__fastcall TCustomPanel1::TCustomPanel1(TComponent* Owner)
: TCustomPanel(Owner)
{
Foto = new TImage(NULL);
Foto->Parent = this;
Foto->Picture->LoadFromFile("C:\\Abort.bmp");
Foto->Height = this->Height;
Foto->Width = this->Height;
Foto->Left = PANEL_HEIGHT;
Foto->Stretch = true;
Foto->Top = 0;
LeftSpouse = new TPanel((TComponent*)NULL);
LeftSpouse->Left = 0;
LeftSpouse->Top = 10;
LeftSpouse->Height = PANEL_HEIGHT;
LeftSpouse->Width = PANEL_HEIGHT;
LeftSpouse->ParentColor = false;
LeftSpouse->Color = clRed;
LeftSpouse->Parent = this;
LeftSpouse->Update();
this->Update();
}
//---------------------------------------------------------------------------
namespace Person
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TCustomPanel1)};
RegisterComponents(L"MyComponents", classes, 0);
}
}
//---------------------------------------------------------------------------
Т.е. компонент представляет собой панель, на которой лежат еще одна панель TPanel и изображение TImage. Проблема вот в чем: ни приведенный конструктор, ни установка в программе (CustomPanel11->LeftSpouse->Color = clRed) не меняют цвет дочерней панели LeftSpouse, если панель создается динамически. Т.е. в отладчике видно, что значение цвета изменилось, а на экране никаких изменений. Если же разместить компонент в desine time, то срабатывает только конструктор, программно цвет опять таки не меняется. Это очень меня озадачило, т.к. с изображением TImage из программы можно сделать все, что угодно. Подскажите, где грабли? -
m_kostik (28.05.11 14:53) [1]Всем спасибо вопрос решен:
LeftSpouse->ParentBackground = false;