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

Скрол на TMemo

15.06.2010, 21:51. Показов 7788. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть два столбца данных, они записаны в двух TMemo
нужно сделать так что бы двигая ползунок на одном tmemo двигалось на столько же на другом

Заранее Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.06.2010, 21:51
Ответы с готовыми решениями:

Убрать из TMemo запятые, числа расположить в столбик, и вывести все это во второе поле TMemo
Привет всем вообщем помогите с программой ) у нас есть поле TMemo в котором числа расположены числа вида 1231243,123543,21454... и так...

Скрол
Быть может есть готовая библиотека для скрола. К примеру стандартный прячем, через дополнительную библиотеку ставим свой скрол, без фона,...

Изменить скрол
Как изменить вид скролла(ползунка)? который в блоке

12
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
16.06.2010, 11:34
zackkc, а почему бы не использовать TStringGrid и не выдумывать колеса?
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
16.06.2010, 16:48
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
а почему бы не использовать TStringGrid и не выдумывать колеса?
Ну почему же колесо сразу? В Total Commander'e есть такая опция Файл - Сравнить по содержимому. Там два поля и при прокрутке одного сравниваемый текст прокручивается в обеих полях... Может автор имел ввиду это?
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
16.06.2010, 23:28
Лучший ответ Сообщение было отмечено как решение

Решение

zackkc, Размещаете на форме два TMemo. Также, добавляете один TScrollBar.
Делаете его вертикальным (в инспекторе - Kind = sbVertical).
Далее, обьявляете глобальную переменную:
C++
1
int Value = 0;
После этого обрабатываем событие OnChange для компонента TScrollBar:
C++
1
2
3
4
5
6
7
8
if (ScrollBar1->Position > Value) {
  Memo1->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo2->Perform(EM_SCROLL,SB_LINEDOWN,0);
} else {
  Memo1->Perform(EM_SCROLL,SB_LINEUP,0);
  Memo2->Perform(EM_SCROLL,SB_LINEUP,0);
}
  Value = ScrollBar1->Position;
Вот вам решение вашей проблемы. Также можете обработать события OnChange для обоих TMemo. Зачем? Обьясню. Когда вы загружаете в TMemo какой-либо текст происходит изменение позиции TScrollBar'a и меняется количество строк в TMemo. Соответственно, вам нужно будет изменить:
C++
1
2
3
ScrollBar1->Max = Memo1->Lines->Count // или максимум для Memo2;
ScrollBar1->Position = 0;
Value = 0;
Дальнейшие ухищрения зависят только от вашей фантазии
6
0 / 0 / 0
Регистрация: 15.06.2010
Сообщений: 5
19.06.2010, 09:20  [ТС]
спасибо!
0
4 / 4 / 0
Регистрация: 04.10.2010
Сообщений: 33
26.11.2010, 11:29
Так а если в процессе работы программы добавляются данные в TMemo1, TMemo2... И на экран выводятся только последние параметры. А скролл остался сверху. Как сделать так, что скролл начинался снизу, и все колонки поднимались/опускались синхронно. (у меня 9 полей TMemo и во все одновременно (в одном цикле) добавляется по параметру). Я делал так:
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
void __fastcall TForm2::Memo1Change(TObject *Sender) {
ScrollBar1->Max = Memo1->Lines->Count;
ScrollBar1->Position = 0;
scrval = 0; }
void __fastcall TForm2::ScrollBar1Change(TObject *Sender) {
if (ScrollBar1->Position > scrval) {
  Memo1->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo2->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo3->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo4->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo5->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo6->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo7->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo8->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo9->Perform(EM_SCROLL,SB_LINEDOWN,0); }
else {
  Memo1->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo2->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo3->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo4->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo5->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo6->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo7->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo8->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo9->Perform(EM_SCROLL,SB_LINEDOWN,0);  }
  scrval = ScrollBar1->Position;     }
Добавлено через 3 минуты
А ещё можно было бы как-нибудь выделять целую строку во всех полях TMemo - ну чтобы подсвечивался параметр с одинаковым номером во всех полях TMemo, например, при выделении в одной из колонок или наведения в одной из колонок на него. Или это трудно реализуемо?
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
26.11.2010, 13:27
Цитата Сообщение от ANTi1 Посмотреть сообщение
Как сделать так, что скролл начинался снизу, и все колонки поднимались/опускались синхронно.
Позицию у ScrollBar установить в позицию Max.

Цитата Сообщение от ANTi1 Посмотреть сообщение
А ещё можно было бы как-нибудь выделять целую строку во всех полях TMemo
Про цвет текста на форуме уже были обсуждения. Воспользуйтесь поиском.
0
4 / 4 / 0
Регистрация: 04.10.2010
Сообщений: 33
26.11.2010, 13:50
Ну установил я позицию скролла в Макс (у меня по умолчанию Min=0; Max=100)
Да, скроллинг снизу, но когда его поднимаешь, поля TMemo не поднимаются вверх.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TForm2 *Form2;
int scrval = 0; 
 
...
 
void __fastcall TForm2::Memo1Change(TObject *Sender) {
ScrollBar1->Max = Memo1->Lines->Count;
ScrollBar1->Position = 100;}
void __fastcall TForm2::ScrollBar1Change(TObject *Sender) {
if (ScrollBar1->Position > scrval) {
  Memo1->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo9->Perform(EM_SCROLL,SB_LINEDOWN,0); }
else {
  Memo1->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo9->Perform(EM_SCROLL,SB_LINEDOWN,0);  }
  scrval = ScrollBar1->Position;     }
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
26.11.2010, 13:59
ANTi1, а не забыли задать нужное значение переменной scrval? Ибо судя по вашему коду, она так и осталось равной нулю.
Внимательно пересмотрите ваш код и он заработает, даю гарантию
0
4 / 4 / 0
Регистрация: 04.10.2010
Сообщений: 33
26.11.2010, 14:44
MikeSoft, т.е. вы имеете ввиду 5ую строчку:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm2::Memo1Change(TObject *Sender) {
ScrollBar1->Max = Memo1->Lines->Count;
ScrollBar1->Position = 100;
scrval=ScrollBar1->Position;}
void __fastcall TForm2::ScrollBar1Change(TObject *Sender) {
if (ScrollBar1->Position > scrval) {
  Memo1->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo9->Perform(EM_SCROLL,SB_LINEDOWN,0); }
else {
  Memo1->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo9->Perform(EM_SCROLL,SB_LINEDOWN,0);  }
  scrval = ScrollBar1->Position;     }
если да, то не помогает она. Прокручиваю скроллинг вверх, а текст в полях ТМемо стоит на месте... Или я не так Вас понял?
0
4 / 4 / 0
Регистрация: 04.10.2010
Сообщений: 33
06.12.2010, 22:17
MikeSoft, написал Вам даже в личку, вы всё равно не ответили...
разобрался сам: дело было в SB_LINEUP. По ошибке везде вставил SB_LINEDOWN =)
И нормально скроллилось только вниз. =) А вверх не хотело и всё.

C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm2::Memo1Change(TObject *Sender) {
ScrollBar1->Max = Memo1->Lines->Count;
ScrollBar1->Position = 1000;
scrval=ScrollBar1->Position;}
void __fastcall TForm2::ScrollBar1Change(TObject *Sender) {
if (ScrollBar1->Position > scrval) {
  Memo1->Perform(EM_SCROLL,SB_LINEDOWN,0);
  Memo9->Perform(EM_SCROLL,SB_LINEDOWN,0); }
else {
  Memo1->Perform(EM_SCROLL,SB_LINEUP,0);
  Memo9->Perform(EM_SCROLL,SB_LINEUP,0);  }
  scrval = ScrollBar1->Position;     }
И снова вопрос: а где в настройках ScrollBar есть настройка параметров скрости прокрутки (или я даже не знаю как это назвать...) Объясню: если быстро прокручивать - то оно прокручивает 30-50 значений от Min до Max. Хотя реально там около 800 значений. А если прокручивать медленно (имеется ввиду стать мышкой на бегунок и медленно поднимать/опускать) - то нормально можно прокрутить от Min до Max и увидеть все значения.
0
0 / 0 / 0
Регистрация: 12.12.2010
Сообщений: 12
12.12.2010, 14:47
а у меня вот так вот вопрос: как настроить шаг прокрутки? то бишь как сделать так что бы дойдя до конца последней строки ползунок был в конце, а не по середине?
0
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
05.05.2011, 21:07
MadChild не знаю подойдет Вам или нет, но я попробовал таким образом:
C++
1
2
3
4
int RELCount = RichEdit1->Lines->Count;
int SBHeight = ScrollBar1->Height;
    if(RELCount != 0)
    ScrollBar1->PageSize = (SBHeight/RELCount)*7;
И сам ползунок менял свой размер как раз под текст, но почему то как он поменяет свой размер, и потом после этого попробовать загрузить в RichEdit текст из документа то выходит ошибка: ScrolBar property out of range. Как разобраться с этой проблемой не знаю, подскажите пожалуйста. Заранее спасибо!

Добавлено через 48 минут
С проблемой раобрался, надо было обнулять PageSize сролбара перед откртием, типа так:
C++
1
ScrollBar1->PageSize = 0;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2011, 21:07
Помогаю со студенческими работами здесь

Скрол мышкой
Всем доброго времени _уток. Пишу бот для игры, столкнулся с необходимостью управления мышкой. В частности нужно один раз проскролить...

Скрол блоков
Столкнулся с проблемой размещения сразу 2-х скрол страниц (те блоков, просто чаще можно встретить ввиде длинного лендинга со скролом). ...

Антимасштпбируемый скрол
Здравствуйте. Подскажите как сделать такой же скролл как на сайте. http://gor-polyana.ru Там контента под иллюстрацией не видно как бы...

Скрол на странице
сделал страницу! Её содержание выходит за приделы страницы. Но скрол почему-то не появляется(!?) чем это можно обьяснить и что делать!? ...

Listbox1 скрол
Как сделать так, что б у listbox1 и listbox2 ползунок двигался одновременно и на одинаковом положении был всегда?


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru