Дърво на компоненти
Някой знае ли дали има експерт за D5, който показва дърво на използваните компоненти, както прави D7?
Ако не, тогава връзка към източниците/примери на експерти за Delphi. Осмелявам се да го напиша сам :-)
←→Юрий Зотов ( 06.01.2004 17:43 ) [1]
Всички Delphi имат вграден браузър (меню View, проектът трябва да бъде компилиран). Позволява ви да видите дървото на обектите както в конкретен проект, така и в целия VCL.
←→MikeZ ( 2004-01-06 17:56 ) [2]
Изобщо не е така! Не е нужно да гледам класовете с техните предци, а компонентите, които лежат на формата. Тоест, трябва да навигирате през компонентите, когато има твърде много от тях.
←→MikeZ ( 2004-01-06 18:12 ) [3]
Добре, тогава връзка с KFOR от експерти, ако има такава.
←→Тимохов ( 06.01.2004 18:15 ) [4]
В! А защо не обичаш да гледаш dfm - там се вижда цялата йерархия.
←→afwood ( 2004-01-06 18:36 ) [5]
Е, това написах наскоро. Само в C++Builder. Ако е необходимо, мога да хвърля източника на процедурата.
←→afwood ( 2004-01-06 18:37 ) [6]
"Ако е необходимо" - това съм аз в смисъл, ако не се уморите да разбирате моя Sish код :)
←→Вук ( 06.01.2004 19:02 ) [7]
до MikeZ: >Добре, тогава връзка към експертния CDC, ако има такъв.
←→afwood ( 2004-01-06 19:07 ) [8]
Ето как изглежда една съкратена версия на моята процедура. Тук дървото ще показва САМО контролното дърво. И да кажем, че всички елементи от менюто просто ще лежат в основата на това дърво. Но това може да се реши по точно същия начин, както при контролите.
void RecurBuildTreeForControl(TTreeNodes *Nods, TTreeNode*Кимване, TWinControl * WinCon) < за(int i=0;i ControlCount;i++) < TWinControl *Tem; if(Tem = dynamic_cast (WinCon->Controls[i])) < RecurBuildTreeForControl(Nods, Nods->AddChild(Nod,Tem->Name) ,Tem); > друго < Nods->AddChild(Nods->Item[0],WinCon->Controls[i]->Име); > >
void RecurBuildTree(TTreeNodes *Nods, TForm * For) < Кимване->Изчистване(); TTreeNode *Node=Nods->Add(NULL,For->Name); за(int i=0;i ComponentCount;i++) < TWinControl *Tem; if(Tem = dynamic_cast (For->Components[i])) < RecurBuildTreeForControl(Nods, Nods->AddChild(Node,Tem->Name) ,Tem); > друго < Кимвания->AddChild(Node,For->Components[i]->Name); > >
←→MikeZ ( 2004-01-06 22:50 ) [9]
2Тимохов: Иерархия, разбира се, видима, но листат с десеток хиляди строки - това не е слАбо. Т.е. - не подхожда из-за явното неудобства.
2афвуд: С превеликото удовольствие възьму този код. и отдам човеку, знающему Си ;-). Ил сам гледам. Думаю разберусь. Само вот вопрпос: ти експерт си написал? Или просто построение компоненти на дървото? Ако просто дърво (както е видно от кода), то аз и сам знам, как това се прави. Вест въпрос в това, как това да се замени във вид на експерта. Если у теб експерт именно, то намил, плз.
www.gexperts.org Ето един или два варианта? Но аз и така, и едак не понял. Моля, обьясни поподробнее.
←→MikeZ ( 2004-01-06 22:57 ) [10]
2Vuk: Понял, което това. спасибо. Бъду разбираться, но това е твърде много.
2Всички: Вопросы все равно остались.
←→афвуд ( 07.01.2004 16:21 ) [11]
Прости. Невнимателно прочел твоя въпрос.
Какво е експерт според твоето разбиране?
Имам програма - симулира чекмедже на прозорец на Delphi. Е, дървото е същото като в Delphi. Мислех, че и ти си по същия начин :)
←→MikeZ ( 2004-01-08 14:52 ) [12]
Експерт - не е според моите разбирания ;-), а в Делфи. Библиотека, която работи с и вътре в Delphi.
←→MikeZ ( 2004-01-08 16:43 ) [13]
Вече намерих как да направя този експерт. Но има въпроси. Например: Искам да получа името на активната форма. Правя това: Функция GetActiveForm: TForm; Начало Резултат := TForm((BorlandIDEServices As INTAEditWindow).GetForm); Край; Не е ясно защо възниква грешката. Това е въпросът - защо?