Одинаковый код для нескольких картинок
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Одинаковый код для нескольких картинок Expand / Collapse
Автор
Сообщение
16.04.2007 14:18
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 24.10.2007 1:17
Сообщ.: 38, Visits: 316
На форме расположены штук 20 картинок. Каждой из них необходимо присвоить одинаковую реакцию на несколько действий (MouseClick/Move/Up...)
Получается портянка одного и того же кода на 20 метров(погонных:)).

Как написать универсальный обработчик?
Сообщ. #912490
17.04.2007 22:45
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 29.09.2007 22:12
Сообщ.: 343, Visits: 3 388
а по одному реализовать и подцепить К КАЖДОМУ один и тот же обработчик слабо ?
Сообщ. #912546
18.04.2007 1:08
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 24.10.2007 1:17
Сообщ.: 38, Visits: 316
Ух ты! Какое конструктивное решение! Если бы я был согласен на компромиссы, я бы сюда не пОстился:]

Суть проблемы - надо, чтобы каждую из 20 картинок можно было перетягивать в любое место на форме. Я это делаю сквозь MouseDown/Move/Up и потом SetBounds (кстать, если есть более рациональный метод, буду признателен). 20x60=120:/ Многовато будет, однако.

А если пойти другим путем: универсальная процедура(функция), к которой передается имя имаги-отправителя(как?:/), чтобы при этом еще и завершалось событие-отправитель(хотя злобный принцип стека мне это сделать по-ходу не даст:/)?
Сообщ. #912550
18.04.2007 8:31
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 29.09.2007 22:12
Сообщ.: 343, Visits: 3 388
Решение конструктивное. У каждого компонента есть такое св-во как Tag. целое. по умолчанию 0. Так же обработчку (MouseMove и т.д.). в качестве параметра передается обьект, с которым происходит данное событие(sender). Далее уже идет первый класс, первая четверть
case (sender as TImage).Tag of
1 :
2 :
...
20:
end;//case

или
if (Sender as TImage).Name='Image1' then
ShowMessage('Image1');
if (Sender as TImage).Name='Image2' then
ShowMessage('Image2');
Сообщ. #912555
18.04.2007 8:33
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 29.09.2007 22:12
Сообщ.: 343, Visits: 3 388
Tinki87 (18.04.2007)
Ух ты! Какое конструктивное решение! Если бы я был согласен на компромиссы, я бы сюда не пОстился:]

Суть проблемы - надо, чтобы каждую из 20 картинок можно было перетягивать в любое место на форме. Я это делаю сквозь MouseDown/Move/Up и потом SetBounds (кстать, если есть более рациональный метод, буду признателен). 20x60=120:/ Многовато будет, однако.

А если пойти другим путем: универсальная процедура(функция), к которой передается имя имаги-отправителя(как?:/), чтобы при этом еще и завершалось событие-отправитель(хотя злобный принцип стека мне это сделать по-ходу не даст:/)?

Не дочитал с просонья...В эти обработчики уже все передается.
Сообщ. #912556
18.04.2007 10:47
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 29.09.2007 22:12
Сообщ.: 343, Visits: 3 388
Сейчас прочитал на свежу голову твой пост. Все твои "проблемы" решаются использованием параметра Sender...Пишешь ОДИН обработчик, чепляешь НА ВСЕ картинки и в коде пишем что-то типа

with (Sender as TImage) do

 begin

   BeginDrag;

   и что там тебе еще нужно 

end;

Обработчик будет работать с тем обьектом, с которым ты сейчас реально работаешь. Можешь к кординатам доступ получить и чему хочешь..Дерзай..

Сообщ. #912560
18.04.2007 23:44
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 24.10.2007 1:17
Сообщ.: 38, Visits: 316
Благодарю за "волшебный пендель" в нужном направлении. Хотя я в силу бегинерского знания делфи и времени суток не особо воткнул в суть советов, но в итоге разродился на решение.

Написал процедуру PicMove(Sender: TObject, Posil: Boolean)
Которая реагирует на определенную группу sender'ов, и в зависимости от булевой прилепляет или отлепляет координаты картинки к мышиным.

Только я вот на ночь глядя не опробывал. Пузо у процедуры такое:
while posil do
setbounds(blablabla);

Если вызывать процедуру в процессе ее выполнения но уже с posil:=false, этот цикл остановится или придется его как-то извне прерывать?
Сообщ. #912594
18.04.2007 23:55
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 29.09.2007 22:12
Сообщ.: 343, Visits: 3 388
Программу пишем мы, или ты ?!!!
Сообщ. #912595
20.04.2007 23:57
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member