Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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 на такое же количество едениц, на которое передвинет пользователь первый. Т.е. синхронизирует их.

Приложение:
  1. type
  2. {$IFDEF WIN32}
  3. WParameter = LongInt;
  4. {$ELSE}
  5. WParameter = Word;
  6. {$ENDIF}
  7. LParameter = LongInt;
  8.  
  9. {Declare a variable to hold the window procedure we are replacing}
  10. var
  11. OldWindowProc : Pointer;
  12.  
  13. function NewWindowProc(WindowHandle : hWnd;
  14. TheMessage : WParameter;
  15. ParamW : WParameter;
  16. ParamL : LParameter) : LongInt
  17. {$IFDEF WIN32} stdcall; {$ELSE} ; export; {$ENDIF}
  18. var
  19. TheRangeMin : integer;
  20. TheRangeMax : integer;
  21. TheRange : integer;
  22. begin
  23.  
  24. if TheMessage = WM_VSCROLL then begin
  25. {Get the min and max range of the horizontal scroll box}
  26. GetScrollRange(WindowHandle,
  27. SB_HORZ,
  28. TheRangeMin,
  29. TheRangeMax);
  30. {Get the vertical scroll box position}
  31. TheRange := GetScrollPos(WindowHandle,
  32. SB_VERT);
  33. {Make sure we wont exceed the range}
  34. if TheRange < TheRangeMin then
  35. TheRange := TheRangeMin else
  36. if TheRange > TheRangeMax then
  37. TheRange := TheRangeMax;
  38. {Set the horizontal scroll bar}
  39. SetScrollPos(WindowHandle,
  40. SB_HORZ,
  41. TheRange,
  42. true);
  43. end;
  44.  
  45. if TheMessage = WM_HSCROLL then begin
  46. {Get the min and max range of the horizontal scroll box}
  47. GetScrollRange(WindowHandle,
  48. SB_VERT,
  49. TheRangeMin,
  50. TheRangeMax);
  51. {Get the horizontal scroll box position}
  52. TheRange := GetScrollPos(WindowHandle,
  53. SB_HORZ);
  54. {Make sure we wont exceed the range}
  55. if TheRange < TheRangeMin then
  56. TheRange := TheRangeMin else
  57. if TheRange > TheRangeMax then
  58. TheRange := TheRangeMax;
  59. {Set the vertical scroll bar}
  60. SetScrollPos(WindowHandle,
  61. SB_VERT,
  62. TheRange,
  63. true);
  64. end;
  65.  
  66. { Call the old Window procedure to }
  67. { allow processing of the message. }
  68. NewWindowProc := CallWindowProc(OldWindowProc,
  69. WindowHandle,
  70. TheMessage,
  71. ParamW,
  72. ParamL);
  73. end;
  74.  
  75.  
  76. procedure TForm1.FormCreate(Sender: TObject);
  77. begin
  78. { Set the new window procedure for the control }
  79. { and remember the old window procedure. }
  80. OldWindowProc := Pointer(SetWindowLong(ScrollBox1.Handle,
  81. GWL_WNDPROC,
  82. LongInt(@NewWindowProc)));
  83. end;
  84.  
  85. procedure TForm1.FormDestroy(Sender: TObject);
  86. begin
  87. { Set the window procedure back }
  88. { to the old window procedure. }
  89. SetWindowLong(ScrollBox1.Handle,
  90. GWL_WNDPROC,
  91. LongInt(OldWindowProc));
  92.  
  93. end;


Ответ отправил: Роман (статус: 5-ый класс)
Время отправки: 8 февраля 2007, 05:09
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 9 февраля 2007, 00:26; участников в обсуждении: 2.
Knjazev

Knjazev (статус: 3-ий класс), 7 февраля 2007, 21:54 [#1]:

"И как привязать scrollbar к memo?" - это лишнее. В инспекторе объектов для мемо всё надо настраивать
Тамара

Тамара (статус: Посетитель), 8 февраля 2007, 19:17 [#2]:

Ласковый Злоумышленник, я хочу привязать Scrollbar к memo. Не свойство, а компонент. Это возможно? Для чего тогда такие компоненты?
Knjazev

Knjazev (статус: 3-ий класс), 9 февраля 2007, 00:26 [#3]:

Тамар, зачем привязывать компонент, когда всё уже встроено в мемо? См. ответ Романа

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:35
Выполнено за 0.02 сек.