Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Интересный вопрос. Создаю компонент на основе TPanel [D7, Win2k, WinXP]


Action ©   (2006-12-21 08:39:00) 

Если после создания кидаем на форму несколько компоеннтов и из кода самого компонента пытаемся обратиться к самому себе

Self

Например для того чтобы что то создать или найти на нашем компоненте ( например другие контролы ) то почему то всегда Self.Name являеться именно той панелью которую кинули на форму последнюю. Соответственно у других панелей обработчики перестают работать и работает только последня панель.

Всё бы ничего , если бы обработчики кода стояли в приложении. Но весь фокус в том что обработка кода происходит именно по событиям на которые реагирует сама панель и соответственно если панель не одна то код становиться нерабочим.

Как правельно обращаться к текущему компоненту из него самого ? Учитывая что компонентов может быть неограниченое количество.

P.S с одной панелью всё ok, с двумя и более уже проблема :(


evvcom   (2006-12-22 10:48:00) [1]

> [3] Action   (21.12.06 10:03)
> Немного ты не прав

В том, что и как я понял, я прав. Считаешь по-другому, приводи цитату и свое толкование.

> [3] Action   (21.12.06 10:03)
> компонент сам по себе не вызывает никакие методы

Абсолютная ложь! Или ты написал свой аналог VCL? :-)


Action   (2006-12-21 10:49:00) [2]

Моя ошибка. Всё верно. Я наконец то смог разобраться, просто оказалось что объявил одну переменную глобально в компоненте и когда все контролы в компоненте прогонял в цикле этой переменной присваивалось имя последнего компонента т.е панели.
Сам виноват в общем.

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


Сергей М.   (2006-12-21 10:11:00) [3]


> В чём проблема ?


Тебе уже сказали - проблема в ошибке в твоем коде в 17-й строке)


> как её решить ?


Очевидно же - найти эту строку и исправить эту ошибку


Action   (2006-12-21 10:03:00) [4]

> > evvcom ©   (21.12.06 08:50) [1]

Немного ты не прав, компонент сам по себе не вызывает никакие методы, он взаимодействует со средой. Например Вызываеться какой то метод из компоеннта и компонент запускает обработчик который взаимодействует с выбранным компонентом. Минус в том что компонент не может себя найти, работа постоянно проходит только с последнем кинутым на форму компонентом.

В чём проблема ? И как её решить ?


Action   (2006-12-21 09:03:00) [5]

> evvcom ©   (21.12.06 08:50) [1]

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

Но из за этой ошибки ничего не получаеться до ума довести :(
Разницы нет пишешь ли ты Self или ничего не пишешь, один фиг обращаеться к последнему кинутому на форму компоненту :(

блин


evvcom   (2006-12-21 08:50:00) [6]

У тебя ошибка в программе, в 17 строке. :)

> Как правельно обращаться к текущему компоненту из него самого

Так и обращаться по Self, причем Self можно вообще не писать.

> Всё бы ничего , если бы обработчики кода стояли в приложении.
> Но весь фокус в том что обработка кода происходит именно
> по событиям на которые реагирует сама панель

Т.е. ты обработчики занял прямо в коде самого компонента? Это в корне не верно! Обработчики нужны именно для того, чтобы программист-пользователь компонента мог его использовать. А для программиста-автора компонента существуют виртуальные и динамические методы, из которых обычно и вызываются пользовательские обработчики. Посмотри, например, методы TCustomForm.DoShow, DoHide, DoClose.


Наверх

Титульная страница Поиск, карта сайта Написать письмо