Ganz herzlichen Dank.
Mit ein paar nebensächlichen Änderungen habe ich es nun so implementiert, dass ich nur die STRG - Tase für beide Richtungen abfragen muss. Hier mein Code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); var msg: Cardinal; code: Cardinal; i, n: Integer; begin
if Self.ActiveControl = ScrollBox1 then if ssCTRL in Shift then begin case GSetupClass.Setup_AussehenMain.F_int_Setup_MainAnordnung of 0: begin msg := WM_HSCROLL; end; 1: begin msg := WM_VSCROLL; end else begin exit; end; end;
Handled := True;
if WheelDelta < 0 then code := SB_LINEDOWN Else code := SB_LINEUP;
n := GSetupClass.Setup_AussehenMain.F_int_Setup_Rooms_Anordnung_UseScrollBox_ScrollLines; for i := 1 to n do ScrollBox1.Perform(msg, code, 0); ScrollBox1.Perform(msg, SB_ENDSCROLL, 0); end;
end; |
Das ganze funktioniert auch wenn ich auf einen freien Bereich in meinen StringGrids drücke, hier habe ich einfach im OnMouseUp der StringGrids abgefragt, ob die angeklickte Zelle einen Index -1/-1 hat. Falls ja, bekommt die Scrollbox den Focus.
Da jedoch außer den Scrollleisten nichts von der Scrollbox an sich anklickbar ist oder sich die Maus direkt über der Scrollbox befinden kann, weil andere Controls diese überdecken, kommt meine Abfrage
if Self.ActiveControl = ScrollBox1 zum Einsatz, welches auch perfekt funktioniert.
Einfach genial. Vielen Dank.
Liebe Grüße
Mathias
Edit:
Mit einer kleinen Abfrage kann man sogar das PageControl überreden die Reiter mit dem Rad durchzuscrollen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| if WindowFromPoint(mouse.Cursorpos) = PageControl1.Handle then begin if WheelDelta < 0 then if PageControl1.ActivePageIndex > 0 then PageControl1.SelectNextPage(False); if WheelDelta > 0 then if PageControl1.ActivePageIndex < PageControl1.PageCount-1 then PageControl1.SelectNextPage(True); Handled := True; end; |
