![]() |
gedrückte Maustaste soll sich wie Entertaste verhalten
Hi,
ich habe eine kleine ListBox mit Einträgen jetzt möchte ich gerne das der Anwender die Reihenfolge der Eintrage verändern kann, also Multiselect an, und mit zwei Buttons soll der Anwender die markierten Einträge nach unten bzw. nach oben schieben können. Alles kein Problem, per OnClick Ereignis geht das ruckzuck. Halte ich jedoch die Maustaste fest so werden die Einträge nur um 1 verschoben, halte ich die Entertaste fest so wird das Ereignis dauernd ausgelöst und dieses würde ich gern auch auf die Maustaste legen können. Ziel: Einen oder mehre Einträge markieren und mit gedrückter Maustaste die Einträge verschieben. Irgendwie hab ich grade einen Knoten drin das ich nicht drauf komme wie ich das lösen soll. |
Re: gedrückte Maustaste soll sich wie Entertaste verhalten
hi,
im OnMouseOver vom Button (falls es das gibt) kannst du abfragen, ob die maus gedrückt ist. Problem ist dabei aber, glaub ich, dass das OnMouseOver-Event nur 1 einziges Mal ausgelöst wird. rollstuhlfahrer |
Re: gedrückte Maustaste soll sich wie Entertaste verhalten
Zitat:
es sollte doch möglich sein dem irgendwie bei zu bringen, das solange ich den Button drücke (Maustaste gedrückt halten) das Ereignis auslöst, mehrfach. Ich bin auch auf der Suche nach einer Lösung ich weiß grade nicht mals genau wonach ich suchen muß. |
Re: gedrückte Maustaste soll sich wie Entertaste verhalten
Vielleicht ein Ansatz?: Bei MouseDown auf den Button einen Timer aktivieren, die gewünschte Funktion aufruft, bis er in MouseUp gestoppt wird.
|
Re: gedrückte Maustaste soll sich wie Entertaste verhalten
In die richtung habe ich auch schon gedacht, aber das wäre doch eher arg viel aufwand.
Was ich mich ja frage wieso klappt das ganze bei gedrückter Entertaste und könnte man nicht einfach dieses simulieren. |
Re: gedrückte Maustaste soll sich wie Entertaste verhalten
Zitat:
Zitat:
Zitat:
|
Re: gedrückte Maustaste soll sich wie Entertaste verhalten
Das ist doch nicht viel Aufwand :roll:
Timer auf die Form, Interval auf 150 Enabled = False Gewünschten Code ins OnTimer-Ereignis Ins OnMouseDown des Buttons: Timer1.Enabled := True; Ins OnMouseUp: Timer1.Enabled := False; PS.: Oh, doch mehr Aufwand als gedacht: Man muss einen Timer auf die Form ziehen und 2 Zeilen Code schreiben :mrgreen: |
Re: gedrückte Maustaste soll sich wie Entertaste verhalten
Schau doch einfach mal, wie TSpinEdit bzw. TSpinButton das machen ;)
|
Re: gedrückte Maustaste soll sich wie Entertaste verhalten
Ok Ok, ich hab mich überreden lassen und es doch mal mit einem Timer versucht.
Sobald ich auf den Button klicke und die Maustaste gedrückt halte wird der Timer aktiviert und alle 100ms wird ein Zähler erhöht, lasse ich die Taste los so wird der Timer deaktiviert. Dies ist jetzt nur der Test, ich muß das ganze noch so umbauen das ich Items rauf bzw. runter verschieben kann, aber das sollte ich noch hinbekommen ;-)
Delphi-Quellcode:
Geht doch einfachher als ich zu Anfang gedacht habe, vielen dank für die Tipps und Anregungen.
procedure TfrmMain.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin TimerMoveItems.Enabled := True; end; procedure TfrmMain.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin TimerMoveItems.Enabled := False; end; procedure TfrmMain.TimerMoveItemsTimer(Sender: TObject); begin Inc(Blupp); Label1.Caption := IntToStr(Blupp); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 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