|
Вопрос # 299/ вопрос открыт / |
|
Здравсствуйте, специалисты. Есть 2 MEMO. Нужно, чтобы они вместе прокручивались Scrollbars по горизонтали. И как привязать scrollbar к memo?
 |
Вопрос задала: Тамара (статус: Посетитель)
Вопрос отправлен: 7 февраля 2007, 19:53
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Geron
Здравствуйте, Тамара! Есть у мемо такое свойства как ScrollBars, если конечно это вам поможет
 |
Ответ отправил: Geron (статус: 1-ый класс)
Время отправки: 8 февраля 2007, 00:03
Оценка за ответ: 4
|
Ответ #2. Отвечает эксперт: Роман
Здравствуйте, Тамара!У компонента Memo есть свойство ScrollBars которое может принимать значения ssNone,ssVertical,ssHorizontal,ssBoth:соответственно без полос порокрутки,вертикальная,горизонтальная и обе.По поводу одновременной прокрутки возможно вам поможет функция GetScrollPos:
function GetScrollPos(Wnd: HWnd; Bar:Integer): Integer;
Считывает текущее положение указателя пpокpутки относительно текущего диапазона пpокpутки.
Паpаметpы:
Wnd: Окно, содеpжащее полосу пpокpутки.
Bar: Одна из констант sb_Ctl, sb_Horz, sb_Vert.
Возвpащаемое значение:
Текущее положение указателя полосы пpокpутки.
Также посмотрире приведённый пример который передвигает второй ScrollBar на такое же количество едениц, на которое передвинет пользователь первый. Т.е. синхронизирует их.
Приложение: Переключить в обычный режим- type
- {$IFDEF WIN32}
- WParameter = LongInt;
- {$ELSE}
- WParameter = Word;
- {$ENDIF}
- LParameter = LongInt;
-
- {Declare a variable to hold the window procedure we are replacing}
- var
- OldWindowProc : Pointer;
-
- function NewWindowProc(WindowHandle : hWnd;
- TheMessage : WParameter;
- ParamW : WParameter;
- ParamL : LParameter) : LongInt
- {$IFDEF WIN32} stdcall; {$ELSE} ; export; {$ENDIF}
- var
- TheRangeMin : integer;
- TheRangeMax : integer;
- TheRange : integer;
- begin
-
- if TheMessage = WM_VSCROLL then begin
- {Get the min and max range of the horizontal scroll box}
- GetScrollRange(WindowHandle,
- SB_HORZ,
- TheRangeMin,
- TheRangeMax);
- {Get the vertical scroll box position}
- TheRange := GetScrollPos(WindowHandle,
- SB_VERT);
- {Make sure we wont exceed the range}
- if TheRange < TheRangeMin then
- TheRange := TheRangeMin else
- if TheRange > TheRangeMax then
- TheRange := TheRangeMax;
- {Set the horizontal scroll bar}
- SetScrollPos(WindowHandle,
- SB_HORZ,
- TheRange,
- true);
- end;
-
- if TheMessage = WM_HSCROLL then begin
- {Get the min and max range of the horizontal scroll box}
- GetScrollRange(WindowHandle,
- SB_VERT,
- TheRangeMin,
- TheRangeMax);
- {Get the horizontal scroll box position}
- TheRange := GetScrollPos(WindowHandle,
- SB_HORZ);
- {Make sure we wont exceed the range}
- if TheRange < TheRangeMin then
- TheRange := TheRangeMin else
- if TheRange > TheRangeMax then
- TheRange := TheRangeMax;
- {Set the vertical scroll bar}
- SetScrollPos(WindowHandle,
- SB_VERT,
- TheRange,
- true);
- end;
-
- { Call the old Window procedure to }
- { allow processing of the message. }
- NewWindowProc := CallWindowProc(OldWindowProc,
- WindowHandle,
- TheMessage,
- ParamW,
- ParamL);
- end;
-
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- { Set the new window procedure for the control }
- { and remember the old window procedure. }
- OldWindowProc := Pointer(SetWindowLong(ScrollBox1.Handle,
- GWL_WNDPROC,
- LongInt(@NewWindowProc)));
- end;
-
- procedure TForm1.FormDestroy(Sender: TObject);
- begin
- { Set the window procedure back }
- { to the old window procedure. }
- SetWindowLong(ScrollBox1.Handle,
- GWL_WNDPROC,
- LongInt(OldWindowProc));
-
- end;
 |
Ответ отправил: Роман (статус: 5-ый класс)
Время отправки: 8 февраля 2007, 05:09
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 9 февраля 2007, 00:26; участников в обсуждении: 2.
|
Knjazev (статус: 3-ий класс), 7 февраля 2007, 21:54 [#1]:
"И как привязать scrollbar к memo?" - это лишнее. В инспекторе объектов для мемо всё надо настраивать
|
|
Тамара (статус: Посетитель), 8 февраля 2007, 19:17 [#2]:
Ласковый Злоумышленник, я хочу привязать Scrollbar к memo. Не свойство, а компонент. Это возможно? Для чего тогда такие компоненты?
|
|
Knjazev (статус: 3-ий класс), 9 февраля 2007, 00:26 [#3]:
Тамар, зачем привязывать компонент, когда всё уже встроено в мемо? См. ответ Романа
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|