Można się w jakiś sposób odwołać do ścieżki pliku z którego wczytano obrazek klasy TImage?
próbowałem np.if( [..].img->Picture == "nazwa.bmp" ) ale coś nie wychodziło..
Nie, ale pod właściwość Tag możesz podpiąć co tylko zechcesz, np klucz do map<int,string>
Wszystko byłoby super, ale pojawił się następny problem - http://puu.sh/mcPVq/97513e0408.png
Wszystko się ładnie kompiluje a po kliknięciu w obrazek wyskakuje błąd - http://puu.sh/mcQ4l/72126dca79.png
Pierwszy raz się z tym spotykam i nie do końca mam pomysł czym może to być spowodowane?
(kilka linijek niżej przypisanie wygląda tak: [...].img->OnClick = Klik;
Błąd nie znajduje się w pokazanym przez ciebie fragmencie.
Selection.cpp
#include "Selection.h"
#include "Point2d.h"
#include "Unit1.h"
#include "Card.h"
#include <string>
using namespace std;
void __fastcall Selection::Klik(TObject *sender){
board->Width=50;
}
//--------------------------------------------------------------------------
Selection::Selection(){
//----- TWORZENIE MAPY 25 KART -----------
board=new TImage(Application);
board->Parent=Form1;
board->Picture->LoadFromFile("IMG/selection.bmp");
board->Height=132;
board->Width=532;
board->SendToBack();
int j=0,k=0;
for(int i=0; i<25; i++)
{
if(i%5==0 && i!=0)
{
j=0;
k++;
}
tile[i].left=5+(105*j);
tile[i].karta.img->Left=5+(105*j);
tile[i].top=5+(125*k);
tile[i].karta.img->Top=5+(125*k);
j++;
}
//----- WCZYTANIE 20 KART -------
string temp, path;
for(int i=0; i<20; i++)
{
path = "IMG/";
temp = IntToStr(i+1).c_str();
path += temp;
path += ".bmp";
const char* pathconverted = path.c_str();
tile[i+5].karta.img->Picture->LoadFromFile(pathconverted);
}
//----- FUNKCJA ONCLICK W KARTACH ------
for(int i=0; i<20; i++)
{
tile[i+5].karta.img->OnClick = Klik;
}
}
Selection.h
#ifndef selection_h
#define selection_h
#include "Point2d.h"
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
#include <ImgList.hpp>
class Selection{
public:
TImage *board;
Point2d tile[25];
Selection();
void __fastcall Klik(TObject *sender);
};
#endif
inne pliki też wrzucić?
- Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
- Nie używaj przyrostkowej inkrementacji o ile nie jest konieczna: http://4programmers.net/Forum/1101404
- Zamiast gimnastyki z dziwacznym
if(i%5==0 && i!=0)
zrób lepiejfor(int y=0,i=0;y<5;++y) for(int x=0;x<5;++x,++i) /* tu masz trzy zmienne */
- Zatrzymaj się na
board->Width=50;
i sprawdźthis
- założę się że jest null'em.
Odnośnie 4, co w takim razie zrobić żeby to działało?
A resztę już zrobiłeś?
Z 3 tak, pozdrawiam za podstawienie innych zmiennych :) reszta niestety jeszcze nie, ale to jest problem z którym męczę się najdłużej dlatego chciałbym nie myśleć o nim dłużej i skupić się na pozostałych rzeczach które mi zaproponowałeś, lekturę zostawiam na koniec.
Jak nie zrobisz punktu 1 to pokazywanie tego jest nieprzyzwoite.
A błąd polega na tym że nie tworzysz obiektu Selection lub kasujesz go zanim zostanie naciśnięty ten przycisk myszy.
No tak... Obiekt 'tworzyłem' tak: Selection sboard, oczywiście zamiast Selection *sboard = new Selection;
Dzięki!
W takim razie, teraz masz wyciek pamięci ;P