Компонента Timage

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем dr.SeM, 24 фев 2008.

  1. dr.SeM

    dr.SeM Гость

    Здраствуйте!
    у меня следующий вопрос:
    к примеру создаётся масив
    TImage *img[25];
    Код (Text):
    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- функция должна спрятать изображение по котором кликнул юзер
    Код (Text):
    void __fastcall TMainFormGame::ImageClick(TObject *Sender)
    {
    ......
    }
    вопрос: как можно узнать по какому рисунку клікну юзер?
    если надо могу скинуть проект.
    IDE C++ Builder 6 :)

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    dr.SeM
    а Вы прописывайте TAG (есть такое свойство у любого компонента) у этого ImageClick в зависимости от тага работаем с тем Image c которым надо

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

    dr.SeM Гость

    я попробовал зделать через Tag,и неполучилось.
    зделал так к примеру в конструкторе формы:
    Код (Text):
    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;
    }
    потом в
    Код (Text):
    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;
    }
    }
    Извените но ничего в голову не приходит как ето решыть. Хоть бери и на форму помещать нужное количество картинок и каждую обрабатывать отдельно
     
  4. dr.SeM

    dr.SeM Гость

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

    dr.SeM Гость

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

    dr.SeM Гость

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

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Вот-вот... Указатели на них лежат в массиве img, обращение по которым и вызывает ошибку.
     
  8. dr.SeM

    dr.SeM Гость

    Здраствуйте
    у меня есть класс в который в обшем щёте работает с TImage.В етом классе есть функцыя котороя должна выполняться когда на рисунок кликнули, я ету функцию написал так:
    Код (Text):
    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 *)' как выправить ето?
     
  9. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    dr.SeM, прототип функции OnClickImage не правильный. На сколько помню, должно быть так:
    Код (Text):
    void t::OnClickImage( TObject *Sender );
    ...
    void t::ImageClick( TObject *Sender )
    {
    ///
    }
     
Загрузка...
Похожие Темы - Компонента Timage
  1. JohnLemon
    Ответов:
    1
    Просмотров:
    559
  2. bang
    Ответов:
    0
    Просмотров:
    1.308
  3. V88
    Ответов:
    2
    Просмотров:
    3.637
  4. neo7777
    Ответов:
    1
    Просмотров:
    2.984
  5. Normann
    Ответов:
    5
    Просмотров:
    3.764

Поделиться этой страницей