Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.035 c
3-1080308193
Виктор
2004-03-26 16:36
2004.04.25
SQL , Interbase,Fireebird


1-1081187071
3APA3A
2004-04-05 21:44
2004.04.25
Сколько времени прошло с момента создания файла...


14-1080885396
snake1977
2004-04-02 09:56
2004.04.25
Office 2000


1-1081139267
jenbond
2004-04-05 08:27
2004.04.25
GExpert или CodeRush


3-1080189793
dm37
2004-03-25 07:43
2004.04.25
Корректная обработка доступа к процедурам MS SQL Server





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский