Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вопрос на засыпку: как можно синхронизировать scrollbox-ы? / 6 сообщений из 6, страница 1 из 1
25.11.2002, 04:45
    #32071731
Serguei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку: как можно синхронизировать scrollbox-ы?
Изменяешь положение бегунка у одного- аналогично изменяется у другого. Проблема в том, что у него нет события onScroll :(
...
Рейтинг: 0 / 0
25.11.2002, 07:33
    #32071734
Mich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку: как можно синхронизировать scrollbox-ы?
Копать в сторону WM_VSCROLL, WM_HSCROLL и вокруг них.
______
...
Рейтинг: 0 / 0
25.11.2002, 16:01
    #32072051
Serguei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку: как можно синхронизировать scrollbox-ы?
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids;

type
{$IFDEF WIN32}
WParameter = LongInt;
{$ELSE}
WParameter = Word;
{$ENDIF}
LParameter = LongInt;
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
StringGrid1: TStringGrid;
ScrollBox2: TScrollBox;
StringGrid2: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
OldWindowProc : Pointer;


implementation

{$R *.DFM}

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
GetScrollRange(WindowHandle,
SB_HORZ,
TheRangeMin,
TheRangeMax);
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(form1.ScrollBox2.Handle,
SB_Vert,
TheRange,
true);

end;

if TheMessage = WM_HSCROLL then begin

GetScrollRange(WindowHandle,
SB_VERT,
TheRangeMin,
TheRangeMax);
TheRange := GetScrollPos(WindowHandle,
SB_HORZ);
if TheRange < TheRangeMin then
TheRange := TheRangeMin else
if TheRange > TheRangeMax then
TheRange := TheRangeMax;
{Set the vertical scroll bar}
SetScrollPos(form1.ScrollBox2.Handle,
SB_HORZ,
TheRange,
true);
end;

NewWindowProc := CallWindowProc(OldWindowProc,
WindowHandle,
TheMessage,
ParamW,
ParamL);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin

OldWindowProc := Pointer(SetWindowLong(ScrollBox1.Handle,
GWL_WNDPROC,
LongInt(@NewWindowProc)));
end;



procedure TForm1.FormDestroy(Sender: TObject);
begin

SetWindowLong(ScrollBox1.Handle,
GWL_WNDPROC,
LongInt(OldWindowProc));
end;

end.
...
Рейтинг: 0 / 0
25.11.2002, 16:02
    #32072052
Serguei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку: как можно синхронизировать scrollbox-ы?
Пардо не дописал- положение скролов синхронизируется, а содержимое вот не прокручиватся :( что делать??
...
Рейтинг: 0 / 0
25.11.2002, 16:09
    #32072060
Serguei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку: как можно синхронизировать scrollbox-ы?
Спасибо, разобрался! Ну и ламмер я!
...
Рейтинг: 0 / 0
25.11.2002, 16:12
    #32072062
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос на засыпку: как можно синхронизировать scrollbox-ы?
Код: plaintext
1.
2.
ScrollBox1.DisableAutoRange;
//что-то делаем ...
ScrollBox1.EnableAutoRange;

Я бы конечно создал класс-наследник - где бы и перекрыл WM_VSCROLL , WM_HSCROLL .
Но у тебя красивше ... )))
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вопрос на засыпку: как можно синхронизировать scrollbox-ы? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]