|
|
|
Forum Member
      
участник
Last Login: 24.10.2007 1:17
Сообщ.: 38,
Visits: 316
|
|
На форме расположены штук 20 картинок. Каждой из них необходимо присвоить одинаковую реакцию на несколько действий (MouseClick/Move/Up...)
Получается портянка одного и того же кода на 20 метров(погонных:)).
Как написать универсальный обработчик?
|
|
|
|
|
Supreme Being
      
участник
Last Login: 29.09.2007 22:12
Сообщ.: 343,
Visits: 3 388
|
|
| а по одному реализовать и подцепить К КАЖДОМУ один и тот же обработчик слабо ?
|
|
|
|
|
Forum Member
      
участник
Last Login: 24.10.2007 1:17
Сообщ.: 38,
Visits: 316
|
|
Ух ты! Какое конструктивное решение! Если бы я был согласен на компромиссы, я бы сюда не пОстился:]
Суть проблемы - надо, чтобы каждую из 20 картинок можно было перетягивать в любое место на форме. Я это делаю сквозь MouseDown/Move/Up и потом SetBounds (кстать, если есть более рациональный метод, буду признателен). 20x60=120:/ Многовато будет, однако.
А если пойти другим путем: универсальная процедура(функция), к которой передается имя имаги-отправителя(как?:/), чтобы при этом еще и завершалось событие-отправитель(хотя злобный принцип стека мне это сделать по-ходу не даст:/)?
|
|
|
|
|
Supreme 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');
|
|
|
|
|
Supreme Being
      
участник
Last Login: 29.09.2007 22:12
Сообщ.: 343,
Visits: 3 388
|
|
Tinki87 (18.04.2007) Ух ты! Какое конструктивное решение! Если бы я был согласен на компромиссы, я бы сюда не пОстился:]
Суть проблемы - надо, чтобы каждую из 20 картинок можно было перетягивать в любое место на форме. Я это делаю сквозь MouseDown/Move/Up и потом SetBounds (кстать, если есть более рациональный метод, буду признателен). 20x60=120:/ Многовато будет, однако.
А если пойти другим путем: универсальная процедура(функция), к которой передается имя имаги-отправителя(как?:/), чтобы при этом еще и завершалось событие-отправитель(хотя злобный принцип стека мне это сделать по-ходу не даст:/)?
Не дочитал с просонья...В эти обработчики уже все передается.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 29.09.2007 22:12
Сообщ.: 343,
Visits: 3 388
|
|
| Сейчас прочитал на свежу голову твой пост. Все твои "проблемы" решаются использованием параметра Sender...Пишешь ОДИН обработчик, чепляешь НА ВСЕ картинки и в коде пишем что-то типа with (Sender as TImage) do begin BeginDrag; и что там тебе еще нужно end; Обработчик будет работать с тем обьектом, с которым ты сейчас реально работаешь. Можешь к кординатам доступ получить и чему хочешь..Дерзай..
|
|
|
|
|
Forum Member
      
участник
Last Login: 24.10.2007 1:17
Сообщ.: 38,
Visits: 316
|
|
Благодарю за "волшебный пендель" в нужном направлении. Хотя я в силу бегинерского знания делфи и времени суток не особо воткнул в суть советов, но в итоге разродился на решение.
Написал процедуру PicMove(Sender: TObject, Posil: Boolean)
Которая реагирует на определенную группу sender'ов, и в зависимости от булевой прилепляет или отлепляет координаты картинки к мышиным.
Только я вот на ночь глядя не опробывал. Пузо у процедуры такое:
while posil do
setbounds(blablabla);
Если вызывать процедуру в процессе ее выполнения но уже с posil:=false, этот цикл остановится или придется его как-то извне прерывать?
|
|
|
|
|
Supreme Being
      
участник
Last Login: 29.09.2007 22:12
Сообщ.: 343,
Visits: 3 388
|
|
| Программу пишем мы, или ты ?!!!
|
|
|
|
|
|
| | |