Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Пропорциональное отображение в TScrollBar или TStringGrid

Delphi , Компоненты и Классы , TStringGrid и TDrawGrid

Пропорциональное отображение в TScrollBar или TStringGrid

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

// Getting a TScrollbar control to Show a proportional thumb: 

procedure TForm1.Button1Click(Sender: TObject);
 var
   info: TScrollInfo;
 begin
   FillChar(info, SizeOf(info), 0);
   with info do
   begin
     cbsize := SizeOf(info);
     fmask  := SIF_PAGE;
     nPage  := ScrollBar1.LargeChange;
   end;
   SetScrollInfo(ScrollBar1.Handle, SB_CTL, info, True);
 end;

 // 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;

Прекрасный фрагмент кода на Delphi!

Цель этих двух процедур - сделать TScrollbar (или TStringGrid) отображать пропорциональную кнопку прокрутки. Кнопка прокрутки представляет собой текущее положение в области, которую можно прокручивать.

Давайте разберемся, что каждый из этих процедур делает:

Пример TScrollbar

procedure TForm1.Button1Click(Sender: TObject);
  var
    info: TScrollInfo;
begin
  FillChar(info, SizeOf(info), 0);
  with info do
  begin
    cbsize := SizeOf(info);
    fmask := SIF_PAGE; // Установить маску для отображения кнопки прокрутки
    nPage := ScrollBar1.LargeChange; // Вычислить размер страницы (в этом случае, LargeChange)
  end;
  SetScrollInfo(ScrollBar1.Handle, SB_CTL, info, True); // Обновить scrollbar с новой информацией
end;

Описание шаг за шагом: 1. Создать структуру TScrollInfo и заполнить ее нулями с помощью FillChar. 2. Установить поле cbsize в размер структуры info. 3. Установить поле fmask в SIF_PAGE, что указывает на то, что мы хотим отобразить кнопку прокрутки. 4. Вычислить размер страницы, установив nPage в значение LargeChange scrollbar. 5. Позвать SetScrollInfo с handle scrollbar, типом контроля (SB_CTL) и обновленной структурой info.

Пример 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; // Вычислить размер страницы (в этом случае, 5 ячеек на "страницу")
  end;
  SetScrollInfo(StringGrid1.Handle, SB_VERT, info, True); // Обновить grid с новой информацией
end;

Описание шаг за шагом: 1. Создать структуру TScrollInfo и заполнить ее нулями с помощью FillChar. 2. Установить поле cbsize в размер структуры info. 3. Установить поле fmask в SIF_ALL, что указывает на то, что мы хотим отобразить кнопку прокрутки и информацию о странице. 4. Получить текущую информацию о прокрутке для вертикальной полосы прокрутки (SB_VERT) с помощью GetScrollInfo. 5. Добавить флаг информации о странице к маске. 6. Вычислить размер страницы, умножив максимальное количество строк минимального количества строк на 5, а затем делить на количество строк в grid. 7. Позвать SetScrollInfo с handle grid, типом контроля (SB_VERT) и обновленной структурой info.

В целом, эти процедуры делают TScrollbar или TStringGrid отображать пропорциональную кнопку прокрутки, установив правильные значения масок и вычисляя размер страницы на основе свойств области, которую можно прокручивать.

В статье описывается способ настройки пропорционального отображения в TScrollBar и TStringGrid при помощи метода SetScrollInfo и структуры TScrollInfo.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: TStringGrid и TDrawGrid ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:07:08/0.0034079551696777/0