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.