Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите пожалуйста, возможно ли неявно вызвать процедуру [D5, D7]


Al500 ©   (2007-10-10 08:29:00) 

Например, имеется процедура: Label1Click(Sender);, возможно ли ее вызвать зная, например, имя компонента - 'Label1'.
(FindComponent('Label1') as TLabel)Click(Sender) - не проходит.
(FindComponent('Label1') as TLabel).OnClick(Sender) - не устраивает.
Спасибо.


evvcom   (2007-10-11 09:09:00) [1]


> Al500   (10.10.07 13:09) [6]
> To evvcom, ega23:
> нет такой ф-ии для Label, kak Click.

Конечно, нет. Это ж не функция, а метод-процедура. Да, я не проверял видимость метода в TLabel, тебе ж тоже надо дать хоть чуточку подумать. А Click для TLabel определен, просто немного спрятан, в секции protected, но добраться до него имеется возможность. См. вариант 2 из [3].

> То ЮЮ: много компонентов Label, нужно для того, чтобы не
> описывать нажатие клавиш для каждой Label и возникновения
> события OnClick. У каждого Label - свое OnClick.

Не понял. Если определил OnClick для каждого свое, то это уже есть "описание нажатия клавиш для каждой TLabel". В этом случае тебе опять же подойдет любой из вариантов в [3]

> SORRY, ТРАВА, разобрался.

Ты прежде чем на форуме слово молвить, от травы отходи :)


Плохиш   (2007-10-10 19:01:00) [2]


> Al500   (10.10.07 13:09) [6]
> To evvcom, ega23:
> нет такой ф-ии для Label, kak Click.

Зато у TControl есть.

> много компонентов Label
...
> У каждого Label - свое OnClick.

Дурость какая-то...


Al500   (2007-10-10 15:04:00) [3]

SORRY, ТРАВА, разобрался.
Спасибо всем!


Ping   (2007-10-10 13:39:00) [4]

В обоих случаях происходит закритие родительского для Label компонента Panel.

Это такой баг? Или фича? Или трава? Короче... ты ерундой занимаешься.


Германн   (2007-10-10 13:27:00) [5]


> Al500   (10.10.07 13:11) [7]

Ну а мышкой-то ты кликаешь? Или хочешь только лишь симулировать клик?


Al500   (2007-10-10 13:23:00) [6]

То Ping:
В обоих случаях происходит закритие родительского для Label компонента Panel.


Al500   (2007-10-10 13:11:00) [7]

То Герман:
Вопрос был о вызове процедуры, имя компонента здесь ни при чем.


Al500   (2007-10-10 13:09:00) [8]

To evvcom, ega23:
нет такой ф-ии для Label, kak Click. При событии OnClick происходит закрытие компонетов TPanel, на которых расположены Label.
То ЮЮ: много компонентов Label, нужно для того, чтобы не описывать нажатие клавиш для каждой Label и возникновения события OnClick. У каждого Label - свое OnClick.


Германн   (2007-10-10 13:08:00) [9]


> возможно ли ее вызвать зная, например, имя компонента -
> 'Label1'.

Стремление использовать имя компонента = = неумение пользоваться свойством Tag и/или параметром Sender.


ЮЮ   (2007-10-10 12:22:00) [10]

Из вопроса непонятно, почему нельзя просто
 Label1Click(Label1);
или автору действительно откуда-то известно только строковое представление имени компонента?


Ping   (2007-10-10 10:01:00) [11]

Вариант 1:

var
 L: TComponent;
begin
 L := FindComponent('Label1');
 if (L <> nil) and (L is TLabel) and Assigned(L.OnClick) then
   TLabel(L).OnClick(L);


Вариант 2:

var
 L: TComponent;
type
 TLocalLabel = class(TLabel);
begin
 L := FindComponent('Label1');
 if (L <> nil) and (L is TLabel) then
   TLocalLabel(L).Click;


Можно еще вариант 3 - сообщениями. Но это, мне кажется, лишнее...


Ega23   (2007-10-10 08:56:00) [12]


> (FindComponent('Label1') as TLabel).OnClick(Sender) - не
> устраивает.


Чем?


> (FindComponent('Label1') as TLabel)Click(Sender) - не проходит.


А чем это от второго варианта отличается?


evvcom   (2007-10-10 08:54:00) [13]


> as TLabel)Click(Sender) - не проходит.

а точку перед Click поставить не пробовал?


Наверх

Титульная страница Поиск, карта сайта Написать письмо