AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Draggen und klicken bei einem Objekt beides ermöglichen

Draggen und klicken bei einem Objekt beides ermöglichen

Ein Thema von BenjaminH · begonnen am 23. Aug 2010 · letzter Beitrag vom 13. Sep 2010
Antwort Antwort
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#1

AW: Draggen und klicken bei einem Objekt beides ermöglichen

  Alt 24. Aug 2010, 09:40
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!
Benjamin
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Draggen und klicken bei einem Objekt beides ermöglichen

  Alt 10. Sep 2010, 17:15
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.
if not TControl(Sender).Dragging then Jetzt habe ich folgendes Problem: BeginDrag ruft Perform(WM_LBUTTONUP, 0, Longint(PointToSmallPoint(P))); auf. Dadurch wird OnMouseUp aufgerufen, obwohl das nicht passiert, wodurch sich mein Objekt nicht so verhält wie ich es will.
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
Benjamin
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Draggen und klicken bei einem Objekt beides ermöglichen

  Alt 11. Sep 2010, 18:56
Hallo Benjamin,

vielleicht kannst du in der Behandlungsroutine für das Ereignis OnMouseMove den gewünschten Effekt erzwingen:
Delphi-Quellcode:
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;
Gruß Hawkeye
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Draggen und klicken bei einem Objekt beides ermöglichen

  Alt 12. Sep 2010, 09:31
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.
Benjamin
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Draggen und klicken bei einem Objekt beides ermöglichen

  Alt 13. Sep 2010, 15:19
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:
if not (Sender as TVisualFile).Selected then
begin
  SelectItem(Sender);
  HandledMouseClick:=True;
end;
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.
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.
Benjamin
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:13 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