Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];

Вниз

Интересный вопрос. Создаю компонент на основе 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.014 c
8-1148156126
lockheed_man
2006-05-21 00:15
2007.01.14
Image со ScrollBar ами


2-1166921681
Fist
2006-12-24 03:54
2007.01.14
if FindFirst( *.* , faDirectory, srDir) = 0 then - находит все фа


15-1166971678
antonn
2006-12-24 17:47
2007.01.14
Прошу помощи в переводе (rus-eng)


2-1166558170
addi
2006-12-19 22:56
2007.01.14
Мультимедийный таймер


1-1164205790
doncova1
2006-11-22 17:29
2007.01.14
нет полосы прокрутки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский