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