![]() |
Mausrad für nicht fokussierte Komponente
Ich möchte z.B. ein TVirtualStringTree vom Mausrad scrollen lassen, was bisher nur funktioniert wenn es den Fokus hat. Gibt es Ideen wie man das auch für eine beliebige Komponente auf einer Form schafft, die sich unter der Maus befindet aber keinen Fokus hat?
|
Re: Mausrad für nicht fokussierte Komponente
Hallo anse,
ich habe mir gerade gestern, Folgendes zusammengetüftelt:
Delphi-Quellcode:
Frohe Weihnachten :xmas:
procedure TfrmTest.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); begin if PtInRect(ScrollBoxTest.ClientRect, ScrollBoxTest.ScreenToClient(Mouse.CursorPos)) then begin if WheelDelta >0 then ScrollBoxTest.VertScrollBar.Position := ScrollBoxTest.VertScrollBar.Position - TestGroesse; if WheelDelta <0 then ScrollBoxTest.VertScrollBar.Position := ScrollBoxTest.VertScrollBar.Position + TestGroesse; end; Handled := True; end; |
Re: Mausrad für nicht fokussierte Komponente
Ah, richtig, die Form bekommt den OnMouseWheel event ja zuerst. Danke für den Tip!
Jetzt zeigt das VirtualStringTree nur merkwürdige Effekte bei
Delphi-Quellcode:
aber das ist ein anderes Problem...
VT.ScrollBy(WheelDelta)
|
Re: Mausrad für nicht fokussierte Komponente
Mit VT.OffsetY klappts:
Delphi-Quellcode:
procedure TMainForm.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
var Handled: Boolean); var Control: TWinControl; VT: TBaseVirtualTree; begin // TODO: Does not work when a SynMemo has focus, probably related to the broken solution of this issue: // [url]http://sourceforge.net/tracker/index.php?func=detail&aid=1574059&group_id=3221&atid=103221[/url] Control := FindVCLWindow(MousePos); if (Control is TBaseVirtualTree) and (not Control.Focused) and PtInRect(Control.ClientRect, Control.ScreenToClient(MousePos)) then begin VT := Control as TBaseVirtualTree; VT.OffsetY := VT.OffsetY + (WheelDelta div 2); // Don't know why, but WheelDelta is twice as big as it normally appears VT.UpdateScrollBars(True); Handled := True; end else Handled := False; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz