Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизКакое сообщение приходит при прокручивании скрола в ListBox? Найти похожие ветки
← →
TankMan © (2004-03-31 17:35) [0]Нужно отловить прокручивание скролла в компоненте и передать это же сообщение другому компоненту... но вот понять не могу.. нету чтоли этих сообщений или я не там смотрю, но так и не нашел чего должно приходить когда пользователь всетаки прокрутил вверх или в низ скролл...
← →
Ega23 © (2004-03-31 17:38) [1]WM_VSCROLL WM_HSCROLL ?
← →
TankMan © (2004-03-31 17:39) [2]А какому компоненту приходят эти сообщения? например если поставить обработчик на WndProc при скролле ничего подобного не приходит к нему :(
← →
Ega23 © (2004-03-31 17:47) [3]Попробуй через ApplicationEvents.OnMessage
Что-то типа
if Msg.message=WM_VSCROLL then
if Msg.handle=Твой контрол.Handle then
Beep;
← →
TankMan © (2004-03-31 18:10) [4]Не приходят туда такие сообщения как WM_VSCROLL и HSCROLL... а вот WM_MOUSEWHEEL приходит, но вот на то что я посылаю с помощью SendMessage(хендл компонента,Мессаге,Впарам,Лпарам) нужный компонент вообще ни как не реагирует :((
← →
Ega23 © (2004-03-31 18:23) [5]procedure TFMain.pnSetsPlantsFiltrDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept:=False;
if (Source as TRxDBGrid).Name="rxgPlantGoods" then
begin
Accept:=True;
if (Y<=((Sender as TPanel).Height div 2)) then
begin
PostMessage((Source as TRxDBGrid).Handle,WM_VSCROLL,SB_LINEDOWN,0);
end
else
begin
PostMessage((Source as TRxDBGrid).Handle,WM_VSCROLL,SB_PAGEDOWN,0);
end;
end;
end;
Это кусочек кода по релизации Drag&Drop записи в DBGrid"е. Хотелось сделать, чтобы как в Excel было.
Посмотри, может поможет. У меня, по крайней мере, запись "тащилась" и скролл отрабатывал.
← →
TankMan © (2004-03-31 19:22) [6]Эх.. не работает и все... вобщем поставил я на
ApplicationEvents.OnMessage
процедуру AppMessage
вот ее тело
if (msg.message=WM_MOUSEWHEEL)
then postMessage(ListBox1.handle,WM_VSCROLL,SB_LineDOWN ,0);
Ставил и на listBox и на WebBrowser никакой разницы и пробовал SendMessage, но так и не понял, чем они отличаются...:(
Реакцию ставлю на WM_MOUSEWHEEL, потому что другого сообщения не приходит... но как бы то нибыло... строка с postMessage срабатывает, даже сама процедура ловит отосланное сообщение? но вот скроллинг, ни как не шевелится :((((
Может есть какой другой способ, может я всетаки чего-то упустил, дай пожалуйста пример, именно на ListBox или WebBrowser...
← →
Ega23 © (2004-03-31 19:36) [7]procedure TForm1.Button7Click(Sender: TObject);
begin
PostMessage(ListBox1.Handle,WM_VSCROLL,SB_PAGEDOWN,0);
end;
На форме ListBox1 и Button7 соответственно. Items в листбоксе больше видимой области, т.е. скроллиться можно.
Всё работает.
Изложи подробнее проблему: что за контрол, на котором ты колёсико двигаешь, куда ты хочешь сообщение передать и т.п.
← →
TankMan © (2004-03-31 20:51) [8]Хм... действительно такой вариант работает и у меня...
странно почему же onMessage вообще не видит такого вот сообщения? когда я просто скроллингом прокурчиваю ListBox?, а в место этого приходит WM_MOUSEWHEEL?... странно...
Я скоро в истерику впаду! КАК этот хренов скролл листбокса узнает, про то, куда ему двигатся вверх или вниз, если ему приходит только WM_MOUSEWHEEL?!?!?!... WM_VSCROLL вообще никак не приходят, только если ты сам их не отправляешь :((((
А вот WebBrowser вооще никак не реагирует на SB_LINEDOWN :((
Листбокс всетаки реагирует.. вообще я пытаюсь разобратся, как всетаки отловить эти хреновы сообщения?...
И для примера - мне нужно добится следующего :
Есть два Листбокса или 2 WebBrowser-а и при скроллинге 1-го компоента нужно чтобы 2-й компонент реагировал так же.. т.е. перематывался на такое же расстояние от верхней или нижней границы, а вообще у меня в проектах часто возникает такая проблема, когда нужно передавать сообщение ,пришедшее одному компоненту, многим другим... с другими то сообщениями, которые я использовал не возникло никаких особенных проблем, а вот этот VSCROLL или MOUSEWHEEL так мне и не подддается :(((
← →
Diamond Cat © (2004-03-31 23:15) [9]
> странно почему же onMessage вообще не видит такого вот сообщения
ничего странного внимательней читайте хелп
> КАК этот хренов скролл листбокса узнает, про то, куда ему
> двигатся вверх или вниз, если ему приходит только WM_MOUSEWHEEL?!?!?!...
>
если почитать справку о wm_mousewheel то там написано как определяется куда должен переходить бегунок
вобщем все ваши проблемы от нежелания в них разобраться,
> Нужно отловить прокручивание скролла в компоненте и передать
> это же сообщение другому компоненту...
фишка вся в том, что компонент сам обрабатывает эти сообщения, и поэтому ему незачем как-то уведомлять своего владельца об этом, соответсвенно для получения этих сообщений надо вклиниться в оконную функцию данного компанента, рискну, предложить пример (не смотря на то, что правильней было бы просто описать набор функций, а вы глядишь и с хелпом бы научились общаться :о) без обид)
var
Form1 : TForm1;
OldWindowProc : Pointer;
implementation
{$R *.dfm}
function mHScrolProc(WindowHandle:hWnd; TheMessage:uint;
ParamW:WParam; ParamL : LParam) : LongInt {$IFDEF WIN32} stdcall;
{$ELSE} ; export; {$ENDIF}
begin
case TheMessage of
WM_vSCROLL , wm_mousewheel:
begin
postmessage(Form1.RichEdit2.handle,TheMessage,ParamW ,ParamL);
postmessage(Form1.RichEdit1.handle,TheMessage,ParamW ,ParamL);
end;
end ;{of case}
mHScrolProc := CallWindowProc(OldWindowProc, WindowHandle, TheMessage,ParamW, ParamL);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
OldWindowProc:=pointer(getwindowlong(listbox1.handle,GWL_WNDPROC));
setwindowlong(listbox1.handle,GWL_WNDPROC,integer(@mHScrolProc));
end;
← →
TankMan © (2004-04-01 12:34) [10]>Diamond Cat
>>если почитать справку о wm_mousewheel то там написано как определяется куда должен переходить бегунок
вобщем все ваши проблемы от нежелания в них разобраться,
Ах ну да это я знал... но всетаки
какая разница в том, что есть сведения о том, куда переходит этот бегунок при обработке wm_mousewheel... ведь если приходит сообщение wm_mousewheel к ListBox1, то процедурой postmessage, можно с легкостью послать это сообщение со всеми ее параметрами объекту ListBox2, и он будет прокручиватся туда куда нужно, но вот если посылать RichEdit-у или WeBBrowser-у - то они вооще никак не отреагируют :(... вот в чем загвоздка то вообще...
Я этого никак не пойму...
>> странно почему же onMessage вообще не видит такого вот сообщения
>ничего странного внимательней читайте хелп
А хелп по чему onMessage чтоль?
← →
Diamond Cat © (2004-04-01 13:53) [11]
> но вот если посылать RichEdit-у
Боюсь, что дальнейшее продолжение общения не принесет пользы, я привел пример, который великолепно прокручивает именно richedit при прокрутке listbox-а, если вы не разбрались или не удосужились разобраться в вышеизложеном, то это уже лично ваши проблемы.
Я могу лишь предположить, что вам надо учиться пользоваться литературой и примерами
← →
ну уж не моя вина (2004-04-03 15:47) [12]Тааак... наверное всетаки у вас не Delphi5 или всетаки у вас не Win98/ME?.. или может быть у вас XP? тогда будет все ясно... но вот именно тот пример что вы привели не работает должным образом... я добавил туда пару строчек и добавил в проэкт пару компонентов:
case TheMessage of
WM_vSCROLL , wm_mousewheel:
begin
postmessage(Form1.RichEdit2.handle,TheMessage,ParamW ,ParamL);
postmessage(Form1.RichEdit1.handle,TheMessage,ParamW ,ParamL);
postmessage(Form1.ListBox2.handle,TheMessage,ParamW ,ParamL);
postmessage(Form1.WebBrowser1.handle,TheMessage,ParamW ,ParamL);
end;
end ;{of case}
mHScrolProc := CallWindowProc(OldWindowProc, WindowHandle, TheMessage,ParamW, ParamL);
И при прокручивании ListBox1, реагирует на все это только ListBox2 и больше ничего :((...
← →
Diamond Cat © (2004-04-04 01:04) [13]у меня дельфи 5 проверял в основном по ХР там все работает нормально, под 98 действительно ричедит не кушает сообщение wm_mousewheel (системный прикол) тем не менее добиться нужного эффекта можно
парольные слова sbm_set/getpos
← →
TankMan © (2004-04-04 05:15) [14]:) загадками говоришь? :)..- посмотрю как буду на работе :)
← →
Diamond Cat © (2004-04-04 13:35) [15]
> TankMan © (04.04.04 05:15) [14]
> :) загадками говоришь? :)..-
ну уж извини, что не написал за тебя программу полностью ;о)
← →
TankMan © (2004-04-09 11:10) [16]Мдааа... ну ничего не понимаю... сообщения такие не приходят :(... в поисковика ничего вразумительного о них не говорят :(... даже низнаю чего делать то :(... скажи Diamond Cat - это вообще реально?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.043 c