![]() |
Drag&Drop startet beim Doppelklick automatisch
Ich hab bisher wenig mit D&D gearbeitet, deshalb finde ich den Fehler nicht. Hier ein Beispiel mit zwei Panelen, die gegenseitig die Caption wechseln. Es funktioniert. Das Problem ist aber, dass wenn ich eines der Panele doppelklicke, ebenfalls der Drag beginnt. Sollte eigentlich nicht. Danach muss ich den Vorgang erst mit ESC wieder abbrechen.
Natürlich greifen beide Panele auf die gleiche Prozeduren.
Delphi-Quellcode:
procedure TForm1.Panel1DblClick(Sender: TObject);
begin ShowMessage('Das war ein Doppelklick'); end; procedure PositionWechseln(Sender, Source: TObject); var Temp: String; begin if (Sender is TPanel) and (Source is TPanel) then begin Temp := TPanel(Sender).Caption; TPanel(Sender).Caption := TPanel(Source).Caption; TPanel(Source).Caption := Temp; end; end; procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer); var TempName: String; begin if (Source is TPanel) then PositionWechseln(Sender, Source); end; procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if (Source is TPanel) then Accept := True; end; procedure TForm1.Panel1EndDrag(Sender, Target: TObject; X, Y: Integer); begin if (Target = nil) then MessageBeep(0); // Wenn Drag'n'Drop-Operation nicht erfolgreich abeschlossen wurde... end; procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Sender is TPanel) then if Button = mbLeft then TPanel(Sender).BeginDrag(False, 10); end; |
AW: Drag&Drop startet beim Doppelklick automatisch
Auch bei einem Doppelklick drückst du die Maustaste logischerweise, also landest du auch im MouseDown. Zu dem Zeitpunkt kann Windows ja auch noch nicht wissen, ob du erneut klicken wirst.
Du kannst im MouseUp an der gleichen Stelle den Dragvorgang aber direkt wieder abbrechen oder du stellst DragMode auf automatisch, dann sollte das automatisch richtig laufen. |
AW: Drag&Drop startet beim Doppelklick automatisch
Ich kann das hier nicht reproduzieren. Mit den übergebenen Parametern bei BeginDrag ist das auch zu erwarten. Es muss also noch etwas anderes sein. Kannst du ein Beispielprojekt hier anhängen, damit wir mehr Informationen kriegen?
|
AW: Drag&Drop startet beim Doppelklick automatisch
Benutze Lieber das Event MouseMove.
So mache Ich das jedenfalls.
Delphi-Quellcode:
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin if Shift = [ssLeft] then begin BeginDrag(True, 10); end; end; |
AW: Drag&Drop startet beim Doppelklick automatisch
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: Drag&Drop startet beim Doppelklick automatisch
Zitat:
Danke. |
AW: Drag&Drop startet beim Doppelklick automatisch
So sollte es auch gehen:
Delphi-Quellcode:
Bei einem Doppelklick werden ja auch zwei MouseDown Events ausgelöst. Den zweiten erkennt man mit
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin { bei DblClick enthält Shift noch ein ssDouble, aber auch alles andere außer ssLeft soll ja vermutlich kein Drag auslösen } if (Sender is TPanel) and (Button = TMouseButton.mbLeft) and (Shift = [ssLeft]) then TPanel(Sender).BeginDrag(False, 10); end;
Delphi-Quellcode:
.
ssDouble in Shift
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 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