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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2011, 11:15   #1
Freddy_Kruger
 
Регистрация: 17.03.2011
Сообщений: 9
По умолчанию Как получить доступ к процедурам объекта, не указывая его имя?

Привет всем от очередного быдлокодера.
Сперва пояснения.
Есть несколько TImage на форме. При клике по каждому вызывается абсолютно одинаковая процедура, за исключением того, что меняется имя самого TImage - Image1, Image2, Image3 и т.д. Ну и вопрос: так как в дельфи получить доступ в объекту и его процедурам, не используя имя, учитывая только, что именно в этот момент по нему кликают?
Freddy_Kruger вне форума Ответить с цитированием
Старый 21.04.2011, 11:20   #2
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Что то не понял. Можно пример? Для этого есть ключевое слово is.
if (sender is Tчототам) then делать чототам. Те если был клик по какой нибудь любой кнопке то
Имя сендера получается ключевым словом (Sender as Tbutton). Те при клике по какой-то кнопке вам надо работать с ней вцелом:
Код:
if (sender is TButton) then   //если если какая то кнопка обратилась к данной процедуре
begin
(sender as Tbutton).hide;  //то эту кнопку спрятать
MyProc(sender as TButton);// и выполнить мою процедуру c ней
end;
Ненавижу быть как все, но люблю, чтобы все были как я.

Последний раз редактировалось MyLastHit; 21.04.2011 в 11:30.
MyLastHit вне форума Ответить с цитированием
Старый 21.04.2011, 11:28   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

всем Image в качестве обработчика Onckick назначается ОДНА и таже процедура
Код:
procedure Tform1..ImageXclick(sender: TObject);
begin
  showmessage( (Sender as Timage).name);
end;
sender это ссылка на объект источник события.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 21.04.2011 в 11:33.
evg_m вне форума Ответить с цитированием
Старый 21.04.2011, 11:28   #4
Freddy_Kruger
 
Регистрация: 17.03.2011
Сообщений: 9
По умолчанию

Спасибо за оперативность, но по-моему не катит.

Пример... эээ...

Ну например:

procedure TMainForm.ButtonXClick(Sender: TObject);
begin
ButtonX.Caption:='is Button X';
end;

Вместо X число от 1 до 100000000.
Хотелось бы назначить одну общую (и довольно длинную) процедуру как-то сразу на всех, да так, чтобы не пришлось каждому баттону\имейджу\чему-нибудь её отдельно прописывать.

evg_m
Так как через sender вызывать процеду TImage? Canvas, picture и всё остальное?

Последний раз редактировалось Freddy_Kruger; 21.04.2011 в 11:31. Причина: по семейным обстоятельствам
Freddy_Kruger вне форума Ответить с цитированием
Старый 21.04.2011, 11:36   #5
Freddy_Kruger
 
Регистрация: 17.03.2011
Сообщений: 9
По умолчанию

Всё, всем спасибо. Ждите вечером альфа-версию моего SuperTextEditor.
Freddy_Kruger вне форума Ответить с цитированием
Старый 21.04.2011, 11:37   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Так как через sender вызывать процеду TImage? Canvas, picture и всё остальное?
а попробовать?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 21.04.2011, 11:38   #7
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Ааа, ну понятно. Для этого есть FindComponent.
Пример назначения одной процедуры всем Label1, Label2,...,Label10 кроме Label 8 например:

Код:
for i:=1 to 10 do
if i<>8 then
MyProcedure(FindComponent('Label'+inttostr(i)));
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 21.04.2011, 11:41   #8
Freddy_Kruger
 
Регистрация: 17.03.2011
Сообщений: 9
По умолчанию

MyLastHit
Обана... Ещё раз спасибо. Спасибище!
Freddy_Kruger вне форума Ответить с цитированием
Старый 23.04.2011, 12:45   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Сообщение от MyLastHit Посмотреть сообщение
Пример назначения одной процедуры всем Label1, Label2,...,Label10 кроме Label 8 например:

Код:
for i:=1 to 10 do
if i<>8 then
MyProcedure(FindComponent('Label'+inttostr(i)));
ЭТО НЕ НАЗАЕНИЕ процедуры обрабртчики. ПРи настоящем Клике ничего подобно выполнено НЕ БУДЕТ.
а ПРИМЕННИЕ (вызов процедуры) для всех подходящих объектов
НАЗНАЧЕНИЕ процедуро обработчиков событий делается немного не так.

Код:
for i:=1 to 10 do
if i<>8 then
FindComponent('Label'+inttostr(i)) as TLabel).Onclick:=MyProcedure;
Теперь при любом Клике на Label 1-7,9-10 (кроме 8) БУДЕТ выполняться
MyProcedure.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 23.04.2011 в 13:00.
evg_m вне форума Ответить с цитированием
Старый 23.04.2011, 17:12   #10
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Чтобы уж окончательно добить вопрос: http://www.delphikingdom.com/asp/vie...?catalogid=342
eduard93 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли в макрос передать имя объекта, его вызывающего buagbu Microsoft Office Excel 3 16.04.2010 08:54
Как получить входящую/исходящую скороть сети/подключения? Зная его имя. TwiX Работа с сетью в Delphi 10 01.04.2010 19:17
Имя переменной как переменная. Как получить доступ к такой переменной? Denni Microsoft Office Access 8 02.04.2009 10:06
Как изменить свойство объекта, если его имя находится в переменной? Aiden Компоненты Delphi 1 13.09.2007 07:57