Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.14;
Скачать: CL | DM;

Вниз

Интересный вопрос. Создаю компонент на основе TPanel   Найти похожие ветки 

 
Action   (2006-12-21 08:39) [0]

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

Self

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

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

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

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


 
evvcom ©   (2006-12-21 08:50) [1]

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

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

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

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

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


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

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

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

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

блин


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

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

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

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


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


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


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


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


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


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

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

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


 
evvcom ©   (2006-12-22 10:48) [6]

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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.01.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
6-1155724949
KygECHuK
2006-08-16 14:42
2007.01.14
Mapi


15-1166600761
infom
2006-12-20 10:46
2007.01.14
Сжатие картинок в документах MS Word


3-1161779915
SLP
2006-10-25 16:38
2007.01.14
select с разных серверов и баз данных


2-1166959976
Jeeb
2006-12-24 14:32
2007.01.14
Добавление записи в БД


9-1141572255
VolanD666
2006-03-05 18:24
2007.01.14
Collision Detection && SpeedFactor