Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.17;
Скачать: CL | DM;

Вниз

Вопрос по ActionList   Найти похожие ветки 

 
bmai   (2002-06-03 15:16) [0]

Здравствуйте
Имеется большое количество (не массив) SpeedButton с именами SPB1, SPB2, ... и соответствующих пунктов меню MNU1, MNU2, ...
У всех общий Action, и в обработчике OnExecute нужно вызвать одну и ту же функцию, но с параметром, равным цифрам из имени нажатой кнопки или меню. Как сделать?
Возможно, подход в корне неверный (мой первый опыт использования ActionList), тогда подскажите как лучше.
Спасибо


 
Lord Warlock ©   (2002-06-03 15:24) [1]

Вообще-то ActionList используется для выполнения одинаковых операций различными контролями, но если тебе надо уникально идентифицировать каждый контроль, пользуйся свойством Tag.


 
bmai   (2002-06-03 15:30) [2]

Дело в том что мне недавно попался пример кода преобразования имени компонента в строку. Тогда это было не актуально, а теперь не могу найти.


 
Lord Warlock ©   (2002-06-03 15:33) [3]

Свойство ClassName?


 
bmai   (2002-06-03 15:52) [4]

Нет, не то. ClassName возвращает мне TAction, а надо не имя класса, а имя конкретного объекта (кнопки или пункта меню), вызвавшего OnExecute в ActionList-е


 
Mz_______   (2002-06-03 16:16) [5]

Можно извратиться таким способом но imho не стоит,..
В обработчике Button OnClick

Action1Execute(Sender);

тогда в Action OnExcecute

Showmessage((Sender as TButton).Caption);


 
Mz_______   (2002-06-03 16:25) [6]

2bmai (03.06.02 15:30)"пример кода преобразования имени компонента в строку"
????
TComponentName = type string;


 
bmai   (2002-06-03 18:02) [7]

2Mz_________
Для моего случая строке должны были бы присвоиться "SPB1", если была нажата SPB1 и т.д.

Вариант с Tag выглядит вполне подходящим, только как узнать в OnExecute кто именно вызвал событие, чтобы определить его Tag?


 
bmai   (2002-06-03 18:31) [8]

Нашел, что имя компонента можно выудить так:
Str := TComponent(Sender).GetNamePath

Остался вопрос как найти в OnExecute кто именно исходный Sender?


 
MAxiMum ©   (2002-06-03 18:44) [9]

TComponent(Sender).Name. А какая разница?


 
bmai   (2002-06-03 19:05) [10]

2MAxiMum ©

TComponent(Sender).Name - Specifies the name of the component as referenced in code.

TComponent(Sender).GetNamePath - Returns a string used by the Object Inspector.

Видимо правильнее использовать 1-ый вариант.



 
bmai   (2002-06-03 19:18) [11]

Вот те на! Заработало! Вроде тоже самое раньше не хотело работать.

Кинул на форму 2 Button-а, ActionList, Edit, поставил обеим кнопкам в Action Action1Execute и дописал

procedure TForm1.Action1Execute(Sender: TObject);
begin
Edit1.Text:= TComponent(Sender).Name;
end;


Выдает в Edit-e имена кнопок, как мне и требовалось.
Всем спасибо за предложения.


 
bmai   (2002-06-05 03:13) [12]

Вся хитрость была в том, что у меню и кнопок надо было оставить свойство Action пустым, а в OnClick поставить Action1Execute. Тогда Sender, естественно, получает значение, соответствующее задействованному Control-у.



Страницы: 1 вся ветка

Текущий архив: 2002.06.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
3-54973
AJ blacksmith
2002-05-13 18:39
2002.06.17
Работа с датой


7-55332
Taison
2002-03-14 03:59
2002.06.17
CD-ROM


14-55312
Serhy
2002-05-16 02:56
2002.06.17
Легенды о Камелоте, короле Артуре и рыцарях Круглого Стола.


1-55126
Юлия
2002-06-06 14:18
2002.06.17
Мастера! Вышлите несколько примеров работы с многопоточностью


4-55354
X3m
2002-04-15 08:53
2002.06.17
КАК показать/скрыть иконки на рабочем столе?