![]() |
Mausrad mit Label, Scrollbar, etc. benutzen
Also es geht darum, mit dem Mausrad verschiedenen Aktionen zu setzen.
Zum Beispiel möchte ich den Wert einer Scrollbar mit dem Mausrad verändern können. Weiters soll eine Aktion ausgelöst werden, wenn ich mit dem Cursor über einem normalen Label bin, und micht mit dem Mausrad spiele. Wie kann das realisiert werden? thx |
Re: Mausrad mit Label, Scrollbar, etc. benutzen
das Form hat entsprechende Mausradereignisse. Du musst also nur innerhalb dieses Ereignisses prüfen welches Control sich unter dem Cursor befindet und kannst dementsprechend reagieren. Wenn du selbst komponenten schreibst brauchst du auch einfach nur die Messages abfangen. Allerdings ist dort vorraussetzung dass, das control den Focus hat und somit würde das Label ausscheiden und man müsste zuvor auch erst die entsprechende Komponente anklicken oder per tab wählen damit diese den focus bekommt.
|
Re: Mausrad mit Label, Scrollbar, etc. benutzen
Zitat:
|
Re: Mausrad mit Label, Scrollbar, etc. benutzen
push
hat wer eine idee/lösung? |
Re: Mausrad mit Label, Scrollbar, etc. benutzen
Angeblich gibt es ja die Eigenschaften
Delphi-Quellcode:
wie das aussieht wenn das form selbst auch nur in ein anderes eingebettet ist weiss ich nicht :gruebel:
form1.left
form1.top scrollbar1.left scrollbar1.top scrollbar1.height scrollbar1.width mouse.x mouse.y |
Re: Mausrad mit Label, Scrollbar, etc. benutzen
ok das würde schon gehen, ist aber wohl sehr sehr umständlich..
//EDIT: Hier mal mein Code, habe jetzt alles mal in eine Funktion verpackt:
Delphi-Quellcode:
Aufgerufen wird das dann im "TForm1.FormMouseWheel" Event:
function MouseWheel (Sender:TControl;WheelDelta:Integer;MousePos:TPoint):shortint;
begin if (Mousepos.X-Form1.Left>=Sender.Left) and (MousePos.X-Form1.Left<=Sender.Left+Sender.Width) and (MousePos.Y-form1.Top>=Sender.Top) and (MousePos.Y-form1.Top<=Sender.Top+Sender.Height) then begin if WheelDelta>0 then Result:=1 else Result:=-1; end else result:=0; end;
Delphi-Quellcode:
Sollte denk ich klar sein. Das einzige was man noch beachten muss: Wenn man die Funktion so verwendet wie ich sie oben habe, muss auf der Form "bsstyle=bsnone" eingestellt werden, sonst stimmen die Y Werte der Objekte nicht. (Dies hängt mit der Titelleiste zusammen)
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); begin ScrollBar1.Position:=ScrollBar1.Position+MouseWheel(ScrollBar1,WheelDelta,MousePos); ScrollBar2.Position:=ScrollBar2.Position+MouseWheel(ScrollBar2,WheelDelta,MousePos); end; |
Re: Mausrad mit Label, Scrollbar, etc. benutzen
für alle hier nochmal die Version mit korrigierten Y Werten, daher kann die Form jetzt ganz normal mit bsSingle verwendet werden:
Delphi-Quellcode:
function MouseWheel (Sender:TControl;WheelDelta:Integer;MousePos:TPoint):shortint;
begin if (Mousepos.X-Form1.Left>=Sender.Left) and (MousePos.X-Form1.Left<=Sender.Left+Sender.Width) and (MousePos.Y-form1.Top>=Sender.Top+GetSystemMetrics(4)) and (MousePos.Y-form1.Top<=Sender.Top+Sender.Height+GetSystemMetrics(4)) then begin if WheelDelta>0 then Result:=-1 else Result:=1; end else result:=0; end; |
Re: Mausrad mit Label, Scrollbar, etc. benutzen
Hai kurtm1,
was häst Du denn von diesem Lösungsansatz?:
Delphi-Quellcode:
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: integer; MousePos: TPoint; var Handled: boolean); const DeltaDiv = 20; var ControlOnMouse: TControl; begin ControlOnMouse := ControlAtPos(ScreenToClient(MousePos), False, True); if (ControlOnMouse is TScrollBar) then // Für alle Scrollbars begin with (ControlOnMouse as TScrollBar) do begin Position := Position - (WheelDelta div DeltaDiv); end; end; if (ControlOnMouse = Label1) then // Nur für Label1 begin with (ControlOnMouse as TLabel) do begin Label1.Caption := IntToStr(StrToInt(Label1.Caption) + WheelDelta); end; end; end; |
Re: Mausrad mit Label, Scrollbar, etc. benutzen
hmm sieht auch gut aus und funzt auch problemlos
kürzer ist es auch noch perfekt :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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-2025 by Thomas Breitkreuz