Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с FindComponent 
V
    Опции темы
student43
Дата 26.6.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.4.2006

Репутация: нет
Всего: нет



Вот такой вопрос у меня имею функцию но она немного не работает, программа не распознаёт функцию FindComponent в теле функции а если FindComponent выполняеться в программе то всё работает без проблем! Как сделать чтобы FindComponent работало в функции ?

Код

function popad(a:string):string;
var d:TComponent;
begin
d:=FindComponent('x'+Chr(a));
(d as TImage).Tag:=5;
end;
   

Это сообщение отредактировал(а) student43 - 26.6.2006, 16:31
PM MAIL   Вверх
Romikgy
Дата 26.6.2006, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Цитата(student43 @  26.6.2006,  15:21 Найти цитируемый пост)
s

что за переменая? 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
student43
Дата 26.6.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.4.2006

Репутация: нет
Всего: нет



Ошибся там вместо s идёт a.

Я бегло писал ) 
PM MAIL   Вверх
Alexeis
Дата 26.6.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(student43 @  26.6.2006,  15:21 Найти цитируемый пост)
d:=FindComponent('x'+Chr(a));

Функция Chr принимает аргумент типа byte, а не string

Добавлено @ 16:46 
Вообще чесно говоря я так и не понял зачем она вообще здесь нужна smile  


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Romikgy
Дата 26.6.2006, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



И что ты в нем передаешь ? один символ? тогда зачем
Цитата(student43 @  26.6.2006,  15:21 Найти цитируемый пост)
a:string

?
 или несколько символов? тогда непонятно 
Цитата(student43 @  26.6.2006,  15:21 Найти цитируемый пост)
Chr(a)

 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
skyboy
Дата 26.6.2006, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



student43, findcomponent - это метод. Метод, вроде бы, класса TwindowControl или что-то типа. Т.е. у класса Tform этот метод есть, у Tpanel - есть. А просто так, у "ничего", этого метода нет. Так что передавай в свою функцию параметром контейнер...  
PM MAIL   Вверх
student43
Дата 26.6.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.4.2006

Репутация: нет
Всего: нет



Цитата(Romikgy @  26.6.2006,  16:48 Найти цитируемый пост)
И что ты в нем передаешь ? один символ? тогда зачем

Цитата(student43 @  26.6.2006,  15:21 )
a:string


?
 или несколько символов? тогда непонятно 

Цитата(student43 @  26.6.2006,  15:21 )
Chr(a)


Да не в этом дело! Хоть integer Тип можно поставить! Проблема с FindComponent выдаёт ошибку 

Undeclared identifie: 'FindComponent'. Программа определяет как переменую а не как функцию, а вот как сделать чтобы определяло как функцию

Добавлено @ 17:12 
Цитата(skyboy @  26.6.2006,  17:09 Найти цитируемый пост)
student43, findcomponent - это метод. Метод, вроде бы, класса TwindowControl или что-то типа. Т.е. у класса Tform этот метод есть, у Tpanel - есть. А просто так, у "ничего", этого метода нет. Так что передавай в свою функцию параметром контейнер...

А пример можно ? 
PM MAIL   Вверх
skyboy
Дата 26.6.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



пример:
Код

procedure Tform1.onbutton1click(sender: Tobject);
begin
(findcomponent('button1') as Tbutton).width:= 200; // это сработает, потому что тут неявно вызывается findcomponent именно для объекта типа Tform1(объект будет передан в переменной self)
end;

procedure simple;
begin
(findcomponent('button1') as Tbutton).width:= 200; // это не сработает, потому как функции findcomponent нет. Есть только метод. А в этой процедуре неясно, у кого же этот метод вызывать.
end;

з.ы. Метод findcomponent - это метод класса TComponent.  
PM MAIL   Вверх
Alexeis
Дата 26.6.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



skyboy, в данном случае это метод формы
Form1.findcomponent(...)
В методах Form1 опускают и подразумевают Self который в конечном итоге и будет form1 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
student43
Дата 26.6.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.4.2006

Репутация: нет
Всего: нет



