Witam, dawno tu nie pisałem, ponieważ jakoś udawało mi się rozwiązywać problemy metodą prób i błędów. Nie mniej jednak tym razem utknąłem na dobre.
Do rzeczy. Pisze we własnym zakresie aplikację okienkową w pakiecie RAD Studio koncernu Embarcadero jest to odtwarzacz mp3 ale taki bardziej lepszy :) wpadłem na pomysł rozbicia projektu na klasy co też uczyniłem. Na podstawie pierwszej klasy którą wcześniej już napisałem, dotyczyła ona ładowania skinów(Tu problemów nie miałem) postanowiłem napisać drugą klasę dotyczącą ładowania obrazków i to z nią mam problem, ponieważ w kodzie wykorzystywany jest komponent TBitBtn, który znajduje się na formie głównego programu i jest zadeklarowany w pliku .h głównej formy(TForm *MainForm). Natomiast klasa ma służyć do ładowania plików graficznych. I teraz cały projekt się kompiluje bezproblemowo, jednak przy próbie uruchomienia programu i sprawdzenia działania, wyskakuje błąd Access Violation oraz debbuger wskazuje, że problem jest z tą linijką kodu:
PlayBtn->Glyph->Assign(graphic); gdzie PlayBtn komponentem umieszczonym na formie głównej.
I teraz nie wiem czego zapomniałem w kodzie klasy albo czego brakuje w klasie aby zlikwidować ten błąd.
Poniżej załączam plik klasy link zawiera plik h i cpp w jednym. natomiast wykomentowane jest co gdzie jest czym. Mile widziane wskazówki gdzie tu zrobiłem błąd albo o czym zapomniałem.
//plik cpp klasy LoadImageFile
#pragma hdrstop
#pragma package (smart_init)
#include "LoadImageFile.h"
#include <vcl.h>
__fastcall TLoadImageFile::TLoadImageFile(TForm *MainForm)
{
PlayBtn = new TBitBtn(MainForm);
}
__fastcall TLoadImageFile::~TLoadImageFile()
{
}
void __fastcall TLoadImageFile::LoadImagesFile(TForm *MainForm)
{
TPngImage *graphic = new TPngImage();
if(FileExists(L"Graphics/play.png"))
{
graphic->LoadFromFile(L"Graphics/play.png");
PlayBtn->Glyph->Assign(graphic); //debbuger wskazuje, że tu jest problem
}
else
MessageBoxW(Application->Handle, L"Unable Load PNG File!\n"
L"Make Sure if is everythings ok, or Catalog, and skin is not deleted\n"
L"or is not Damaged", L"Fatal Error", MB_OK| MB_ICONWARNING) == ID_OK;
}
//-------------------------------------------------------------------------------------------------------------------------------------
//plik h klasy LoadImageFile
#ifndef LoadImageFileH
#define LoadImageFileH
#include <Vcl.Imaging.pngimage.hpp>
#include <Vcl.Buttons.hpp>
class TLoadImageFile
{
public:
__fastcall TLoadImageFile(TForm *MsinForm);
__fastcall ~TLoadImageFile(); // constructor, destructor class LoadImageFile;
//functions void load from resources
void __fastcall LoadImagesFile(TForm *MainForm);
/* void __fastcall LoadImageFiles1();
void __fastcall LoadImageFile2();
void __fastcall LoadImageFile3();
void __fastcall LoadImageFile4();
void __fastcall LoadImageFile5();
void __fastcall LoadImageFile6();
*/
private:
TBitBtn *PlayBtn;
TForm *MainForm;
};
#endif
ps. wybaczcie angielski mój, ale lepiej mi jest zrozumieć idee, a za razem co w kodzie napisałem.