Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Как сделать Scroll имеющий ползунок размера пропорционального количеству видимых данных  [new]
Леон4ik
Member

Откуда:
Сообщений: 72
Подскажите как сделать чтобы размер ползунка Скролла в гриде был пропорционален количеству скрытых данных. Как же это реализовано в браузерах и других приложениях? Подскажите формулу кто знает/ Пробовал так, но размер не правильный.
procedure TFEmu1.FormResize(Sender: TObject);
var info: TScrollInfo;
begin
  FillChar(info, SizeOf(info), 0);
  with info do
  begin
    cbsize := SizeOf(info);
    fmask  := SIF_ALL;
    GetScrollInfo(SGMain.Handle, SB_VERT, info);
    fmask := fmask or SIF_PAGE;
    nMin:=0;
    nMax:=100;
    nPage:=TRunc(10*(nmax - nmin)/SGMain.RowCount);
end;
  SetScrollInfo(SgMain.Handle, SB_VERT, info, True);
end;

Также пробовал так но все плохо.
nPage:=SGMain.VisibleRowCount/SGMain.RowCount*SGMain.Height

Также смотрел исходники TScrollBox но не понял толком ничего

Сообщение было отредактировано: 7 фев 20, 21:53
7 фев 20, 21:52    [22075836]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать Scroll имеющий ползунок размера пропорционального количеству видимых данных  [new]
L1G
Member

Откуда:
Сообщений: 110
может, так:
nMin := 0;
nMax := SGMain.RowCount;
nPage := SGMain.VisibleRowCount;
?
8 фев 20, 08:50    [22075908]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать Scroll имеющий ползунок размера пропорционального количеству видимых данных  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
Леон4ik
Подскажите как сделать чтобы размер ползунка Скролла в гриде был пропорционален количеству скрытых данных
Если мы говорим о TDBBGrid то он именно так и работает. Весь фокус в том, что грид не знает сколько данных в датасете, в него загружаются только отфетченные записи. А датасет, в общем случае, не знает сколько записей вернул сервер.

Проблему может решить такой код
procedure TForm1.DataSet1AfterOpen(ADataSet: TDataSet);
begin
  ADataSet.DisableControls;
  try
    ADataSet.Last;
    ADataSet.First;
  finally
    ADataSet.EnableControls;
  end;
end;
но быстродействия такой код не прибавит. И даже наоборот.
10 фев 20, 14:57    [22076854]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать Scroll имеющий ползунок размера пропорционального количеству видимых данных  [new]
Леон4ik
Member

Откуда:
Сообщений: 72
_Vasilisk_, используется StringGrid, но проблема уже решена

Сообщение было отредактировано: 15 фев 20, 17:22
15 фев 20, 17:23    [22080536]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать Scroll имеющий ползунок размера пропорционального количеству видимых данных  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
Леон4ik
но проблема уже решена
Главное никому не говорите как
17 фев 20, 15:18    [22081449]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить