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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2007, 12:00   #1
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию имя компонента и его отслеживане

Привет всем!!!
Как узнать имя поледнего компонента над которым мы произвели некоторое действие- например нажали кнопку?
Я сделал такой код : label1.Caption:=application.MainForm.ActiveControl. Name; Правилен ли он?
Если да то почему этот код не работает для speedbutton?
С уважением, bill.
bill вне форума Ответить с цитированием
Старый 23.07.2007, 15:42   #2
Net
;-)
Пользователь
 
Регистрация: 18.07.2007
Сообщений: 69
По умолчанию

ActiveControl и тот, с которым было последнее действие - не одно и то же.
А для SpeedButton не работает, потому что она не может иметь фокус, т.к. наследуется от TGraphicControl и не имеет собственного окна.
Net вне форума Ответить с цитированием
Старый 26.07.2007, 11:25   #3
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

ладно. Ну тогда как узнать имя последнего компонента над которым мы произвели какое то действие?
bill вне форума Ответить с цитированием
Старый 26.07.2007, 12:38   #4
Net
;-)
Пользователь
 
Регистрация: 18.07.2007
Сообщений: 69
По умолчанию

знаю только один способ - завести переменную и в коде каждого обработчика изменять ее на Sender. но если же обработчика нету, например, какого то checkbox1click, при щелчке на checkbox1, он не запишется в переменную.
Net вне форума Ответить с цитированием
Старый 27.07.2007, 10:33   #5
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

Т.е переменная насколько понял типа tobject?
bill вне форума Ответить с цитированием
Старый 27.07.2007, 11:15   #6
Net
;-)
Пользователь
 
Регистрация: 18.07.2007
Сообщений: 69
По умолчанию

TControl. приводить ее к TControl.
Net вне форума Ответить с цитированием
Старый 28.07.2007, 18:35   #7
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

Ок. Я сделал такой код(привожу отрывок)-
Цитата:
var
Form1: TForm1;sa:tcontrol;
implementation
{$R *.dfm}
procedure TForm1.FormClick(Sender: TObject);
var ss:string;
begin
label1.caption:=sa.Name;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
sa:=Tcontrol(sender);
end;
Но с таким же успехом я мог сделать глобальную переменную типа стринг и присваивать ей просто имя компонента.
Как это сделать все таки через tnotifyevent(если мозможно конечно)? Надо просто проследить какая кнопка была нажата(по ней активируется некое действие). У них единое свойство parent.
И повторюсь узнать имя кнопки.
bill вне форума Ответить с цитированием
Старый 02.08.2007, 12:29   #8
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

Я собстно пересмотрел свою прогу и пришел к выводу что этот код мне подходит . Но возникла новая, тесно связанная с предыдущей.
Цитата:
Суть проблемы: надо над всеми кнопкам с таким то именем провести некую апирацию - например сдвинуть на 100 единиц вправо.
Проблема в том что имени я не знаю. Оно хранится в переменной типа string.
По идее алгоритм должен выглядить так-
.....
var asd:string;
begin asd:=a.name;//перем-я а типа tgraphiccontrol
with Source AS tspeedbutton do
if name=asd then
left:=left+100;
.......
Он ругается что не знает слова source([Error] Unit1.pas(64): Undeclared identifier: 'Source');
Также он ругается на строке if name=asd then
пишет - [Error] Unit1.pas(65): Instance variable 'Name' inaccessible here.
Помогите, я уже долго ломаю голову над подобной задачей.
С уважением, bill.
bill вне форума Ответить с цитированием
Старый 02.08.2007, 13:18   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не проблема :
Вот в таком духе

[I]//********* FOR ******************
for i :=0 to Form1.ComponentCount-1 do
begin
//caption:=Application.Components[i].Name;
if (form1.Components[i].ClassType=TButton)
and (form1.Components[i].name=st_name_My) then
tbutton(form1.Components).Left:=0;
end;
//******* END FOR ****************{}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.09.2007, 21:26   #10
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Сообщение

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не проблема :
Вот в таком духе

//********* FOR ******************
for i :=0 to Form1.ComponentCount-1 do
begin
[i]//caption:=Application.Components.Name;
[i] if (form1.Components.ClassType=TButton)
[i]and (form1.Components.name=st_name_My) then
[i] tbutton(form1.Components).Left:=0;
end;
//******* END FOR ****************{}
Можно ещё вот так:
for i :=0 to Form1.ComponentCount-1 do
begin
[I] //caption:=Application.Components.Name;
if (form1.Components[i] is TButton)
and (form1.Components[i].name = st_name_My) then
TButton(form1.Components[I]).Left:=0;
end;
Alter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имя компонента... prizrak1390 Общие вопросы Delphi 11 17.04.2008 14:47
Прозрачность компонента JoanM Общие вопросы Delphi 14 16.02.2008 15:40
Нужны два компонента delphin100 Компоненты Delphi 2 13.01.2008 01:54
Регистрация компонента Zonder Компоненты Delphi 0 06.12.2006 18:17