Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
3 / 3 / 0
Регистрация: 08.10.2010
Сообщений: 114
1

Как программно определить имя компонента из его же процедуры?

12.01.2011, 20:34. Показов 6845. Ответов 6
Метки нет (Все метки)

Допустим есть вот такая процедура:

Delphi
1
2
3
4
procedure TStartForm.sSpeedButton6Click(Sender: TObject);
begin
Form2.Close;
end;
Имя компонента вызывающего процедуру sSpeedButton6

Как определить в переменную его имя в данной процедуре.

Надеюсь понятно объяснил.

Заранее спасибо за ответы и внимание к теме
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2011, 20:34
Ответы с готовыми решениями:

Как узнать имя компонента по его тегу?
У меня есть тег компонента, но нет его имени. Как его узнать по тегу?

Как в MFC определить программно свой IP-адрес и имя машины?
Подскажите, пожалуйста, как в MFC: 1).определить программно свой IP-адрес и имя машины?;...

Доступ к свойствам компонента через его имя
Как изменить какой нибудь параметр у объекта, если его Name дан в виде строки? Например:...

Как определить IP заходящего на мою страничку и его имя?
Поскажите плиз, как определить IP заходящего на мою страничку и его имя?

6
13067 / 5853 / 1705
Регистрация: 19.09.2009
Сообщений: 8,807
12.01.2011, 23:06 2
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TStartForm.sSpeedButton6Click(Sender: TObject);
var
  SpBtn : TSpeedButton;
begin
  if Sender is TSpeedButton then begin
    SpBtn := Sender as TSpeedButton;
    ShowMessage('Имя компонента типа TSpeedButton, который вызывал этот метод: "' + SpBtn.Name + '".');
  end else begin
    ShowMessage(
      'Имя компонента, который вызвал этот метод: "' + Sender.Name + '".' + #10
      + 'Тип этого компонента: "' + Sender.ClassName + '".'
    );
  end;
end;
0
902 / 663 / 132
Регистрация: 01.03.2010
Сообщений: 1,243
12.01.2011, 23:35 3
cvip,
Еще можно добавить:
Если кнопок много, и нужно постоянно запоминать имя последней нажатой, то можно сделать просто.
Создаем процедуру только для одной кнопки, например 1-й
Delphi
1
2
3
4
procedure TForm1.sSpeedButton1Click(Sender: TObject);
begin
NamesClickSpBtn:=(Sender as TSpeedButton).Name; // NamesClickSbtn ранее заданная переменная типа string;
end;
Теперь нужно зайти в инспектор каждой из оставшихся кнопок этого типа.
В Events найти OnClick и в поле напротив выбрать sSpeedButton1Click.
Все. Теперь кликнув по любой из этих кнопок, в NamesClickSpBtn будет записываться ее имя.
1
3 / 3 / 0
Регистрация: 08.10.2010
Сообщений: 114
13.01.2011, 10:15  [ТС] 4
Мне немного для другого))
Пишу экранную клавиатуру и сначала начал каждой кнопке прописывать номер вызова нажатия клавиши, половину сделал и стукнуло в голову, как оптимизировать процесс. Каждой клавише задам имя ее номера на клавиатуре с приставкой key и при нажатии на любую кнопку будет вызываться одна и та же процедура, определять имя компонента вызвавшего, отрезать первые 3 символа и нажимать оставшийся номер на клаве.)))

2 Mawrat, спасибо, думаю операции с SendMessage мне не понадобятся, ограничусь присвоением имени.

Всем большое спасибо, вечерком, дома попробую, отпишусь.
0
13067 / 5853 / 1705
Регистрация: 19.09.2009
Сообщений: 8,807
13.01.2011, 12:41 5
Цитата Сообщение от cvip Посмотреть сообщение
при нажатии на любую кнопку будет вызываться одна и та же процедура, определять имя компонента вызвавшего, отрезать первые 3 символа и нажимать оставшийся номер на клаве.
Не надо работать с именем кнопки. Коды клавиш для кнопок пропиши в свойстве TAG каждой кнопки. И в общей процедуре обработки читай этот TAG и вызывай нажатие клавиши клавиатуры с этим кодом.
2
902 / 663 / 132
Регистрация: 01.03.2010
Сообщений: 1,243
14.01.2011, 01:22 6
Цитата Сообщение от cvip Посмотреть сообщение
при нажатии на любую кнопку будет вызываться одна и та же процедура
Так я это и написал? Всегда будет вызываться одна процедура. Можно и с Tag-ом.
Delphi
1
2
3
4
procedure TForm1.sSpeedButton1Click(Sender: TObject);
begin
NamesClickSpBtn:=(Sender as TSpeedButton).Tag; 
end;
Только в эту процедуру осталось добавить, как изменить код при нажатом Shift (писать большие буквы) и на каком языке писать (Rus-Eng).
0
3 / 3 / 0
Регистрация: 08.10.2010
Сообщений: 114
14.01.2011, 08:30  [ТС] 7
На небуквенные клавиши отдельные обработчики с зажимом
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2011, 08:30

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Программно определить имя компьютера
Как программно узнать имя компьютера в сети, на котором работает пользователь?

Как определить имя или ID WebUserControl в его собственной функции JavaScript
Поясню проблему. На странице находится несколько однотипных WebUserControls. Скажем uc1, uc2 и...

Определить имя переменной, указанной в опциях процедуры
И снова здравствуйте. И снова я со своей экранной клавиатурой. Спасибо еще раз MawRat за подсказку...

Как программно убрать фокус с компонента
Вариант Form1.ActiveControl:= 0; не компилируется. Может быть это можно сделать для компонента с...

Как узнать полное имя файла зная его краткое имя?
например при запуске программы достаточно написать "Excel" или "Calc" при этом система уже в курсе...

Как программно сделать shatdown COMплюсового компонента?
У меня есть зарегистрированный COM+ компонент. Этот компонент запускается автоматически когда к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.