Тема: Builder C++Як видалити всі об'єкти класу

В мене є клас TLabelM

class TLabelM : public TLabel
{
 public:
    __fastcall virtual TLabelM(Classes::TComponent* AOwner)
            : Stdctrls::TLabel(AOwner) {};
    int id;
    __fastcall virtual ~TLabelM()
    {
    }
};

Я створюю динамічні кнопки (багато раз), для DBGrid

TLabelM *NewButton = new TLabelM(Form3);

Отримую до них доступ так

void __fastcall TForm3::SpeedButton1Click_(TObject *Sender) //Добавить
{
    TLabelM *button = dynamic_cast<TLabelM*>(Sender);
    //...
}

і мені потрібно їх створити наново. Можна було б і на верх тих кнопок що вже є нові добавлять, але коли їх (нових кнопок) менше, старі звісно не куди не пропадають.
Тому в мене виникає питання як можна видалити всі об'єкти класу TLabelM яких я створив ?

2

Re: Builder C++Як видалити всі об'єкти класу

Можу я поцікавитись, навіщо тобі лейба у гріді? Чому саме лейба, чому не описати подію DrawDataCell, й там малювати?

Подякували: koala1

3 Востаннє редагувалося Betterthanyou (18.11.2015 11:36:24)

Re: Builder C++Як видалити всі об'єкти класу

Itari написав:

Можу я поцікавитись, навіщо тобі лейба у гріді? Чому саме лейба, чому не описати подію DrawDataCell, й там малювати?

бо чомусь кнопок стає на одну менше і вони не працюють (не працюють - не реагують на натискання)

class TLabelM : public TButton
{

 public:
    __fastcall virtual TLabelM(Classes::TComponent* AOwner)
            : Stdctrls::TButton(AOwner) {};
    int id;
    __fastcall virtual ~TLabelM()
    {
    }
};

Я використовую подію DrawColumnCell, а чим краща DrawDataCell ?

Прихований текст
void __fastcall TForm3::DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect,
          int DataCol, TColumn *Column, TGridDrawState State)
{

if (DataCol == 5 && b)
{

TLabelM *NewButton = new TLabelM(Form3);
NewButton->Parent= DBGrid1;
NewButton->Caption=u"Добавити";
NewButton->Height=10;
NewButton->Width=10;
NewButton->Left=100;
NewButton->Top=10;
NewButton->Left=Rect.Left;
NewButton->Top=Rect.top;
NewButton->Width =Rect.Right - Rect.Left;
NewButton->Height=Rect.Bottom - Rect.Top;
NewButton->Font->Size = 10;
NewButton->id = Form9->ADOQuery1->FieldByName("_id_")->AsInteger;
NewButton->OnClick = this->SpeedButton1Click_;

}

static kilkist = Form9->ADOQuery1->RecordCount * DBGrid1->Columns->Count;



if(index++ == kilkist)
{
    b=false;
}

}

OnClick

void __fastcall TForm3::SpeedButton1Click_(TObject *Sender) //Добавить
{
    TLabelM *button = dynamic_cast<TLabelM*>(Sender);
    Ins(button->id);
}

4

Re: Builder C++Як видалити всі об'єкти класу

Betterthanyou

Мені лише цікаве навіщо у грід пхати якийсь контрол...
Невже у DBGrid неможливо завдати Column.ButtonStyle як cbsEllipsis, та отримати "легітимну" кнопку пристосовану саме під грід. У якої можливо обробити клік через OnEditButtonClick.
Який сенс в твоєму рішенні, ось що мені незрозуміле...

5

Re: Builder C++Як видалити всі об'єкти класу

Я читав про ButtonStyle вона мені не підходить через те що з'являється лише при редагуванні, при її використанні кнопок зразу не видно

Прихований текст

В подію DrawColumnCell також пробував вставляти

if (DataCol == 5)
{
Column->ButtonStyle = cbsEllipsis;
}