Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663

Прокрутка StringGrid при нулевой высоте строк

30.06.2016, 08:25. Показов 2394. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно вопрос, есть StringGrid, в нем некоторые строки скрыты (имеют высоту ноль), их может быть подряд достаточно много. Возможно ли при прокрутке колесом мыши вверх или вниз проскакивать их мгновенно , не назначая их Row-ы текущими? При обычном поведении при прокрутке попадая на такой диапазон, прокрутка происходит с большой задержкой.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.06.2016, 08:25
Ответы с готовыми решениями:

Как выровнять контрол грида MSHFlexGrid по высоте равным высоте всех его строк
Т.е. нужно чтобы визуально грид вмещал ВСЕ строки источника. Проблема в том , что высота строки грнда .MSHFlexGrid1.RowHeight(1) равна...

DataGridView, реализовать плавное прокручивание при большой высоте строк
Как можно реализовать плавное прокручивание dataGridView? Если строки таблицы имеют большую высоту, то прокручивать очень неудобно. Он даже...

Тормозит прокрутка таблицы DataGridView при загруженной базе в 78 строк
Как можно исправить, или настроить DataGridView на более плавную работу и прокрутку, а то уже второе приложение пишу с использованием этого...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33405 / 21515 / 8236
Регистрация: 22.10.2011
Сообщений: 36,916
Записей в блоге: 12
30.06.2016, 09:06
Цитата Сообщение от Sergey_03 Посмотреть сообщение
в нем некоторые строки скрыты (имеют высоту ноль)
Таким образом реализуется фильтрация грида? Лучше сделать нормальную фильтрацию: либо хранить данные в отдельном vector-е и отображать в гриде только то, что соответствует установленному фильтру, либо переносить те строки, которые не удовлетворяют текущему фильтру, в конец грида (вниз), и выставлять RowCount так, чтобы они не показывались.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
30.06.2016, 09:17  [ТС]
Признак того, что строка должна иметь высоту ноль - значение в скрытом столбце ячейки той или иной строки. В процессе работы это значение может меняться и соответственно строка должна стать видимой. При отправке этой строки и ей подобных вниз получится скорее всего каша. Можно конечно это все описать, как надо и переформировывать грид постоянно, но я думал, может какой способ по проще есть. Типа, при прокрутке при натыкании на строку с высотой ноль надо сделать то то....(как то её проскочить и назначить Row ближайшей строке с высотой не ноль.....как то так)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33405 / 21515 / 8236
Регистрация: 22.10.2011
Сообщений: 36,916
Записей в блоге: 12
30.06.2016, 09:49
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Sergey_03, при нулевой толщине линий грида (я про StringGrid->GridLineWidth) вот это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
void __fastcall ScrollHiddenRows(TStringGrid *grid, int delta)
{
    // если высота самой нижней видимой строки = 0
    if(grid->RowHeights[grid->TopRow + grid->VisibleRowCount] == 0)
    {
        // пока она == 0, увеличивать верхний ряд, чтобы проскочить невидимые ячейки снизу
        while(grid->RowHeights[grid->TopRow + grid->VisibleRowCount] == 0)
        {
            grid->TopRow += delta;
        }
        // проскочили... теперь осталось выставить новое значение текущему ряду
        grid->Row = grid->TopRow + grid->VisibleRowCount + 1;
    }
    else // снизу - НЕскрытая строка, проверяем верхнюю, может, она скрыта
    if(grid->RowHeights[grid->TopRow] == 0)
    {
        // и если так, то пока она скрыта опять же пропускаем все скрытые строки
        while(grid->RowHeights[grid->TopRow] == 0)
        {
            grid->TopRow += delta;
        }
        grid->Row = grid->TopRow;
    }
 
}
// прокрутка грида сверху вниз
void __fastcall TForm1::StringGrid1MouseWheelDown(TObject *Sender, TShiftState Shift,
          TPoint &MousePos, bool &Handled)
{
    StringGrid1->TopRow += 1;
    ScrollHiddenRows(StringGrid1, 1);
}
//---------------------------------------------------------------------------
 
// прокрутка грида снизу вверх
void __fastcall TForm1::StringGrid1MouseWheelUp(TObject *Sender, TShiftState Shift,
          TPoint &MousePos, bool &Handled)
{
    if(StringGrid1->TopRow > StringGrid1->FixedRows)
    {
        StringGrid1->TopRow -= 1;
        ScrollHiddenRows(StringGrid1, -1);
    }
}
прекрасно пропускает все скрытые строки. При НЕнулевой толщине грида - прокрутка тоже происходит нормально, но там какой-то бардак начинается с текущей строкой, надо отлаживать. Но направление у тебя теперь есть
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
30.06.2016, 10:30  [ТС]
Спасибо.) Попробую допилить.

Добавлено через 18 минут
А чем грозит вот такое?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void __fastcall TForm1::StringGrid2MouseWheelUp(TObject *Sender, TShiftState Shift,
          TPoint &MousePos, bool &Handled)
{
     StringGrid2->Col=0;
     while(StringGrid2->RowHeights[StringGrid2->Row] == 0&&
     StringGrid2->Row > 1&&
     StringGrid2->Row < StringGrid2->RowCount-1)
        {
            StringGrid2->Row --;
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid2MouseWheelDown(TObject *Sender, TShiftState Shift,
          TPoint &MousePos, bool &Handled)
{
    StringGrid2->Col=0;
    while(StringGrid2->RowHeights[StringGrid2->Row] == 0&&
    StringGrid2->Row > 1&&
    StringGrid2->Row < StringGrid2->RowCount-1)
        {
            StringGrid2->Row ++;
        }
}
//---------------------------------------------------------------------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.06.2016, 10:30
Помогаю со студенческими работами здесь

Прокрутка колёсиком в StringGrid
По умолчанию в стринггриде колёсико прокручивает &quot;фокус&quot; по ячейкам вверх-вниз. Можно ли сделать так, чтобы колесо не прокручивало...

Горизонтальная прокрутка мышью в StringGrid
Скажите пожалуйста, как реализовать горизонтальную прокрутку в stringgred-e . Т.е нажал мышкой в любой точке грида, и двигаешь в сторону,...

Ошибка при загрузке данных из StringGrid в массив строк
Всё, что знал уже перепробовал. Остается только просить помощи... По нажатию на кнопку Button1 данные из DefaultStrGrd должны...

Изменение количества строк/столбцов StringGrid-а при помощи SpinEdit-ов
Всем привет. Подскажите как сделать при нажатие на sprint edit менялось количество строк и столбцов string grid .

Поиск в Stringgrid и вывод строк в новый Stringgrid
Привет. Наверное этот вопрос задавался уже много раз, но я не могу никак понять: 1. У меня есть Stringgrid в нем содержатся записи: фио,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru