ПредишенСледващото

Call потребителска поддръжка.
- Здравейте, тази подкрепа услуга.
- Да.
- Проблемът ми, моят модем няма да работи.
- Позволете ни да Ви предпише по линия инициализация.
- Да.
- ATF1M5
- Благодаря. След 5 минути.
- Аз все още не работи.
- Да. Е, нека пишат още
- Слушам
- ATS10 = 100
- Благодарим Ви!
Това отнема още 5 минути.
- Имам модем все още не работи.
- Е, напиши друга линия.
- На телефона ...
- ATFB1A0S0 = 90
- Благодаря. Минаха още 5 минути.
- Здравейте. Изгорих модем.
- Жалко е, но след това имам още толкова в резерв шевове инициализация лявата.

Много професионални приложения показват данни в полетата решетъчни таблични и ви позволяват да сортирате всяка колона, като кликнете върху заглавието му. Това, което е описано тук - не най-добрият начин за решаване на проблема, това е нищо друго, освен технология просто като имитация на поведението на компонента.

Основната пречка при решаването на проблема - DBGrid той. Проблемът е, че няма събития или OnClick OnMouseDown, което позволява да се отговори на манипулация на основната група. Въпреки това, има OnDoubleClick събитие, но за тази цел не е твърде грациозно. Всичко, което трябва - да се направи заглавието, което отговаря на едно кликване на мишката. Позовавайки се THeaderControl компонент.

THeaderControl - компонент въведен в палитрата повече в Делфи 2.0 и ни осигурява необходимите функции. Основно предимство на - реакция компонент, като кликнете върху отделни панели, панелите също да предоставят подобен бутон vizulnoe картиране (може да се натисне и натискане). Ние трябва да се "върже" THeaderControl към DBGrid. Ето как да го направите:

Първо, създаване на ново приложение. Сложете THeaderControl във формуляра. Тя автоматично ще се приспособи към горния край на формата. След това сложете във формуляра и да зададете стойността на имота alClient на DBGrid подравняване. След това добавете компоненти TTable и TDataSource. Компонентът TTable, задайте стойността на имота DBDEMOS на DatabaseName и TableName стойността на имота EVENTS.DB. В TDataSource изберете собственост на Таблица 1 DataSet компонент и DataSource TDBGrid имот на DataSource1. Ако активен компонент TTable имот не е бил активен, включете го (True стойност). Сега малко Doing магия!

Да направим THeaderControl компонент изглеждаше като удар с глава на DBGrid компонент. Изпълнете необходимите manipulitsii към момента на създаване на формуляра. Кликнете два пъти върху OnCreate случай на формата и въведете следния код:

След смяна на стандарт заглавната THeaderControl DBGrid, най-вече променихме (ЛЪЖА) dgTitles флаг имот Опции DBGrid компонент. След това добавете колона в HeaderControl и да си ширина, равна на 12. Това ще бъде празна колона, която има същата ширина като състоянието на лявата колона в DBGrid.

След това е необходимо да се уверите, че таблицата е отворен за изключителен достъп (няма други потребители не могат да го използват). Защото аз ще обясня малко по-късно.

Сега добавете в HeaderControl на секцията. създаваме за прибавят глава колона текст е същият, както в съответната DBGrid колоната. В цикъла ние преминаваме през всички колони на DBGrid и повторете заглавният текст колона и нейната височина. Ние също така да зададете стойностите за HeaderControl MinWidth и MaxWidth свойства равна на съответната ширина на колоната в DBGrid. Това им позволява да се променя ширината на колона. За да промените размера на високоговорителите, които се нуждаят от допълнително кодиране, и реших да не ви лиши от това удоволствие.

Сега най-забавната част. Отиваме да създадете индекс за всяка колона в DBGrid. Името на индекса ще бъде същото като името на колоната. Този код трябва да заключим в try..finally дизайн, защото има някои области, които не могат да бъдат индексирани (например гледане BLOB и Memo-поле). Когато се опитвате да се индексират тези области тя генерира изключение. Ние прихване това изключение и възможността nedopuskaet кликнете върху тази колона. Това означава, че колоните, съдържащи не-индексирани полета няма да реагират на едно кликване на мишката. Създаването на тези индекси дава обяснение защо на масата трябва да бъде отворен в режим на ексклузивен достъп. И накрая, ние затваряме масата, хвърли изключителност флаг и отново направи таблицата активни.

Последната стъпка. Когато кликнете върху HeaderControl ние трябва да включва правилния индекс масата. Създаване на събитие манипулатор OnSectionClick HeaderControl компонент, както е показано по-долу:

Това е всичко! След натискане на заглавието на таблица колона IndexName стойност имот става компонент глава HeaderControl.

Ница и просто, нали? Въпреки това, има много места за подобрение. Така например, на вторичния щракване трябва да обнови реда на сортиране. Или възможност за промяна на размера на самите говорители. Опитайте сами, това не е трудно!

Тук е подобрен код в сравнение с предишната версия на "Съвета", той се използва като име на индекс вместо удар с глава на име област.

Това подобрява гъвкавостта. Промените са посочени в курсив наклонена.

Използвайте FIELDNAME DBGrid компонент собственост, за да определя показателя със същото име като името на полето.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!