Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 18:52 25.06.24 
Клубове/ Компютри и Интернет / Delphi Пълен преглед*
Информация за клуба
Тема Явно няма интерес към темата [re: LSS]
Автор simple_code (Правдоподобен)
Публикувано16.09.05 22:47  



Здравейте отново.

Темата я постнах аз, но сега реших и да се регистрирам.

Ще продължа да пиша, защото съм сигурен, че темата съвсем не е тривиална и някога, някак, на някого вместо да му се вгорчи живота, ще влезне тук и може би ще намери това което му трябва.

Сега: имам малък напредък в издирването на валидни референции на формите принадлежащи на проект по време на разработка.

Първо ще поясня как седят нещата при мен, за да не ме разбират хората погрешно.

1. Имаме компонента наследник на TComponent (тя е именно и във фокуса на проблема)
2. Имаме дефиниран нейн редактор, който е наследник на TComponentEditor
3. Редактора е с override-нати методи: ExecuteVerb(), GetVerbCount(), GetVerb().

Сега ясно е, че когато получим инстанция на компонентния редактор, тя пристига направо с интерфейсно копие Designer от тип IDesigner, както и с копие на компонентата.

Толкова с обясненията.

С много мъки успях да изнамеря валидни копия на обектите от типа TForm, TFrame, TDataModule и така натък, чиито модули обаче са включени в uses клаузата на Designer.Root обекта. :(

Естествено, начинът по който стана, направо е за смях и чак ме е яд, че трябва да пилея ненужни ресурси. Ето за какво говоря:

Използвам процедурата Designer.GetComponentNames(TypeData: PTypeData; Proc: TGetStrProc) за да докопам всички обекти от специфицирания от TypeData клас (вмоя код викам тази функция за TComponent). Proc е callback функция която третира името на намерената компонента:

type TGetStrProc = procedure(const S: string) of object

е в тялото на callback функцията правя нещо от тоя род:



var
cmpnt: TComponent;
cmpntOwner: TComponent;
begin
cmpnt := Designer.GetComponent(s);
if cmpnt <> nil then
begin
cmpntOwner := GetTopOwner(cmpnt);
if FFormsList.IndexOf(cmpntOwner.Name) = -1 then
FFormsList.AddObject(cmpntOwner.Name, cmpntOwner);
end;



т.е. попълвам списъка FFormsList с намерените от GetTopOwner() референции
GetTopOwner() не прави нищо друго освен да изнамери cmpntOwner.Owner.Owner.Owner..... докато е различен от nil

та... това което не ми харесва е че за всички компоненти трябва първо да изнамирам TopOwner-а им, после да проверявам дали "случайно" той вече не фигурира в списък и евентуално след това да го добавя... Според мен това е абсолютна глупост, ама за сега само това успях да направя. Да не говорим, че това не решава проблема напълно. Както казах и преди функцията Designer.GetComponentNames() минава през компонентите на модулите които са включени в uses клаузата на Designer.Root. Ами като нищо мога да имам форми и то достатъчен брой, които да не се използват от притежателя на компонентата ми...

Е... Чакам мненията ви...


[Fatal Error] UniverseLoader.god(666): Devision by cucumber. Please reinstall the Universe.

Редактирано от simple_code на 17.09.05 00:45.



Цялата тема
ТемаАвторПубликувано
* Достигане до всички форми във DesignTime LSS   16.09.05 14:57
. * Явно няма интерес към темата simple_code   16.09.05 22:47
. * Re: Явно няма интерес към темата Dark_Dirk   18.09.05 21:44
. * е... simple_code   18.09.05 23:55
. * Re: е... Mixy   19.09.05 12:27
. * Re: е... simple_code   19.09.05 14:32
. * Re: е... Mixy   19.09.05 21:54
. * Re: е... simple_code   20.09.05 01:18
. * Re: е... Dark_Dirk   19.09.05 12:51
. * Re: е... simple_code   19.09.05 14:18
. * Re: е... Dark_Dirk   20.09.05 14:21
. * Re: е... simple_code   20.09.05 18:13
. * Re: е... andrew_nikoloff   20.09.05 18:45
. * Re: е... simple_code   21.09.05 13:19
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.