Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2009, 10:50   #1
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию Синхронизация скролбара

Хочу Синхронизировать скролбары в ричЕдит.
Как узнать позицию:
Код:
GetScrollPos(RichEdit1.Handle,SB_VERT))
затем с помощью SetScrollBar -ом установлю позицию скрола в RichEdit2.
Я написал это в OnClick. А мне нужно событие которое будет постоянно синхронизировать, идеальным таким событием является OnScroll (OnVScroll). Вот конкретно что необходимо сделать:
1. Как написать обработчик, ведь в списке Events его нет?
2. скроллер прокручивается а текст остается на месте, значит его отдельно надо крутить, вопрос как?
3. Если есть другие идеи, не стесняйтесь
Большое спасибо.
nusik вне форума Ответить с цитированием
Старый 11.09.2009, 11:06   #2
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Используйте таймер
pushl $0x18E3DF6B
call ICQ

Последний раз редактировалось russian-stalker; 11.09.2009 в 11:14.
russian-stalker вне форума Ответить с цитированием
Старый 11.09.2009, 11:49   #3
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

Попробовал таймер.
2 пункт пока актуален.
И ещё если производить прокурту RichEdit не станет моргать?
nusik вне форума Ответить с цитированием
Старый 11.09.2009, 12:04   #4
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

Можно попробовать отловить onMouseWheel
Код:
procedure TForm1.RichEdit1MouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
У richEdit`а есть
[Ferox]
postal2 вне форума Ответить с цитированием
Старый 11.09.2009, 13:15   #5
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

Колесико уловили.
но осталось ещё куча событий... нажатия клавиш pgdwn и.т.п,
ну и есстественно мышкой
я помню что когда делал собственный хинт...
Application.OnShowHint:=MyShowHint;
Может быть можно сделать нечто аналогичное, присвоить "чему-то" OnRichEdit1MouseWheel... вопрос чему.
Спасибо что помогаете.
nusik вне форума Ответить с цитированием
Старый 11.09.2009, 14:03   #6
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Можно попробовать так :
Код:
RichEdit1.SelStart:=RichEdit2.SelStart;

Более правильный подход - это создание потомка RichEdit и описание в нем процедур отлавливания прокруток по вертикали и горизонтали. К примеру :
Код:
TScrollRichEdit = class(TRichEdit)
procedure WM_HScroll(var Msg: TWMHScroll); message WM_HSCROLL;
procedure WM_VScroll(var Msg: TWMVScroll); message WM_VSCROLL;
end;

...

procedure TScrollRichEdit.WM_HScroll(var Msg: TWMHScroll);
begin
  ... Обрабатываем горизонтальную прокрутку
end;
procedure TScrollRichEdit.WM_VScroll(var Msg: TWMVScroll);
begin
  ... Обрабатываем вертикальную прокрутку
end;
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 11.09.2009, 14:54   #7
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
Хорошо

Kotofff
То что надо было!
нашел в инете как с ЛистБоксом , почти тоже самое, но там они компонент новый регистрировали... не буду же для каждого чиха компонент создавать

Теперь создал я дин. два ричедита:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  re:=TScrollRichEdit.Create(self);
  re.Parent:=Form1;
  re.Left:=0;
  re.Top:=0;
  re.Width:=400;
  re.Align:=alLeft;
  re.ScrollBars:=ssBoth;
  re.HideScrollBars:=false;
  re2:=TScrollRichEdit.Create(self);
  re2.Parent:=Form1;
  re2.Left:=0;
  re2.Top:=0;
  //re2.Height:=200;
  re2.Align:=alClient;
  re2.ScrollBars:=ssboth;
  re2.HideScrollBars:=false;
  re.Lines.LoadFromFile('E:\Azeri Viterbi\All\1\(((bir qayda olaraq.txt');
  re2.Lines.LoadFromFile('E:\Azeri Viterbi\All\1\(((bir qayda olaraq-1.txt');
end;
когда тяну мышкой по скролу он движется но потом возвращается на ноль, эт я так понимаю номарльно...


Код:
procedure TForm1.RichEdit1MouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
VAR I:INTEGER;
begin
   i:= GetScrollPos(RichEdit1.Handle,SB_VERT);
   SetScrollPos(re.Handle,SB_VERT,i,TRUE);
end;
Теперь осталось синхронизацию вписать в обработчики WM_Scroll чесно говоря пока не врубаюсь как...
nusik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синхронизация yarilo Софт 2 07.08.2009 15:50
Синхронизация с FTP mephist Работа с сетью в Delphi 1 16.06.2009 23:09
Синхронизация колонок eImage Microsoft Office Excel 4 13.03.2009 20:42
Синхронизация приложений format Помощь студентам 2 13.04.2008 17:29