[ dzesika60 @ 14.10.2009. 14:32 ] @
Pozdrav svima,
dakle da li se moze postaviti nova komponenta tipa Image na Formu u BCB 6 kada se napise:
Code:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TImage *slika;
slika=new TImage;
}


Sta treba dodati da kompajler ne javlja gresklu :
[C++ Error] Unit11.cpp(30): E2285 Could not find a match for 'TImage::TImage()'
Nadam se da ste razumeli , ne zelim da je direktno postavim sa palete Additional , vec da je kreiram.
[ X Files @ 14.10.2009. 16:56 ] @
Na dobrom si putu, ali postoji nekoliko gresaka.

Na primer slika=new TImage; nije dobro. Treba obicno slika=new TImage( this );

Ali da krenemo redom:

TImage *slika; ne treba treba da bude lokalni za metodu, nego za celu klasu, dakle deklarisati u headeru:

--- Unit1.h ---
Code:

// ...
#include <JPEG.hpp> // ovime dodajes podrsku za JPG format
// ...
private:    // User declarations
    TImage *slika;

public:        // User declarations
    __fastcall TForm1(TComponent* Owner);

    // dodato zbog unistavanja objekta "slika", mada ce ga VCL svakako ukloniti i bez ovoga
    // pod uslovom da je proglasen Owner ili Parent, a oba su
    __fastcall ~TForm1();
// ...


--- Unit1.h ---
Code:

// ...
// KONSTRUKTOR: posto C/C++ ne garantuju koja ce biti pocetna vrednost objekta,
// moze se postaviti na NULL, zbog destrukcije u sklucaju da objekat nije kreiran
// tj, nije pritisnut Button1
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    slika = NULL;
}

// DESTRUKTOR: Kao sto rekoh, ovaj deo nije neophodan jer ce VCL arhitektura unistiti
// objekat cim ima dodeljenog ili Ownera:
// to je ono this: slika = new TImage( this );
// ili Parenta: slika->Parent = this;
__fastcall TForm1::~TForm1()
{
    if ( slika )
        delete slika;
}

// pod uslovom da objekat nije kreiran, kreiraj ga, dodelu mu Parenta, da bude vidljiv, postavi dimenzije, ucitaj sadrzaj ako postoji
// ... i jos poneki detalj da se sve zategne
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if ( slika )
    {
        ShowMessage("Objekat slika (TImage) je vec kreiran!");
    }
    else
    {
        AnsiString SLIKA = "c:\\Users\\vladimir.stefanovic\\Desktop\\Image001.jpg";
        slika = new TImage( this );
        slika->Parent = this;
        slika->SetBounds( 0,0,100,100 );
        if ( FileExists( SLIKA ) )
            slika->Picture->LoadFromFile(SLIKA);
        else
        {
            ShowMessage("Slika\n" + SLIKA + "\nne postoji!");
            delete slika;
            slika = NULL;
        }

    }
}
// ...



Sve ovo moze i modernije, sa STL-om, ali kao neki primer moze da posluzi.
[ dzesika60 @ 14.10.2009. 18:38 ] @
XFile, hvala

sve radi, kako sam shvatila sustina je ukazati na klasu "roditelja" tj.:
slika = new TImage( this );
slika->Parent = this;
ps.
naravno , dodala sam u header
...
TImage1 *slika;
pozdrav
[ X Files @ 14.10.2009. 19:07 ] @
Ako se ne dodeli Parent onda kreirani objekat ne zna na ko mu je 'roditelj', pa nece vizuelno biti prikazan. Drugim recima nece se videti. this je zapravo objekat iz koga se vrsi kreiranje, tj Form1, pa ce slika biti na formi.
[ dzesika60 @ 15.10.2009. 11:45 ] @
X Files ,
ukapirala uz tvoju pomoc.
Hvala...