Конференция "Компоненты" » трудности с собственным компонентом
 
  • 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;
 
Конференция "Компоненты" » трудности с собственным компонентом
Есть новые Нет новых   [119162   +65][b:0][p:0.002]