Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как убрать скроллбар у DBGrid [D7, XP]


madmech@yandex.ru ©   (2009-10-14 16:51:00) 

Доброго дня суток, дамы и господа! Суть проблемы такова: надо убрать скроллбары (опционально) у данного конкретного ДБГрида и я, в принципе, эту проблему решил, найдя решение на др. форуме:

Type TFake=class(TCustomGrid);    
 public
   property ScrollBars;
 end;        
implementation            
{$R *.dfm}            
procedure TForm1.Button1Click(Sender: TObject);            
begin            
TFake(DBGrid1).ScrollBars:=ssVertical;            
end;


Но, после того, как я реализовал это решение, возникли две проблемы:
1. Свойство ScrollBars работает так, как ему вздумается, т.е. установка его в ssVertical вовсе не означает, что останется только вертикальный скролл. Приходится исхитряться и выдумывать разные комбинации и последовательности переключения этого свойства с целью получения интересующего меня результата.
2. И самая главная проблема: приходится отключать скролл(-ы) каждый раз, когда происходит перерисовка грида, например, при обновлении данных по нажатию на определенную кнопку, а это уже чревато некрасивым мерцанием во время очередного отключения скролла.

Посему формулирую вопрос: можно ли как-нибудь отключить НУЖНЫЙ (-ЫЕ) мне скролл(-ы) для определенного ДБГрида один раз в начале запуска программы, чтобы в дальнейшем уже не заниматься его (их) отключением при каждой перерисовке грида?


Игорь Шевченко   (2009-10-16 12:39:00) [1]


> А как это можно сделать?


Оставить все, как есть


madmech   (2009-10-16 11:34:00) [2]


> Тогда у автора есть три пути: отказаться от управления скроллбарами.
> ..

А как это можно сделать?


Игорь Шевченко   (2009-10-14 21:05:00) [3]


> у меня d7, проверил, точно статически.


У меня нет оснований тебе не доверять :)

Тогда у автора есть три пути: отказаться от управления скроллбарами, взять EhLib или какой-то аналогичный готовый компонент или писать более обширного наследника, в ктором предусмотреть управление скроллбарами.


sniknik   (2009-10-14 20:23:00) [4]

> "Не верь глазам своим" ?
ага.

> [ D7, XP]
у меня d7, проверил, точно статически.


Игорь Шевченко   (2009-10-14 20:16:00) [5]

sniknik ©   (14.10.09 20:02) [7]


> так он там вроде объявлен статически


dbgrids.pas

   procedure UpdateScrollBar; virtual;

"Не верь глазам своим" ?


sniknik   (2009-10-14 20:02:00) [6]

> inherited;
так он там вроде объявлен статически, разве так вызовется? и вообще возможность перекрытия без переделки(координальной) генофонда под сомнением...

madmech
обломись, мы на корабле. © анекдот какой то


Игорь Шевченко   (2009-10-14 19:43:00) [7]


> Каким образом? Можете кратко пояснить?


procedure TMySuperPuper.UpdateScrollBar;
begin
 if ScrollbarNeeded then
   inherited;
end;


madmech   (2009-10-14 18:56:00) [8]


> Выход - создать наследника, перекрыть метод UpdateScrollbar
> и реализовать там нужное поведение

Каким образом? Можете кратко пояснить?


madmech   (2009-10-14 18:53:00) [9]


> Вывести в грид столько записей, сколько их поместиться без
> добавления скролов....

Как это делается? Для данного конкретного грида использование этой возможности мне не понадобится, но в других гридах придется очень кстати.

> Убрать нужно горизонтальный скрол?
>

И тот, и другой.

> тогда удалить не нужные колонки, и зачем убирать скрол?

Скролл я хочу убрать с целью экономии места на форме, и чтобы он (скролл) не портил внешний вид таблицы, в которой количество строк и столбцов невелико и заранее известно. Использование, а самое главное показывание скроллов на малых таблицах я считаю нецелесообразным.


Игорь Шевченко   (2009-10-14 18:43:00) [10]


> Посему формулирую вопрос: можно ли как-нибудь отключить
> НУЖНЫЙ (-ЫЕ) мне скролл(-ы) для определенного ДБГрида один
> раз в начале запуска программы, чтобы в дальнейшем уже не
> заниматься его (их) отключением при каждой перерисовке грида?
>


Нет, DBGrid явно изменяет состояние Scrollbar-ов в методе UpdateScrollbar.
Выход - создать наследника, перекрыть метод UpdateScrollbar и реализовать там нужное поведение


{RASkov}   (2009-10-14 18:29:00) [11]

т.е. колонок вроде... а не записей. Убрать нужно горизонтальный скрол? тогда удалить не нужные колонки, и зачем убирать скрол?


{RASkov}   (2009-10-14 18:25:00) [12]

Вывести в грид столько записей, сколько их поместиться без добавления скролов.... иначе глупо, записей полно, а все равно их прокрутить нельзя...


Наверх

Титульная страница Поиск, карта сайта Написать письмо