![]() |
Draggen und klicken bei einem Objekt beides ermöglichen
Hi,
ich hab hier ein Objekt, das
Gibts eine möglichkeit sowohl das Draggen, als auch das klicken zu ermöglichen? Vielen Dank, Benjamin |
AW: Draggen und klicken bei einem Objekt beides ermöglichen
Schaue dir mal Object.BeginDrag an.
|
AW: Draggen und klicken bei einem Objekt beides ermöglichen
Und dmManual.... Du musst also das dragging selbst programmieren, wie omata schon erwähnte, mit BeginDrag... EndDrag.
Ich würde auch eine Verzögerung beim Click einbauen, sodaß das dragging erst mit einer kleinen Verzögerung einsetzt. Dann kann man klicken, bevor die dragging-Logik greift. |
AW: Draggen und klicken bei einem Objekt beides ermöglichen
Ich würde das Draggen nicht Zeitverzögert auslösen, sondern von der Mausposition abhängig machen.
Im OnMouseDown die Klickposition speichern und wenn im OnMouseMove (wärend die Maustaste noch gedrückt ist) sich die Maus ein gewisses Stückchen bewegt hat, dann das Dragging starten. |
AW: Draggen und klicken bei einem Objekt beides ermöglichen
Moin auch :hi:
Wenn du im MouseDown mittels BeginDrag(False) startest, muss du erst die Maus ein Stück bewegen, bis der Dragmodus beginn. Stefan |
AW: Draggen und klicken bei einem Objekt beides ermöglichen
Ja, das kommt der Sache schon sehr nahe.
Nur wird jetzt das klicken auch, wenn ich eigentlich nur draggen will ausgelöst. Aber dagegen werde ich vorgehen indem ich entweder dann nur auf Doppelklick reagiere, oder statt OnClick OnMouseUp nehme. Vielen Dank! |
AW: Draggen und klicken bei einem Objekt beides ermöglichen
Ich habs jetzt folgendermaßen probiert:
In OnMouseDown wird BeginDrag(false, DragThreshold) aufgerufen. Statt des normalen OnClick habe ich dafür OnMouseUp reagiert, um entscheiden zu können, ob das Objekt gedraggt wurde, oder nicht.
Delphi-Quellcode:
Jetzt habe ich folgendes Problem: BeginDrag ruft
if not TControl(Sender).Dragging then
Delphi-Quellcode:
auf. Dadurch wird OnMouseUp aufgerufen, obwohl das nicht passiert, wodurch sich mein Objekt nicht so verhält wie ich es will.
Perform(WM_LBUTTONUP, 0, Longint(PointToSmallPoint(P)));
Weiß jemand, wie ich es hinbekomme, dass bei OnMouseDown das Dragging beginnt und bei OnMouseUp der Klick ausgelöst wird - aber nur, wenn der Anwender nicht draggt Vielen Dank, Benjamin |
AW: Draggen und klicken bei einem Objekt beides ermöglichen
Hallo Benjamin,
vielleicht kannst du in der Behandlungsroutine für das Ereignis OnMouseMove den gewünschten Effekt erzwingen:
Delphi-Quellcode:
Gruß Hawkeye
procedure TDemoForm.Panel1MouseMove (Sender: TObject; Shift: TShiftState; X, Y: Integer);
var C: TControl; begin C := Sender as TControl; if (csLButtonDown in C.ControlState) then begin C.ControlState := C.ControlState - [csLButtonDown]; C.BeginDrag (False); end; end; |
AW: Draggen und klicken bei einem Objekt beides ermöglichen
Dann wird leider OnMouseUp nicht mehr aufgerufen.
Irgendwie ist das alles komisch. Z.b. im Windows Explorer ist das Verhalten, das ich will völlig normal. |
AW: Draggen und klicken bei einem Objekt beides ermöglichen
So - jetzt hab ichs.
Als erstes hab ich eine Variable eingeführt: HandledMouseClick. Sie enthält, wie der Name sagt, ob der Klick schon "ausgeführt" wurde. Im OnMouseDown wird geprüft, ob das Item meiner Liste schon markiert ist, wenn nicht, dann wirds erstmal markiert.
Delphi-Quellcode:
Im OnMouseMove wird geprüft, ob die Maus sich weiter als ein bestimmter wert bewegt hat. Wenn ja, dann wird HandledMouseClick auf True gesetzt und BeginDrag ausgeführt. Unabhängig davon, welchen Wert HandledMouseClick davor hatte.
if not (Sender as TVisualFile).Selected then
begin SelectItem(Sender); HandledMouseClick:=True; end; Im OnMouseUp wird wenn HandledMouseClick false ist das Item angewählt.(Also nur, wenn es nicht schon im MouseDown angewählt wurde und kein Dragging stattfand). Danach wird HandledMouseClick wieder auf false zurückgesetzt. Verhält sich so, wie es sich richtig anfühlt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 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