• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Компонента Timage

  • Автор темы dr.SeM
  • Дата начала
D

dr.SeM

Здраствуйте!
у меня следующий вопрос:
к примеру создаётся масив
TImage *img[25];
Код:
for (int i=0;i<4;i++)
{
//----------------------
img[i]=new TImage(this);
img[i]->Parent=MainFormGame;
img[i]->Picture->LoadFromFile("smile.jpg");
img[who]->Name="S"+IntToStr(who);
img[i]->Visible=true;
img[i]->OnClick=ImageClick;
}
где ImageClick- функция должна спрятать изображение по котором кликнул юзер
Код:
void __fastcall TMainFormGame::ImageClick(TObject *Sender)
{
......
}
вопрос: как можно узнать по какому рисунку клікну юзер?
если надо могу скинуть проект.
IDE C++ Builder 6 :)

извените допустил ошибку :img[i]->Name="S"+IntToStr(who);//добавил из другой функции
 
M

morpheus

dr.SeM
а Вы прописывайте TAG (есть такое свойство у любого компонента) у этого ImageClick в зависимости от тага работаем с тем Image c которым надо

dr.SeM
а Вы прописывайте TAG (есть такое свойство у любого компонента) у этого ImageClick в зависимости от тага работаем с тем Image c которым надо
 
D

dr.SeM

я попробовал зделать через Tag,и неполучилось.
зделал так к примеру в конструкторе формы:
Код:
for (int i=0;i<4;i++)
{
//----------------------
img[i]=new TImage(this);
img[i]->Parent=MainFormGame;
img[who]->Tag=0;		 //noclick
img[i]->Picture->LoadFromFile("smile.jpg");
img[i]->Name="S"+IntToStr(i);
img[i]->Visible=true;
img[i]->OnClick=ImageClick;
}
потом в
Код:
void __fastcall TMainFormGame::ImageClick(TObject *Sender)
{
//вот тут и проблема потомучто на которой кликнул надо присвоить скажем 1
//а зделать так помоему нельзя [b]img->Tag=1[/b]
//так что надо в цикле перебрать все картинки и нужной присв. 1
//в итоге всем будет присвоено 1 
for (int i=0;i<4;i++)
{
img[i]->Tag=1;		 //по которой кликнул присвою 1
img[i]->Visible=false;
}
}

Извените но ничего в голову не приходит как ето решыть. Хоть бери и на форму помещать нужное количество картинок и каждую обрабатывать отдельно
 
D

dr.SeM

Тобто, потом чтоб спрятать картинку по которой клик нужно ввест Sender->Free();?
 
D

dr.SeM

я добавил ету строку у функцию
Код:
void __fastcall TMainFormGame::ImageClick(TObject *Sender) 
{
Sender->Free();
}
и при компиляции Билдер показал ошыбку: Project1.exe raised exception class EAccessViolation with message... in modul rtl60.bpl. а свойство Visible там в функции нету. Помоему етот рядок я не туда прописал.Подскажыте что делать.
 
D

dr.SeM

Извените больше не повториться. Просто не смотрел на теги...
Правила есть правила, значит не будем больше нарушать.

извените , а как в етом случае зделать приведение типов что бы всё работало?В книгах которые у меня есть такое но описываеться. ;)
 
D

dr.SeM

Здраствуйте
у меня есть класс в который в обшем щёте работает с TImage.В етом классе есть функцыя котороя должна выполняться когда на рисунок кликнули, я ету функцию написал так:
Код:
class t
{
public:
int x,y,a;
t::t();
void t::start();
void t::ShowImage(int x,int y);
void t::stop();
void t::OnClickImage();
TImage *img;
};
void t::ShowImage(int x,int y)
{
img=new TImage(Form1 );
img->Visible=false;
img->Parent= Form1;
img->Picture->LoadFromFile("smile.jpg");
img->OnClick=OnClickImage;//присваиваем функцию обработки клика
img->Visible=true;
img->Top=x;
img->Left=y;
}
void t::OnClickImage()
{
a=a+1;
Form1->Canvas->TextOutA(0,0,IntToStr(a));
img->Visible=false;
}
при компиляции кидает ошыбку :E2034 Cannot convert 'void (* (_closure )())()' to 'void (_fastcall * (_closure )(TObject *))(TObject *)' как выправить ето?
 
E

European

dr.SeM, прототип функции OnClickImage не правильный. На сколько помню, должно быть так:
Код:
void t::OnClickImage( TObject *Sender );
...
void t::ImageClick( TObject *Sender )
{
///
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!