Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > GetScrollInfo , нужна помощь


Автор: Comm 9.1.2009, 21:42
Всем привет и с наступившим =))
Нашел я тут в Delphi World пример для пропорционального отображения скролл бара в StringGrid и перевел кое как На Си.... Вроде как бы и работает но когда ползунок прокручиваешь до конца в низ... то строки 2-3 не доводится...гляньте...может кто встречался с такой траблой
Код

 // Same for a TStringGrid 

procedure TForm1.Button1Click(Sender: TObject);
 var
   info: TScrollInfo;
 begin
   FillChar(info, SizeOf(info), 0);
   with info do
   begin
     cbsize := SizeOf(info);
     fmask  := SIF_ALL;
     GetScrollInfo(StringGrid1.Handle, SB_VERT, info);
     fmask := fmask or SIF_PAGE;
     nPage := 5 * (nmax - nmin) div StringGrid1.RowCount;
     // whatever number of cells you consider a "page" 
  end;
   SetScrollInfo(StringGrid1.Handle, SB_VERT, info, True);
 end;

Код Си
Код

TScrollInfo info;
  memset(&info,0,sizeof(info));
  info.cbSize=sizeof(info);
  info.fMask=SIF_ALL;
  if(GetScrollInfo(StringGrid1->Handle,SB_VERT,&info))
  { ShowMessage(info.nMax);
  }else return;
  info.fMask|=SIF_PAGE;
  // ShowMessage(info.nMax);
   //ShowMessage(StringGrid1->RowCount);

  info.nPage=5*(info.nMax-info.nMin)/StringGrid1->RowCount;
  //ShowMessage(info.nPage);
  SetScrollInfo(StringGrid1->Handle,SB_VERT,&info,true);


Спасибо за внимание.

Автор: Comm 10.1.2009, 11:27
 smile 

Автор: Comm 10.1.2009, 21:36
Неужели никто с этим не встречался?((

Автор: THandle 10.1.2009, 21:46
Comm, выложи тестовый проектик. Посмотрим.

Автор: Comm 11.1.2009, 04:31
вот,я понимаю что нужен перерасчет какой то сделать...но какой...
строка где всё это дело умножается на 5 и делится на количество строк стринг грида...там чем больше цифра умножения тем больше отклонений..... 

Автор: THandle 12.1.2009, 08:39
Comm, чем больше высота ползунка(размер страницы) тем больше он не докручивает до конца. Нужно его размер уменьшать.
Я честно говоря не очень понимаю сути проблемы.... Какая ут задача хоть? smile
Ведь стандартно ставится ползунок нормального размера...

Автор: Comm 12.1.2009, 09:59
Стандартно ползунок у TStrinGrid не меняется вообще(а если убрать операцию умножения в строке "info.nPage=5*(info.nMax-info.nMin)/StringGrid1->RowCount;
" то ползунок будет до безобразия маленьким даже при минимуме строк нужных для появления скроллбара) 

Автор: Comm 1.2.2009, 17:33
Желательно что бы ползунок отображался так же как и в TMemo в Project-е который прилагается,у кого есть время посмотрите пожалуйста..заранее спасибо
З.Ы. Пишу в C++ Builder 6.

Автор: Comm 1.2.2009, 21:06
 smile  smile  smile  Незнаю что уже делать,проект висит (

Автор: 586 1.2.2009, 22:14
Цитата(Comm @  9.1.2009,  21:42 Найти цитируемый пост)
Вроде как бы и работает но когда ползунок прокручиваешь до конца в низ... то строки 2-3 не доводится

Происходит это потому, что ползунок большой (увеличен на 2-3 единицы) и до конца не доходит. И StringGrid работает без учёта размера ползунка.
Код
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TScrollInfo info;
  memset(&info,0,sizeof(info));
  info.cbSize=sizeof(info);
  info.fMask=SIF_ALL;
  if(GetScrollInfo(StringGrid1->Handle,SB_VERT,&info))
  { //ShowMessage(info.nMax);
  }else return;
  info.fMask = SIF_PAGE | SIF_RANGE;

  // ShowMessage(info.nMax);
   //ShowMessage(StringGrid1->RowCount);
  info.nPage=5*(info.nMax-info.nMin)/StringGrid1->RowCount;
  info.nMax += info.nPage;    // !!!!!
  //ShowMessage(info.nPage);
  SetScrollInfo(StringGrid1->Handle,SB_VERT,&info,true);
}

Автор: Comm 2.2.2009, 06:02
586,спасибо большое...собственно в этом и заключалась трудность... я не понимал чем заполнять nMax ... +

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)