Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объединение одинаковых событий от разных объектов 
:(
    Опции темы
Dukalys
Дата 9.9.2010, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 6.9.2010

Репутация: нет
Всего: нет



В программе встречается конструкция такого рода - 

Код

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 XXX; //code
end;

...

 procedure TForm1.Image10MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 XXX; //code
end; 



Где ххх почти одно и тоже(там меняется элемент массива i = № имейджа)

Возможно это объединить? а то у меня такой кусок текста огромный бесит просто !!!
PM MAIL   Вверх
cat512
Дата 9.9.2010, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



ну так сделай отдельный метод, и вынеси общее туда, а потом вызывай этот метод в обработчиках. Была уже подобная тема недавно, ищи по форуму
PM MAIL   Вверх
Frees
Дата 9.9.2010, 21:08 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Код

...
Image1.OnMouseDown := ImageMouseDown;
Image10.OnMouseDown := ImageMouseDown;
...

procedure TForm1.ImageMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ShowMessage(TImage(Sender).Name);
end; 



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
БелАмор
Дата 9.9.2010, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: 5
Всего: 17



PM   Вверх
Dukalys
Дата 10.9.2010, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 6.9.2010

Репутация: нет
Всего: нет



Спасибо. Написал обработчик для MouseMove

Код

//************************Обработчик события мыши***********************
procedure TForm1.ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  id   : integer; //задано свойством tag объекта
begin
  //Определяем id изображения
  id := (Sender as TImage).Tag;
  if NOT(Image[id]) then
  begin
    with (Sender as TImage) do begin
      Top    := Top  - dxy;
      Left   := Left - dxy;
      Height := 51;
      Width  := 51;
    end;
    Image[id] := true;
  end;
end;
//**********************************************************************
 


Теперь, когда он унифицирован под любой Image, хочу его применить для каждого Image.
Перехожу в события объекта,напротив onMouseMove  -  ввожу название  процедуры.

Спасиб. существовал небольшой барьер по работе с Sender'ami поэтому не мог "тыркнуться" с этим делом.



Интересен ещё такой момент -
как получить объект, зная его имя - примерный набросок кода 
Код

name : string;

name := 'Image' + '1';

with (name as TImage) do begin
  trololo;
end;


как заставить работать with (name as TImage)

Это сообщение отредактировал(а) Dukalys - 10.9.2010, 08:30
PM MAIL   Вверх
Frees
Дата 10.9.2010, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54




Цитата(Dukalys @  10.9.2010,  10:37 Найти цитируемый пост)
как получить объект, зная его имя 

Код

with (FindComponent(name) as TImage) do begin


а что ты хочешь сделать.. поиск по имени не самое лучшее решение


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Dukalys
Дата 10.9.2010, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 6.9.2010

Репутация: нет
Всего: нет



В обработчике события  Panel.MouseMove у меня присутствует код

Код

....
case i of
        1:
          begin
            Form1.Image1.Left := Form1.Image1.Left + dxy;
            Form1.Image1.Top := Form1.Image1.Top + dxy;
            Form1.Image1.Height := 48;
            Form1.Image1.Width := 48;
          end;
        2: Тоже самое только Image2
        3 Image3
4
5
6
7... 


Получается огромный кусок кода, поэтому хочу сократить до 4 строчек.

Код

with (FindComponent(name) as TImage) do begin


Frees, Спасибо, помогло.

P.S. Кстати писать Form1.Image1..... считается признаком плохого тона или как ?  
можно просто писать     Image1   , или переменную по созданию формы получить Imagex1 := Form1.Image1

как лучше, и как правильно с точки зрения производительности. Всё время пишу Form1  и  не задумывался. может быть статья есть правила хорошего тона в Delphi )


Это сообщение отредактировал(а) Dukalys - 10.9.2010, 11:08
PM MAIL   Вверх
Frees
Дата 10.9.2010, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата(Dukalys @  10.9.2010,  14:01 Найти цитируемый пост)
Всё время пишу Form1

такой переменной может и не быть лучше писать Self или ниче не писать.


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
БелАмор
Дата 10.9.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: 5
Всего: 17



Цитата(Dukalys @  10.9.2010,  11:01 Найти цитируемый пост)
P.S. Кстати писать Form1.Image1..... считается признаком плохого тона или как ?

Это не "признак плохого тона", а грубейшая ошибка, хотя в частных случаях всё может нормально работать. Посмотрите ссылку:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=77021
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1460 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.