![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите пожалуйста, возможно ли неявно вызвать процедуру [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 поставить не пробовал?