не сильно знаком с синтаксисом процедур в Делфи книжки щас нету так что дурацкий вопрос задам, вот сделал описание процедуры тут вроде всё правильно 
Код

procedure Tform1.onbutton1click(name:string;Sender: TObject);
begin
(findcomponent(name) as TImage).Picture:=Image4.Picture;
end;

Но ошибка выскакивает при обращении что писать во входные параметры ?
Вот так у меня!
Код

Tform1.onbutton1click('x11');

А вот мессага!
[Error] Unit1.pas(230): Not enough actual parameters 
PM MAIL   Вверх
Poseidon
Дата 26.6.2006, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Один топик, один вопрос!

Думаю в твоем случае подойдет 
Код
Tform1.onbutton1click('x11', Sender);
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Alexeis
Дата 26.6.2006, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(student43 @  26.6.2006,  16:56 Найти цитируемый пост)
процедуры тут вроде всё правильно 

Обработчик сообщения имеет СТРОГО ОПРЕДЕЛЕННЫЙ ФИКСИРОВАННЫЙ НАБОР ПАРАМЕТРОВ smile  


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
skyboy
Дата 26.6.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



шутник. зачем ты объединяешь обработчик и свою функцию? Если не хошь искать в пределах обработчика процедуры, то выдели поиск компонента в отдельную функцию например так:
Код

function GetComponentOf(Source: Tcomponent;name: string): Tcomponent;
begin
 GetComponentOf:= Source.FindComponent(name);
end;

и вызывай так:
Код

(getcomponentof(form1,'Button1') as Tbutton).width:= 200;
(getcomponentof(form1.panel1,'Label2') as Tlabel).color:= clRed;

Цитата(alexeis1 @  26.6.2006,  17:38 Найти цитируемый пост)
В методах Form1 опускают и подразумевают Self который в конечном итоге и будет form1 

Твоя неправда  smile . В приведенном мною коде
Код

procedure TForm1.onbutton1click(sender: Tobject);    
begin    
(findcomponent('button1') as Tbutton).width:= 200; // это сработает, потому что тут неявно вызывается findcomponent именно для объекта типа Tform1(объект будет передан в переменной self)    
end;

в качестве self'a будет не объект с именем Form1, а любой объект класса TForm1, назвать которого ты вправе как угодно. Хоть BillGates smile Методы - относятся к классам, а не к объектам. Объекты их вызывают.  
PM MAIL   Вверх
Alexeis
Дата 27.6.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



skyboy, Строго говоря, конечно,
Цитата(skyboy @  26.6.2006,  17:16 Найти цитируемый пост)
 не объект с именем Form1, а любой объект класса TForm1, назвать которого ты вправе как угодно
, но судя по хорактеру вопроса student43, новичок - а потому вероятнее всего форма имеет имя Form1 (я сам сохраняю исходныее названия  smile )
Что касается 
Цитата(skyboy @  26.6.2006,  17:16 Найти цитируемый пост)
Методы - относятся к классам, а не к объектам. Объекты их вызывают. 
 то это не совсем верно каждый экземпляр объекта хранит указатели на свои методы, либо указатель на VMT - для виртуальных методов. Так что объект "владеет" своими методами.
 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
skyboy
Дата 27.6.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



alexeis1, да, касательно не-виртуальных методов я как-то запамятовал smile Просто как-то не верится, что один и тот же код хранится в разных объектах smile 
PM MAIL   Вверх
Alexeis
Дата 27.6.2006, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(skyboy @  27.6.2006,  14:58 Найти цитируемый пост)
Просто как-то не верится, что один и тот же код хранится в разных объектах

Правельно не верится ведь код метода и вправду хранится в одном экземпляре общем для всех объектов данного класса. У каждого объекта имеется только адрес его метода, а не сам метод. Для виртуальных методов адрес таблицы виртуальных методов, правда насколько я помню для каждого экземпляра создается своя таблица витруальных методов. А вот с динамичискими посложнее... 

Дальнейшее обсуждение думаю выходит за рамки данной темы. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1008 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.