ТТрееВиев Делпхи компонента (налази се на картици палете „Вин32“ компоненти) представља прозор који приказује хијерархијска листа ставки, попут наслова у документу, уноса у индексу или датотека и директорија на диск.
Дрво чвора са потврдним оквиром или дугметом за радио?
Делпхијев ТТреевиев изворно не подржава потврдне оквире, али доња ВЦ_ТРЕЕВИЕВ контрола то чини. Можете да додате потврдне оквире у виеввиев трее надјачавањем ЦреатеПарамс поступка ТТрееВиев, специфицирајући ТВС_ЦХЕЦКБОКСЕС стил за контролу. Резултат је то све чворови у стаблу ће имати прикачене потврдне оквире за њих. Поред тога, својство СтатеИмагес се више не може користити јер ВЦ_ТРЕЕВИЕВ користи ову листу слика интерно за имплементацију потврдних оквира. Ако желите да пребаците потврдне оквире, то ћете морати да урадите користећи СендМессаге или ТрееВиев_СетИтем / ТрееВиев_ГетИтем макрои од ЦоммЦтрл.пас. ВЦ_ТРЕЕВИЕВ подржава само потврдне оквире, а не радио дугмад.
Приступ који ћете открити у овом чланку је много флексибилнији: можете да имате потврдне оквире и радио дугмади помијешане са другим чворовима на било који начин без промјене без измјене ТТреевиева или стварања новог
класа од тога да ово уради. Такође, сами одлучујете које ћете слике користити за потврдне оквире / радио дугмад једноставно додавањем одговарајућих слика на листу слика СтатеИмагес.Додајте потврдни оквир или дугме за радио
Супротно ономе у шта верујете, ово је прилично једноставно остварити Делпхи. Ево корака за то:
- Подесите листу слика (ТИмагеЛист компонента на картици палете компоненти „Вин32“) за ТТреевиев. Својство СтатеИмагес које садржи слике за потврђене и непроверене државе за потврдне оквире и / или радио дугмад.
- Позовите поступак ТогглеТрееВиевЦхецкБокес (погледајте доле) у ОнЦлицк и ОнКеиДовн догађајима приказа стабла. Поступак ТогглеТрееВиевЦхецкБокес мијења СтатеИндек одабраног чвора тако да одражава тренутно провјерено / непровјерено стање.
Да бисте свој приказ стабла учинили још професионалнијим, требало би да проверите где се кликне чвор пре померања стања слике: пребацивањем чвора само када се кликне на стварну слику, ваши корисници и даље могу одабрати чвор без промене његовог држава.
Поред тога, ако не желите да ваши корисници проширују / урушавају приказ стабла, назовите поступак ФуллЕкпанд у обрасцу ОнСхов и подесите АлловЦоллапсе на фалсе у догађају ОнЦоллапсинг погледа на стабло.
Ево примене поступка ТогглеТрееВиевЦхецкБокес:
процедура ТогглеТрееВиевЦхецкБокес (
Чвор: ТТрееНоде;
цУнЦхецкед,
ц Проверено,
цРадиоУнцкед,
цРадиоЦхецкед: цели број);
вар
тмп: ТТрееНоде;
бегиниф Додељено (чвор) затимбегиниф Чвор. СтатеИндек = цУнЦхецкед онда
Чвор. СтатеИндек: = проверено
другоако Чвор. СтатеИндек = Провјерено онда
Чвор. СтатеИндек: = цУнЦхецкед
ако не Чвор. СтатеИндек = цРадиоУнЦхецкед тхенбегин
тмп: = Чвор. Родитељ;
ако не Додељено (тмп) онда
тмп: = ТТрееВиев (Чвор. ТрееВиев) .Итемс.гетФирстНоде
друго
тмп: = тмп.гетФирстЦхилд;
док Додељено (тмп) добегиниф (тмп СтатеИндек ин
[цРадиоУнЦхецкед, цРадиоЦхецкед]) онда
тмп. СтатеИндек: = цРадиоУнЦхецкед;
тмп: = тмп.гетНектСиблинг;
крај;
Чвор. СтатеИндек: = цРадиоЦхецкед;
крај; // ако је СтатеИндек = цРадиоУнЦхецкедкрај; // ако је додељено (чвор)
крај; (* ТогглеТрееВиевЦхецкБокес *)
Као што видите из горњег кода, поступак започиње проналажењем било којих чворова у потврдном пољу и само их укључује или искључује. Затим, ако је чвор неконтролирано радио дугме, поступак се премешта на први чвор на тренутном нивоу, поставља све чворове на том нивоу да се цРадиоУн провјери (ако су цРадиоУнЦхецкед или цРадиоЦхецкед чворови) и коначно пребаци Ноде на цРадиоЦхецкед.
Уочите како се игноришу било који већ проверени радио тастери. Очито је то зато што би се већ провјерени радио гумб пребацио на непровјерен начин, остављајући чворове у недефинираном стању. Тешко оно што бисте желели већину времена.
Ево како да код учините још професионалнијим: у ОнЦлицк догађају Треевиев-а напишите следећи код да бисте само пребацили потврдне оквире ако је кликнута државна слика (константе цФлатУнЦхецк, цФлатЦхецкед итд. другде су дефинисане као индекси у СтатеИмагес листа слика):
процедура ТФорм1.ТрееВиев1Цлицк (Пошиљалац: ТОбјецт);
вар
П: ТПоинт;
започети
ГетЦурсорПос (П);
П: = ТрееВиев1.СцреенТоЦлиент (П);
ако (хтОнСтатеИцон ин
ТрееВиев1.ГетХитТестИнфоАт (П.Кс, П.И)) онда
ТогглеТрееВиевЦхецкБокес (
ТрееВиев1.Селецтед,
цФлатУнЦхецк,
цФлатЦхецкед,
цФлатРадиоУнЦхецк,
цФлатРадиоЦхецкед);
крај; (* ТрееВиев1Цлицк *)
Код добија тренутну позицију миша, претвара се у координате погледа на стабло и проверава да ли је СтатеИцон кликнут позивом на ГетХитТестИнфоАт функцију. Ако је био, позива се поступак пребацивања.
Углавном бисте очекивали да размакница пребаци контролне оквире или радио дугмад, па ево како да напишете догађај ТрееВиев ОнКеиДовн користећи тај стандард:
процедура ТФорм1.ТрееВиев1КеиДовн (
Пошиљалац: ТОбјецт;
вар Кеи: Ворд;
Схифт: ТСхифтСтате);
бегиниф (Кључ = ВК_СПАЦЕ) и
Додељено (ТрееВиев1.Селецтед) онда
ТогглеТрееВиевЦхецкБокес (
ТрееВиев1.Селецтед,
цФлатУнЦхецк,
цФлатЦхецкед,
цФлатРадиоУнЦхецк,
цФлатРадиоЦхецкед);
крај; (* ТрееВиев1КеиДовн *)
Коначно, ево како би могли изгледати догађаји ОнСхов форме и ОнЦхангинг Треевиев-а ако желите да спречите колапс чворова у погледу стабла:
процедура ТФорм1.ФормЦреате (пошиљалац: ТОбјецт);
започети
ТрееВиев1.ФуллЕкпанд;
крај; (* ФормЦреате *)
процедура ТФорм1.ТрееВиев1Цоллапсинг (
Пошиљалац: ТОбјецт;
Чвор: ТТрееНоде;
вар АлловЦоллапсе: Боолеан);
започети
АлловЦоллапсе: = фалсе;
крај; (* ТрееВиев1Цоллапсинг *)
Коначно, да бисте проверили да ли је чвор проверен, једноставно урадите следеће упоређивање (на пример, Буттон-ов ОнЦлицк руковатељ догађаја, на пример):
процедура ТФорм1.Буттон1Цлицк (Пошиљалац: ТОбјецт);
вар
БоолРесулт: боолеан;
тн: ТТрееНоде;
бегиниф Додељено (ТрееВиев1.Селецтед) тхенбегин
тн: = ТрееВиев1.Селецтед;
БоолРесулт: = тн. СтатеИндек ин
[цФлатЦхецкед, цФлатРадиоЦхецкед];
Мемо1.Тект: = тн. Тект +
#13#10 +
'Изабрано:' +
БоолТоСтр (БоолРесулт, Труе);
крај;
крај; (* Буттон1Цлицк *)
Иако се ова врста кодирања не може сматрати критичном за мисију, може дати вашим апликацијама професионалнији и глаткији изглед. Такође, употребом потврдних оквира и радио дугмади разумно могу учинити вашу апликацију лакшом за употребу. Сигурно ће изгледати добро!
Ова слика испод преузета је из тестне апликације помоћу кода описаног у овом чланку. Као што видите, чворове можете слободно мешати са потврдним оквирима или радио дугмади са онима који немају, иако не бисте требали да мешате "празне" чворове са "поље за потврду"чворови (погледајте радио дугмад на слици) јер је то врло тешко видети који су чворови повезани.