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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2013, 10:30   #1
romanzi
Пользователь
 
Регистрация: 07.11.2010
Сообщений: 87
По умолчанию Получить параметр для динамического

Есть 8 динамических изображений, вместе они образуют массив.

Код:
 parts_player: array[1..8] of TImage;
Мне нужно определить для них всех MouseMove.

Делать 8 различных процедур не очень то хочется, вроде я не индус.

И появилась мысль хранить в каждом parts_player[i] номер самого i, чтобы потом использовать номер в 1 процедуре, вместо 8.

Я решил хранить ид так:
Код:
parts_player[i].Tag := i;
Использовать его, как я понял, невозможно...

Код:
procedure TForm1.Image4MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Hiting then
      begin
      parts_player[2].Left := parts_player[2].Left + (x - xNew); // вместо "2" нужен ид того изображение, которое перетягивают
        parts_player[2].Top := parts_player[2].Top + (y - yNew);
end;
end;
Неужели у меня нету выбора, кроме того как делать 8 почти одинаковых процедур??
romanzi вне форума Ответить с цитированием
Старый 09.08.2013, 10:49   #2
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Код:
case TImage(Sender).Tag of 
  1 : ;
  2 : ;
  ...
  else
    ...
end;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 09.08.2013, 10:51   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

дык, Вам же через Sender передаётся тот Image, на котором и произошло событие!

Нужно получить его Tag - не проблема:
Код:

procedure TForm1.Image4MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var MyTag : integer;
begin
  MyTag := (Sender as TImage).tag;
  if Hiting then
      begin
      parts_player[MyTag].Left := parts_player[MyTag].Left + (x - xNew); // вместо "2" нужен ид того изображение, которое перетягивают
        parts_player[MyTag].Top := parts_player[MyTag].Top + (y - yNew);
end;
оно?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.08.2013, 10:53   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
parts_player[2].Left := parts_player[2].Left + (x - xNew); // вместо "2" нужен ид того изображение, которое перетягивают
Код:
moveimage:=sender as Timage; // здесь даже не id а сразу тот самый объект 
moveimage.Left := moveimage.Left + (x - xNew);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 09.08.2013, 11:34   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Использовать его, как я понял, невозможно...
Ну вот почти же решили свою проблему =)

С чего бы это не возможно? Параметр Sender - не для красоты вообще-то.
Код:
var
 Obj:TImage ABSOLUTE Sender;
begin
  case Sender.tag of
   ...
  end;
  
end;
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создать клас для динамического массива supra89kren Общие вопросы C/C++ 5 30.03.2010 00:23
Переделать для динамического массива. Ueshua Общие вопросы C/C++ 1 20.12.2009 21:33
операция NEW для динамического массива -ushёl- Общие вопросы C/C++ 0 14.11.2009 22:00
Передача динамического массива как параметр ф-ции kurdt Общие вопросы Delphi 2 26.04.2009 17:35
Математика. Получить параметр функции зная результат Stilet Общие вопросы по программированию, компьютерный форум 2 06.03.2009 08:51