AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Drag & Drop mit Tabs

Ein Thema von xZise · begonnen am 22. Okt 2007 · letzter Beitrag vom 18. Mai 2013
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Drag & Drop mit Tabs

  Alt 22. Okt 2007, 10:17
Hi DP
Ich möchte zwei Tabs verschieben, allerdings nicht jedesmal, wenn man draufklickt.
Also ist DragMode := dmManual.
Soweit ist das alles wunderbar
Allerdings versuche ich gerade dem Benutzter anzuzeigen, wohin er gerade dragt (ich zeichne einen hübschen Pfeil ).
Also habe ich folgendes:
Delphi-Quellcode:
procedure TfrmEnterpriseFile.pcTabsMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if (Shift = [ssLeft]) and (Button = mbLeft) then
  begin
    moveTab.mode := mmBeforeDrag;
    moveTab.start := Point(X, Y);
    pcTabs.BeginDrag(false, 3);
  end;
end;
Also, wenn man auf den Tab klickt, dann soll er Drag bereit machen und aktivieren, wenn er mehr als 3 Pixel sich bewegt.
Soweit alles wunderbar
Aber muss ich ja das wieder beenden, wenn die Maus hochgeht Also flugs MouseUp eingebaut:
Delphi-Quellcode:
procedure TfrmEnterpriseFile.pcTabsMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  {...}
  if moveTab.mode <> mmBeforeDrag then
  begin
    pcTabs.EndDrag(false);
    moveTab.mode := mmNone;
    pcTabs.Repaint;
  end else
  begin
    moveTab.mode := mmClicked;
  end;
end;
Wunderbar
Jedenfalls sollte man das meinen.
Nun zur Erklärung: Vorher, als mir das Problem nicht auffiel, habe ich nicht mit "BeforeDrag" gearbeitet.
Also ungefähr so:
Delphi-Quellcode:
procedure TfrmEnterpriseFile.pcTabsMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  {...}
  if moveTab.mode <> mmNone then
  begin
    pcTabs.EndDrag(false);
    moveTab.mode := mmNone;
    pcTabs.Repaint;
  end;
end;
Aber dann hat er alle Drags gecancelt (oder beendet), sobald man draufklickt, weil "BeginDrag" scheint "MouseUp" aufzufrufen

Nun stehe ich vor dem Problem, dass ich gerade überhaupt nicht weiß, wie ich "Drags" von "Tab anklicken" unterschieden soll

Zuerst dachte ich, eigentlich müsste MouseUp zweimal aufgerufen werden. (Weil beim normalen Anklicken/Beenden des Drags, sowieso nocheinmal die Maustaste hochgeht)
Aber das tut es nicht (deshalb auch der Umweg mit "mmBeforeDrag").

So schlimm wäre das ja nicht, würde ich nicht zeichnen:
Delphi-Quellcode:
procedure TfrmEnterpriseFile.pcTabsStartDrag(Sender: TObject;
  var DragObject: TDragObject);
var
  tab : TTabSheet;
begin
  if moveTab.mode = mmClicked then
  begin
    {...}
    DrawTabPosition(moveTab.index); // <!--- hier wird ein Pfeil gezeichnet
  end;
end;
Weil StartDrag komischerweise auf dann aufgerufen wird, wenn gar nicht der Drag begonnen werden sollte. (Also diese 3 Pixel Tolleranz)

Nun, wer noch nicht die Frage erkannt hat:
Wie kann ich erkennen, ob jemand draggen möchte oder einfach nur der Tab angeklickt werden soll.

MfG
xZise

PS: Seltsamerweise, wird MouseUp im komplierenzustand zweimal aufgerufen?!
Aber wenn ich pro MouseUp ein Beep ausgebe, dann Peept er nur einmal (ich habe ein Sleep von 100 ms eingebaut sicherheitshalber).
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#2

AW: Drag & Drop mit Tabs

  Alt 18. Mai 2013, 10:15
Hi,
ich habe dieses alte Thema noch mal ausgegraben.
Ich stehe zur Zeit vor dem selben Problem.
"onStartDrag" wird immer ausgelöst wenn DragMod auf dmManual steht.
auch wenn man Immediate = False und Threshold = 10 sind
"BeginDrag(False, 10)"

Wie löst ihr dieses Problem
(DelphiXE)

THX
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz