Ścieżka do obiektu TImage po użyciu LoadFromFile

0

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..

0

Nie, ale pod właściwość Tag możesz podpiąć co tylko zechcesz, np klucz do map<int,string>

0

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;

0

Błąd nie znajduje się w pokazanym przez ciebie fragmencie.

0

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ć?

1
  1. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. Nie używaj przyrostkowej inkrementacji o ile nie jest konieczna: http://4programmers.net/Forum/1101404
  3. Zamiast gimnastyki z dziwacznym if(i%5==0 && i!=0) zrób lepiej for(int y=0,i=0;y<5;++y) for(int x=0;x<5;++x,++i) /* tu masz trzy zmienne */
  4. Zatrzymaj się na board->Width=50; i sprawdź this - założę się że jest null'em.
0

Odnośnie 4, co w takim razie zrobić żeby to działało?

1

A resztę już zrobiłeś?

0

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.

1

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.

0

No tak... Obiekt 'tworzyłem' tak: Selection sboard, oczywiście zamiast Selection *sboard = new Selection;
Dzięki!

0

W takim razie, teraz masz wyciek pamięci ;P

1 użytkowników online, w tym zalogowanych: 0, gości: 1