Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.24;
Скачать: CL | DM;

Вниз

Заставить ScrollBox реагировать на перетаскивание ползунка?   Найти похожие ветки 

 
AlexeyT ©   (2006-12-07 17:07) [0]

Хочется реакции на перетаскивание ползунка. Кажется, в API это соотв-ет параметру SB_THUMBTRACK сооб-я WM_V/HSCROLL. Что делать?


 
kivadim   (2006-12-07 17:49) [1]

может поможет... но правда др компонент..

Нижеприведенный пример передвигает второй 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;


 
AlexeyT ©   (2006-12-07 18:10) [2]

Мм.. даже на знаю. Тут заменяется оконная процедура в формы - как то же сделать для scrollbox"а, можно у него заменить оконную процедуру или нет?


 
Gadenysh   (2006-12-07 18:40) [3]

tracking := true


 
AlexeyT ©   (2006-12-07 18:50) [4]


> tracking := true


:-)

Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2006.12.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
2-1165218733
*Ray*
2006-12-04 10:52
2006.12.24
обновление данных на Клиенте


2-1165066392
ssss
2006-12-02 16:33
2006.12.24
Слова перевертыши


2-1165229272
Roman_ln
2006-12-04 13:47
2006.12.24
comboBox ??? отмена редактироания в текстовом поле


2-1165485502
Goric
2006-12-07 12:58
2006.12.24
Залочить юзера


2-1165338873
B1en
2006-12-05 20:14
2006.12.24
Один код к разным событиям