Strona 1 z 1

tworzenie komponentu TShape poprzez użycie new

Nowy postNapisane: niedziela, 7 grudnia 2008, 15:37
przez mikelo
witam, chciałbym stworzyć dynamicznie komponent klasy TShape tak żeby pojawił się na formie. skleciłem coś takiego:
Kod: Zaznacz cały
TShape *Shape2;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

        Shape2 = new TShape(Form1);
        Shape2->Width=20;
        Shape2->Height=20;
        Shape2->Name="sh2";
        Shape2->Shape=stCircle;
        Shape2->Visible=true;
        Shape2->Left=100;
        Shape2->Top=100;
        Shape2->Brush->Color=clWhite;
        Shape2->Brush->Style=bsSolid;
        Shape2->Enabled=true;
        Shape2->ParentShowHint=true;
        Shape2->Pen->Color=clBlack;
        Shape2->Pen->Mode=pmCopy;
        Shape2->Pen->Style=psSolid;
        Shape2->Width=1;
        Shape2->Tag=1;
        Shape2->Align=alNone;
}


jak widać kliknięcie na przycisk ma stworzyć nowy komponent na formie Form1, jest tylko taki problem, że na formie owego komponentu nie widać, chociaż na pewno istnieje bo da się odwoływać do jego właściwości i metod. Jak więc wyświetlić go teraz na formie?

Re: tworzenie komponentu TShape poprzez użycie new

Nowy postNapisane: niedziela, 7 grudnia 2008, 16:16
przez Cyfrowy Baron
Zabrakło:

Shape2->Parent = this; // lub Shape2->Parent = Form1

a to jest raczej niedopuszczalne: Shape2->Name="sh2"; komponent nazywa się Shape2 i nie należy zmieniać tej nazwy, gdyż przy niewłaściwym zarządzaniu nastąpi wyciek pamięci.

Re: tworzenie komponentu TShape poprzez użycie new

Nowy postNapisane: poniedziałek, 8 grudnia 2008, 09:35
przez mikelo
dzięki, działa jak należy :)

Re: tworzenie komponentu TShape poprzez użycie new

Nowy postNapisane: wtorek, 6 stycznia 2009, 22:31
przez usermaw
Niektorych dynamicznych komponentow takze nie widac i trzeba dodac do formy Forma->Update()
Tak jest przynajmniej w przypadku, gdy zarowno forma, jak i komponenty na niej sa dynamiczne

pozdro