Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 11.09.2009, 09: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, 10:06   #2
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

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

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

Попробовал таймер.
2 пункт пока актуален.
И ещё если производить прокурту RichEdit не станет моргать?
nusik вне форума Ответить с цитированием
Старый 11.09.2009, 11: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, 12:15   #5
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

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

Можно попробовать так :
Код:
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;
Кому iPhone и Swarovski, кому Афон и Саровский...
Kotofff вне форума Ответить с цитированием
Старый 11.09.2009, 13: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 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


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


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS