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

Scrollbox добавление объектов вверху (вначале списка)

20.01.2014, 23:12. Показов 1855. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток!
Вынужден обратиться к помощи знатоков, так как весь интернет перерыл, поиск на форуме изчитал, но так и не смог найти решения своей проблемы, а звучит она так:

Я делаю чат, следовательно имеется scrollbox в который добавляются объекты (динамические) - сообщения, сверху-вниз, внизу самые свежие, вверху соответственно старые. Как сделать так чтобы при прокрутке вверх подгружались более старые сообщения (например, как это происходит в VK) и они вставали вверху этого списка.

Может есть какой-то способ сместить все содержимое разом? Потому что по отдельности как-то нелогично.
Или может как то можно расширить зону scrollbox-а вверх? Или еще какой-нибудь подход?

Дополнение: Нужна именно бесконечная "прокрутка", а не листание страниц. Для наглядности добавил изображение.

За ранее, Всем, огромное спасибо!
Миниатюры
Scrollbox добавление объектов вверху (вначале списка)  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.01.2014, 23:12
Ответы с готовыми решениями:

Перемещение объектов. С ScrollBox на Форму
Доброго времени суток! Пожалуйста помогите разобраться со следующими вопросами Вопрос 1 Как добиться перемещением объектов на форму с...

Объединить два списка одинаковой длины в третий так, чтобы вначале списка были элементы с нечётных позиций первог
Объединить два списка одинаковой длины в третий так, чтобы вначале списка были элементы с нечётных позиций первого списка, а в конце с...

Добавление элементов в ScrollBox и их прокрутка
Подскажите пожалуйста, как добавить в ScrollBox элементы (кнопочки различные, эдиты и мемо например). И чтобы они прокручивались, т.к их...

6
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 12
20.01.2014, 23:20
Ну, скажем:
C++
1
2
3
4
// ...
    TEdit *edt = new TEdit(ScrollBox1);
    edt->Parent = ScrollBox1;
    edt->Align = alTop;
будет добавлять в скроллбокс объекты как раз сверху.

P.S. Я, конечно, не знаю, может быть, куда-то изображение и было добавлено... Вот только знать бы, куда...
1
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 5
20.01.2014, 23:31  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Кликните здесь для просмотра всего текста
Ну, скажем:
C++
1
2
3
4
// ...
    TEdit *edt = new TEdit(ScrollBox1);
    edt->Parent = ScrollBox1;
    edt->Align = alTop;
будет добавлять в скроллбокс объекты как раз сверху.

P.S. Я, конечно, не знаю, может быть, куда-то изображение и было добавлено... Вот только знать бы, куда...
Спасибо за столько быстрый ответ!
Это очень хороший результат и почти то что мне нужно, однако если ползунок находиться в самом низу, элемент добавится не в начало списка, а вверху видимой области

Добавлено через 3 минуты
Хотя нет, я что-то заработался, погрузка же нужна когда ползунок сверху, так что, это точно нужно!
От души, спасибо огромное, всего Вам наилучшего и просто добра!
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 12
21.01.2014, 00:00
Если все-таки надо будет такой функционал и когда ползунок не в самом верху - то вот так попробуй:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int i = 0;
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ::SendMessage(ScrollBox1->Handle, WM_SETREDRAW, 0, 0L); // запрещаем перерисовку, чтоб не мерцало
 
    int p = ScrollBox1->VertScrollBar->Position;
    ScrollBox1->VertScrollBar->Position = 0;
    TEdit *edt = new TEdit(ScrollBox1);
    edt->Parent = ScrollBox1;
    edt->Align = alTop;
    ScrollBox1->VertScrollBar->Position = p + (p ? edt->Height : 0);
    edt->Text = IntToStr(i++);
 
    ::SendMessage(ScrollBox1->Handle, WM_SETREDRAW, 1, 0L); // Разрешаем перерисовку
    ::RedrawWindow(ScrollBox1->Handle, NULL, 0, // и обновляем окно...
        RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
}
1
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 5
21.01.2014, 00:28  [ТС]
Да, это еще лучше!

Созрел такой вопрос: а как мне делать тоже самое только в обратном порядке? (0 -> 20)
Какой бы Align я не ставил (top/bottom) все равно список идет снизу вверх. (20 -> 0)

Добавлено через 17 минут
такая сортировка логична (то что не влияет align), но я не понимаю как сделать в обратном порядке, если делать без align, тогда элементы подгруженные вышеуказанным способом перекрывают уже созданные (без align)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 12
21.01.2014, 00:31
А в этом случае я бы использовал TFlowPanel. Положил ее на ScrollBox, выставил ей начальную высоту = 0 и выравнивание Align = alTop, и создаю элементы:
C++
1
2
3
4
5
6
7
8
9
int i = 0;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TEdit *edt = new TEdit(FlowPanel1);
    FlowPanel1->Height += edt->Height + 2;
    edt->Width = FlowPanel1->Width;
    edt->Parent = FlowPanel1;
    edt->Text = IntToStr(i++);
}
, и они как раз снизу и будут добавляться...
1
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 5
21.01.2014, 00:44  [ТС]
Сколько Вы помощи и опыта мне дали всего в паре сообщений, мне аж стыдно что я совсем не знаю ничего.

Чуть-чуть разобравшись понял как с помощью TFlowPanel и Ваших советов сделать точно то что мне нужно - чтобы новые сообщения снизу, а старые подгружались вверху.

Спасибо Вам еще раз огромное!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.01.2014, 00:44
Помогаю со студенческими работами здесь

Добавление n-символов к строке. Вначале,в конце,с обеих сторон.Подскажите
Здравствуйте,передомной стоит задача добавить к String определенное количество символов.К примеру, adasdadasdas. к этому мы должны...

Добавление и удаление объектов. Рисование объектов на экране
Доброго времени суток. Есть очень интересующий вопрос, как сделать добавление, обновление, удаление объектов? Допустим есть класс...

Добавление и удаление элементов списка, очистка списка, просмотр списка
Добрый вечер! помогите пожалуйста с решением не простой задачи. Предусмотреть меню, позволяющее выполнять основные операции со...

Поиск в мобильном меню находится в конце списка, внизу. А нужно наоборот, вверху меню
Здравствуйте. Не могу ничего поделать. При вставке этого кода в function.php // начало кода формы поиска в меню ...

Определить в классе статическую компоненту - указатель на начало связанного списка объектов и функцию просмотра списка
Помогите пожалуйста доделать программу. Необходимо определить в классе статическую компоненту - указатель на начало связанного списка...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru