Креирајте и прилагодите гумбе помоћу ДБНавигатор

click fraud protection

„У реду, ДБНавигатор ради свој посао навигације података и управљања записима. Нажалост, моји купци желе више пријатно искуство, попут графике и натписа прилагођених тастера,... "

Овај упит је дошао од Делпхи девелопер тражећи начин да побољшају снагу ДБНавигатор компоненте.

ДБНавигатор је одлична компонента - пружа ВЦР налик интерфејсу за навигацију података и управљање записима у апликацијама базе података. Навигација за снимање омогућена је типкама Први, Следећи, Претходни и Последњи. Управљање снимцима омогућавају тастери Уреди, Објави, Откажи, Избриши, Убаци и Освежи. У једној компоненти Делпхи пружа све што вам је потребно за рад на вашим подацима.

Међутим, како је навео и аутор упита за е-пошту, ДБНавигатор нема неке функције попут прилагођених глифова, натписа дугмета и других.

Снажнији ДБНавигатор

Многе Делпхи компоненте имају корисна својства и методе које су за Делф програмере означене невидљивим („заштићеним“). Надамо се да се за приступ таквим заштићеним члановима компоненте може користити једноставна техника која се зове „заштићени хацк“.

instagram viewer

Прво ћете додати натпис на свако дугме ДБНавигатор, затим ћете додати прилагођену графику и на крају, свако дугме омогућите ОнМоусеУп.

Од "досадног" ДБНавигатора до било којег од:

  • Стандардна графика и натписи по мери
  • Само натписи
  • Прилагођена графика и наслови

Хајде да се роцк 'н' ролл

ДБНавигатор има својство заштићених гумба. Овај члан је низ ТНавБуттон-а, потомка ТСпеедБуттона.

Будући да свако дугме у овом заштићеном ентитету наслеђује од ТСпеедБуттон-а, ако га примите, моћи ћете радити са "стандардним" ТСпеедБуттон својствима као што су: Натпис (низ који кориснику идентификује контролу), Глипх (битмап који се појављује на тастеру), Лаиоут (одређује где се слика или текст појављују на дугме) ...

Из јединице ДБЦтрлс (гдје је дефиниран ДБНавигатор) "читате" да је својство заштићених гумба декларирано као:

Тастери: низ[ТНавигатеБтн] од ТНавБуттон;

Тамо где ТНавБуттон наслеђује од ТСпеедБуттон, а ТНавигатеБтн је набрајање, дефинисано као:

ТНавигатеБтн = 
(нбФирст, нбПриор, нбНект, нбЛаст, нбИнсерт,
нбДелете, нбЕдит, нбПост, нбЦанцел, нбРефресх);

Имајте на уму да ТНавигатеБтн садржи 10 вредности, а свака идентификује различито дугме на ТДБНавигатор објекту. Сада, да видимо како хаковати ДБНавигатор:

Побољшани ДБНавигатор

Прво поставите једноставан Делпхи образац за уређивање података тако што ћете ставити најмање ДБНавигатор, а ДБГрид, ДатаСоуре и а Објект скупа података по вашем избору (АДО, БДЕ, дбЕкпрес, ...). Проверите да ли су све компоненте "повезане".

Друго, хакирајте ДБНавигатор дефинисањем наслеђене класе "лутке", изнад декларације обрасца, као:

тип ТХацкДБНавигатор = класа(ТДБНавигатор);
тип
ТФорм1 = класа(ТФорм)
...

Затим, да бисте могли да прикажете прилагођене наслове и графике на сваком тастеру ДБНавигатор, морат ћете их поставити глифови. Можете користити компоненту ТИмагеЛист и додијелити 10 слика (.бмп или .ицо), од којих свака представља радњу одређеног дугмета ДБНавигатор.

Треће, у ОнЦреате догађај за Форм1 додајте позив попут:

процедура ТФорм1.ФормЦреате (пошиљалац: ТОбјецт);
СетупХацкедНавигатор (ДБНавигатор1, ИмагеЛист1);
крај;

Обавезно додајте изјаву овог поступка у приватни део декларације на обрасцу, као што је:

тип
ТФорм1 = класа(ТФорм)
...
приватни поступак СетупХацкедНавигатор (цонст Навигатор: ТДБНавигатор;
цонст Глифи: ТИмагеЛист);
...

Четврто, додајте поступак СетупХацкедНавигатор. Процедура СетупХацкедНавигатор додаје прилагођену графику сваком тастеру и сваком тастеру додељује прилагођени наслов.

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

у Хрватској (локализовано):
Описи: низ [ТНавигатеБтн] оф стринг =
('Први', 'Претходни', 'Слиједеци', 'Задњи', 'Додај',
'Обриси', 'Промјени', 'Спреми', 'Одустани', 'Освјези');
*)
вар
бтн: ТНавигатеБтн;
бегинфор бтн: = ниска (ТНавигатеБтн) до Висока (ТНавигатеБтн) радим са ТХацкДБНавигатор (Навигатор) .Буттонс [бтн] добегин// из низа Цаптионс цонст
Натпис: = натписи [бтн];
// број слика у својству Глипх
НумГлипхс: = 1;
// Уклоните стари глиф.
Глипх: = нула;
// Доделите прилагођени
Глипхс. ГетБитмап (Интегер (бтн), Глипх);
// гилпх изнад текста
Изглед: = блГлипхТоп;
// објашњено касније
ОнМоусеУп: = ХацкНавМоусеУп;
крај;
крај; (* СетупХацкедНавигатор *)

Ок, да објаснимо. Поновите све гумбе у ДБНавигатору. Подсетите се да је свако дугме доступно из својства заштићеног низа Буттонс-а, дакле потреба за ТХАцкДБНавигатор класом. Пошто је тип матрице типа ТНавигатеБтн, прелазите са "првог" (користећи Ниска функцију) дугме до „последњег“ (помоћу тастера Високо функција) један. За свако дугме једноставно уклоните "стари" глиф, доделите му нови (из параметра Глипхс), додате натпис из архиве Цаптионс и обележите распоред глифа.

Имајте на уму да можете контролисати које тастере приказује ДБНавигатор (а не хакирани) преко свог својства ВисиблеБуттонс. Још једна особина чију би подразумевану вредност можда желели да промените су Савети - користите је за давање савета помоћи по избору за појединачно дугме навигатора. Приказ савета можете контролисати уређивањем својства СховХинтс.

То је то. Због тога сте одабрали Делфи!

Дај ми још!

Зашто се зауставити овде? Знате да када кликнете на дугме 'нбНект' тренутни положај скупа података прелази на следећи запис. Шта ако желите да пређемо, рецимо, 5 записа унапред ако корисник држи тастер ЦТРЛ док притисне дугме? Како би било да?

"Стандардни" ДБНавигатор нема догађај ОнМоусеУп - онај који носи Схифт параметар ТСхифтСтате - омогућава вам тестирање стања тастера Алт, Цтрл и Схифт. ДБНавигатор пружа само ОнЦлицк догађај који можете руковати.

Међутим, ТХацкДБНавигатор може једноставно изложити догађај ОнМоусеУп и омогућити вам да "видите" стање контролних тастера и чак положај курсора изнад одређеног дугмета када се кликне!

Цтрл + клик: = 5 редова унапред

Да бисте открили ОнМоусеУп, једноставно доделите свој прилагођени поступак руковања догађајем ОнМоусеУп догађајем за дугме хакованог ДБНавигатора. Тачно је то већ урађено у процедури СетупХацкедНавигатор:
ОнМоусеУп: = ХацкНавМоусеУп;

Сада би поступак ХацкНавМоусеУп могао да изгледа као:

процедура ТФорм1.ХацкНавМоусеУп
(Пошиљалац: ТОбјецт; Дугме: ТМоусеБуттон;
Схифт: ТСхифтСтате; Кс, И: Интегер);
цонст МовеБи: интегер = 5;
бегинифНЕ (Пошиљалац је ТНавБуттон) онда Излаз;
случај ТНавБуттон (пошиљалац) .Индек од
нбПриор:
ако (ссЦтрл у Схифт) онда
ТДБНавигатор (ТНавБуттон (пошиљалац) .Парент).
Извор података. ДатаСет. МовеБи (-МовеБи);
нбНект:
ако (ссЦтрл у Схифт) онда
ТДБНавигатор (ТНавБуттон (пошиљалац) .Парент).
Извор података. ДатаСет. МовеБи (МовеБи);
крај;
крај; (* ХацкНавМоусеУп *)

Имајте на уму да морате да додате потпис ХацкНавМоусеУп процедуре унутар приватног дела декларације обрасца (близу изјаве поступка СетупХацкедНавигатор):

тип
ТФорм1 = класа(ТФорм)
...
приватни поступак СетупХацкедНавигатор (цонст Навигатор: ТДБНавигатор;
цонст Глифи: ТИмагеЛист);
процедура ХацкНавМоусеУп (Пошиљалац: ТОбјецт; Дугме: ТМоусеБуттон;
Схифт: ТСхифтСтате; Кс, И: Интегер);
...

Ок, да објаснимо, још једном. Процедура ХацкНавМоусеУп обрађује догађај ОнМоусеУп за свако дугме ДБНавигатор. Ако корисник држи ЦТРЛ тастер док кликне дугме нбНект, тренутни запис повезаног скупа података премешта се "МовеБи" (дефинисан као константа са вриједношћу од 5) испред.

Шта? Прекомпликовано?

Да. Не морате се забрљати са свим тим ако требате само да проверите стање контролних тастера када сте кликнули на дугме. Ево како то учинити у „обичном“ ОнЦлицк догађај „обичног“ ДБНавигатор:

процедура ТФорм1.ДБНавигатор1Цлицк
(Пошиљалац: ТОбјецт; Дугме: ТНавигатеБтн);
функција ЦтрлДовн: Боолеан;
вар
Држава: ТКеибоардСтате;
започети
ГетКеибоардСтате (Стате);
Резултат: = ((држава [вк_Цонтрол] и 128) 0);
крај;
цонст МовеБи: интегер = 5;
почетна Дугме од
нбПриор:
ако ЦтрлДовн онда
ДБНавигатор1.ДатаСоурце. ДатаСет. МовеБи (-МовеБи);
нбНект:
ако ЦтрлДовн онда
ДБНавигатор1.ДатаСоурце. ДатаСет. МовеБи (МовеБи);
крај; //case
крај; (* ДБНавигатор2Цлицк *)

То је све народе

И на крају, пројекат је завршен. Или можете наставити даље. Ево сценарија / задатка / идеје за вас:

Рецимо да желите да само једно дугме замени тастере нбФирст, нбПревиоус, нбНект и нбЛаст. Можете користити параметре Кс и И унутар ХацкНавМоусеУп поступка да бисте пронашли положај курсора када се дугме отпусти. Сада, на ово једно дугме („да им владате свима“) можете приложити слику која има 4 подручја, а свако подручје треба да опонаша један од тастера које замењујете... имаш поента?

instagram story viewer