Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

scrollbar в DBGrid

11K
17 июля 2008 года
proc
32 / / 23.07.2006
Добрый день. Недавно, пытаясь написать собственный компонент, наткнулся на проблему - необходимо убрать вертикальный скроллбар из DBGrid-a. Вроде бы ничего сложного, но есть маленький нюанс. В обработчике нажатия кнопки пишу следующий код:

 
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
  SINew: TScrollInfo;
begin
    SINew.nMin := 0;
    SINew.nPage := 0;
    SINew.nMax := 0;
    SetScrollRange(DBGrid1.Handle, SB_VERT, 0, 0, false);
    SetScrollInfo(DBGrid1.Handle, SB_VERT,  SINew, false);
end;


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

Код:
procedure TForm1.Button3Click(Sender: TObject);
var
  SINew: TScrollInfo;
begin
    if ADOQuery1.RecordCount <= 10 then begin
      SINew.nMin := 0;
      SINew.nPage := 0;
      SINew.nMax := 0;
      SetScrollRange(DBGrid1.Handle, SB_VERT, 0, 0, false);
      SetScrollInfo(DBGrid1.Handle, SB_VERT,  SINew, false);
    end;
end;


Полоска скроллбара исчезла, но при перемещении по DBGrid-у мерцает, раздражая нежный глаз пользователя ))). Как можно обойти эту проблему? Обработчик метода Paint не подходит, т.к. все равно полоска мигает.
14
18 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: proc
Добрый день. Недавно, пытаясь написать собственный компонент, наткнулся на проблему



Я немножко не понял, вы свой компонент от DBGrid-а наследуете?

Вообщем у меня с этим кодом скроллбар не мигает даже когда 9 записей не помещаются в окно

11K
19 июля 2008 года
proc
32 / / 23.07.2006
Да собственно дело не в том, от кого наследуется, насчет компонента - это отступление. Тут просто частный случай - в обработчике нажатия кнопки пишется код с if-ом и без, вот и все. Результат получается разный. Причем мерцает не при каждом перемещении по записям, иногда не успевает прорисовываться. Была мысль, что при обращении к свойству RecordCount, происходит какое-то событие DBGrid... но видимо дело не в этом.
А в какой версии Delphi вы писали этот код? Я - в седьмой.
14
21 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: proc
А в какой версии Delphi вы писали этот код?



Алкоголично :) в седьмой. Знаете что я сразу не заметил? Вы флаги в TScrollInfo не выставляете. И .cbSize. Поэтому там мусор и работало что называется "на удачу"

11K
24 июля 2008 года
proc
32 / / 23.07.2006
Хм... попробую исправить... но по-моему дело не в этом, ведь первый вариант отрабатывает на ура, а отличие лишь в if-e.
14
24 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: proc
по-моему дело не в этом,
...
отличие лишь в if-e.



Поверьте, в этом тоже.
В данном случае отличие и в мусоре стека процесса :)))

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог