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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2011, 21:00   #1
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию как получить объект формы по сендеру

в собитии онклик
по сендеру вычисляю форму
sender - кнопка
sender.parent - форма кнопки
TForm(Tbutton(sender).Parent)
у формы кнопки есть и другие объекты...
можно обратиться к объекту с этой формы ?
пыжок
maloun вне форума Ответить с цитированием
Старый 06.07.2011, 21:07   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

начнем с того что обычно Self это итак форма сама.
Self.Button1(или просто Button1 что равносильно)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.07.2011, 21:09   #3
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

if TEdit(TForm(Tbutton(sender).Parent) .ObjectMenuItem.Find('Edit1')).Text <>''

как-то так пытался, но кажется к MenuItem не передаётся объект
кажется это не то меню о котором я подумал(

тогда новое условие...
TForm1 и форма с которой сендр разные вещи
а процедура принимающая сендр у левого класса в юните с Form1
пыжок

Последний раз редактировалось Stilet; 07.07.2011 в 08:15.
maloun вне форума Ответить с цитированием
Старый 06.07.2011, 21:57   #4
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Цитата:
Сообщение от maloun Посмотреть сообщение
if TEdit(TForm(Tbutton(sender).Parent) .ObjectMenuItem.Find('Edit1')).Text <>''
Что это вы пытались сделать?
_Engine_ вне форума Ответить с цитированием
Старый 06.07.2011, 22:02   #5
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

Цитата:
Сообщение от _Engine_ Посмотреть сообщение
Что это вы пытались сделать?
мысль была в том, что у формы обязан быть список её объектов(компонентов)
к которым можно какнить обращаться,
нашёл процедуру find и думал, что она найдёт мне компонент с капченом,
который я ввёл('Edit1') на моей форме, но это вообще не то...
пыжок
maloun вне форума Ответить с цитированием
Старый 06.07.2011, 22:06   #6
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Вообще, ход мыслей верный, у формы есть методы для поиска дочерних "контролов".
посмотрите на Form.Controls / Form.ControlsCount
Можно в цикле проверить if Form1.Controls[i] is TEdit then ...
_Engine_ вне форума Ответить с цитированием
Старый 06.07.2011, 22:07   #7
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

спасибо, сейчас найду

Код:
procedure Form1.onClick(sender:TObject);
var
  p:pointer;
  i:integer;
begin
  p:=Tbutton(sender).Parent;
  for i:=0 to TWinControl(p).ControlCount-1 do
  if TWinControl(p).Controls[i] is TEdit then
  if TEdit(TWinControl(p).Controls[i]).Name='Edit2' then
  TEdit(TWinControl(p).Controls[i]).Text:='ЫЫЫЫЫЫЫЫ нашёл';
end;
весь поиск
пыжок

Последний раз редактировалось Stilet; 07.07.2011 в 08:15.
maloun вне форума Ответить с цитированием
Старый 06.07.2011, 22:39   #8
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Молодец, тебе еще справкой научиться пользоваться, вообще цены не будет
_Engine_ вне форума Ответить с цитированием
Старый 07.07.2011, 01:49   #9
Gonzo
Форумчанин
 
Аватар для Gonzo
 
Регистрация: 07.03.2009
Сообщений: 123
Подмигивание

Цитата:
Сообщение от maloun Посмотреть сообщение
Код:
procedure Form1.onClick(sender:TObject);
...
end;
весь поиск
Если известно имя компонента, то можно использовать метод FindComponent.
IMHO - компактней
Код:
var pControl: Pointer;
begin
 pControl:=(Sender as TButton).Parent.FindComponent('Edit1');
 if pControl<>nil then
  TEdit(pControl).Text:='Component is found!';
end;
Не говорите что мне делать, и я не скажу куда Вам идти.
Пишу программы на заказ на Delphi и Pascal
Форум разработчиков Pascal и Delphi
Gonzo вне форума Ответить с цитированием
Старый 07.07.2011, 08:17   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я как-то не понял зачем искать объект, если можно просто к нему обратиться в коде по имени...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как зная ProcessID получить Handle главной формы? NikLik Win Api 8 27.08.2021 21:29
Как получить классы всех дочерних окон формы rangel Работа с сетью в Delphi 8 12.10.2014 17:36
Как получить доступ из ActiveX-формы к ADOConnection в DataModule cleaner_it Общие вопросы Delphi 2 13.02.2011 21:19
Как получить доступ к компанентам другой формы LikeNice Компоненты Delphi 6 04.07.2010 14:17
как получить конкретный объект DOM из нескольких одинаковых Doda JavaScript, Ajax 3 18.05.2009 13:25