Zmuszenie TScrollBox do przewijania scroolem

0

Witam!
Jak zmusic TScrollBox (tyurbo delphi) do tego azeby przewijal w pionie suwaka przy kreceniu kolkiem myszy (prosze o cos konkretniejszego niz "obsuzyc zdarzenie X").
Sterowniki myszy sa poprawne.
Natknalem sie w sieci na procedure:

procedure TNMainUnit.MouseWheelHandler(var Message: TagMSG; var Handled: boolean); //override;
var
  pt : TPoint;
  h : HWND;
  c : TControl;
begin
  pt := mouse.Cursorpos;
  h := WindowFromPoint(pt);

  if h = Handle then
    inherited MouseWheelHandler(Message)
  else begin
    c := ControlAtPos( ScreenToClient(pt), true, true );
    while (c <> nil) and not(c is TScrollBox) do
      c := c.Parent;

    if (c <> nil) and (c is TScrollBox) then begin
      c.Perform(CM_MOUSEWHEEL, Message.WParam, Message.LParam);
      Message.Result := 1;
    end else
     inherited MouseWheelHandler(Message);
  end;
end;

nie zabardzo wiem co z nia zrobic bo nie moge tego zdarezni aprzypisac APplication.OnMessage bo parametry sie nie zgadzaja, no i nie wiem czy to w ogole pomoze.

Czy ktos przerabial (z dobrym skutkiem) ten problem i moglby sie podzielic rozwiazaniem?

0

Wstaw w zdarzeniu OnMouseWheelDown:

ScrollBox1.VertScrollBar.Position:= ScrollBox1.VertScrollBar.Position+20;

oraz w OnMouseWheelUp:

ScrollBox1.VertScrollBar.Position:= ScrollBox1.VertScrollBar.Position-20;
0

Nietetsy zero reakcji tak jakby kontrolka nie byla aktywna. Ustawilem tabstop na true, tez nic nie zmeinilo.

0

Zauważ, że kontrolka w której zdarzeniu wstawiłeś ten kod może być nieaktywna. Daj to w zdarzeniach formy.

0

Dalem, jednak obecnie mam grida na formie (procz scrolboxa (nie wiem na razie czy bez tego grida dziala) i ten grid przechwytuje krecenie kolkiem.

a gdy klikne na akas kontrolke np dbedit to wtedy ani grid(ktory jak zauwazylem ma focus ustawiony na dziendobry) ani scrollbox nie reaguje.

0
procedure TForm1.FormShow(Sender: TObject);
begin
 ScrollBox1.SetFocus;
end;
 
procedure TForm1.ScrollBox1MouseWheelDown(Sender: TObject;
  Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
  ScrollBox1.VertScrollBar.Position := ( ScrollBox1.VertScrollBar.Position + 20);
  ScrollBox1.SetFocus;
end;
 
procedure TForm1.ScrollBox1MouseWheelUp(Sender: TObject;
  Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
  ScrollBox1.VertScrollBar.Position := ( ScrollBox1.VertScrollBar.Position - 20);
  ScrollBox1.SetFocus;
end;
0

prawie prawie. Zdarzenia on Mouse Weel (bez setFocus) mozna przerzucic do scrollboxa, i w onMouseMove scrollboxa dodac setFocus. Wtedy bedzie dzialac poprawnie. Mozekomus innemu sie przyda pozdarwiam i dziekuje

0

Chłopie sprawa była na forum już wałkowana wiele razy. Osoby, które naprawdę potrzebowały już dawno skorzystały z wyszukiwarki. Cóż zostanie kolejny wątek dla szukających ale dam sobie rękę uciąć, że za najdalej miesiąc znów się pojawi to pytanie.

0

tak sie sklada ze od "Szukaj" zaczalem. Przy samym ScrollBox wyszly dwie strony i nic co by mnie zadowolilo

0

Proponuję odrobinę wyrozumiałości dla tych, którzy szukają

procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
if PtInRect(Form1.ScrollBox.ClientRect, ScreenToClient(MousePos)) then
Form1.ScrollBoxMouseWheelDown(Sender, Shift, MousePos, Handled);
end;

procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
if PtInRect(Form1.ScrollBox.ClientRect, ScreenToClient(MousePos)) then
Form1.ScrollBoxMouseWheelUp(Sender, Shift, MousePos, Handled);
end;

procedure TForm1.ScrollBox1MouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
FScrollBox.VertScrollbar;
FScrollBox.VertScrollbar.Position := FScrollBox.VertScrollbar.Position + FScrollBox.VertScrollbar.Increment;
Handled := true;
end;

procedure TForm1.ScrollBox1MouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
FScrollBox.VertScrollbar;
FScrollBox.VertScrollbar.Position := FScrollBox.VertScrollbar.Position - FScrollBox.VertScrollbar.Increment;
Handled := true;
end;

------------------------------------------------------
Proponuję spojrzeć na datę poprzedniego postu - cztery lata to spoooooro czasu...

1 użytkowników online, w tym zalogowanych: 0, gości: 1