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;
scrollbar в DBGrid
Код:
Все работает как нужно, но хотелось бы чтоб скроллбар убирался не всегда, а только если количество строк меньше, ну допустим, десяти. Изменяю предыдущий вариант:
Код:
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;
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 не подходит, т.к. все равно полоска мигает.
Цитата: proc
Добрый день. Недавно, пытаясь написать собственный компонент, наткнулся на проблему
Я немножко не понял, вы свой компонент от DBGrid-а наследуете?
Вообщем у меня с этим кодом скроллбар не мигает даже когда 9 записей не помещаются в окно
А в какой версии Delphi вы писали этот код? Я - в седьмой.
Цитата: proc
А в какой версии Delphi вы писали этот код?
Алкоголично :) в седьмой. Знаете что я сразу не заметил? Вы флаги в TScrollInfo не выставляете. И .cbSize. Поэтому там мусор и работало что называется "на удачу"
Хм... попробую исправить... но по-моему дело не в этом, ведь первый вариант отрабатывает на ура, а отличие лишь в if-e.
Цитата: proc
по-моему дело не в этом,
...
отличие лишь в if-e.
...
отличие лишь в if-e.
Поверьте, в этом тоже.
В данном случае отличие и в мусоре стека процесса :)))