Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2013, 12:04   #1
marales
Пользователь
 
Регистрация: 12.03.2011
Сообщений: 22
По умолчанию вопрос про sender

в программе создано несколько динамических картинок со своим onclick. При нажатии кнопки выбираются только те картинки tag которых равен 5. Из этих выбирается какая то одна рандомно, и на ней выполняем процедуру onclick.
Проблема в том, что sender это у нас получается кнопка (button) он вызван. А как сделать чтобы в sender была та самая картинка, которая выбрана случайно, на которой будет выполнено onckick.
Это мне нужно для того, чтобы с ней дальше работать ну типо буду на ней менять одну картинку на другую или tag поменяю.
marales вне форума Ответить с цитированием
Старый 24.01.2013, 12:06   #2
marales
Пользователь
 
Регистрация: 12.03.2011
Сообщений: 22
По умолчанию

Если кому то поможет случайно выбираю картинки у которых tag = 5, потому что они в массиве. Поэтому имен у них нет, и перебираю массив
marales вне форума Ответить с цитированием
Старый 24.01.2013, 12:28   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Ну по ссылке на картинку - "которая выбирается рандомно" - значит к ней можно обратиться по ссылке - вот и вызывать метод клика.
Если дельфи:
Код:
images[индекс].Click;
phomm вне форума Ответить с цитированием
Старый 24.01.2013, 12:33   #4
marales
Пользователь
 
Регистрация: 12.03.2011
Сообщений: 22
По умолчанию

Delphi. нет не получается потому что Sender запоминает что событие произошло от кнопки, а мне нужно сделать так чтобы sender был от image. Например при обычном клике на картинку. sender будет от картинки. но сам клик происходит в КНОПКЕ.
marales вне форума Ответить с цитированием
Старый 24.01.2013, 12:54   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,544
По умолчанию

1. все что есть нужного по работе с Image в OnImageClick переносим в свою процедуру(метод) DoMyImgClick;
Код:
TformX =class(TForm)
private
 procedure DoMyImgClick(img: TImage);
....
end;

procedure Tform.DoMyImgclick(img: TImage);
begin
 ....
end;
2. переписываем
Код:
procedure Tform.OnImageClick(sender: TObeject);
begin
  ...
  DoMyClick(sender as TImage); //если при настоящем клике надо делать тоже самое
  // что-то еще 
end;
3. в своей кнопке
Код:
procedure Tform.OnMyButtonclik(sender: TObject);
var
  r: TImage;
begin
  rimg:=GetRandomImg; //выбираем нужный Image
  DoMyclick(rimg); // делаем с ним то что нам нужно
//и не нужно никаких "кликов" по картинке  
end;
P.S.
DoMyClick это конечно не лучшее имя для нашей процедуры.
Лучше было бы
Код:
procedure Tform1.changeTagImage(r: TImage); 
begin
  r.tag:=r.tag+1;
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 24.01.2013 в 13:05.
evg_m вне форума Ответить с цитированием
Старый 24.01.2013, 12:57   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
сам клик происходит в КНОПКЕ.
Ну и что? images[индекс].Click; ты проверял чему становится равным Sender у обработчика клика картинки?
Накрайняк:
Код:
images[индекс].OnClick(images[индекс]);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.01.2013, 13:48   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Stilet я проверил сей момент специально в исходниках
Код:
procedure TControl.Click;
begin
...
if Assigned(FOnClick) then
  FOnClick(Self);
поэтому наши с Вами коды равнозначны
А вот наличие у картинки готового обработчика событий ТС не указал, поэтому имеет место подход evg_m
phomm вне форума Ответить с цитированием
Старый 24.01.2013, 14:49   #8
marales
Пользователь
 
Регистрация: 12.03.2011
Сообщений: 22
По умолчанию

Всем спасибо, помог вот этот метод:

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну и что? images[индекс].Click; ты проверял чему становится равным Sender у обработчика клика картинки?
Накрайняк:
Код:
images[индекс].OnClick(images[индекс]);
marales вне форума Ответить с цитированием
Старый 24.01.2013, 15:26   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
помог вот этот метод:
Странно, учитывая:
Цитата:
сей момент специально в исходниках
marales, где-то в программе ты чего-то недоучел видимо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про Свойство Visible и про иконки в imagelist Kappi4 Компоненты Delphi 2 21.05.2010 13:10
Вопрос про C# BanzoO Общие вопросы C/C++ 1 02.07.2009 03:47
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос про IP ЧИЖ Работа с сетью в Delphi 1 23.06.2008 13:53
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24