Zitat von
TonyR:
Du stellst Fragen ...
Kannst du das "Problem" nicht einfach umgehen?
z.B. indem du zwei Buttons auf dein Form wirfst, die das nach rechts bzw. links Verschieben der Pages machen?
Oder versteh ich dich jetzt falsch? (Ich habs so verstanden, dass du die einzelnen Pages per D&D "umordnen" möchtest)
Richtig verstanden.
Nur frage ich mich, warum Delphi "Dragging" auf True setzt, wenn das Dragsymbol gar nicht erscheint.
Ich versuche gerade das gesamte Zeug selber zu programmieren.
Also bei MouseDown Start des Draggingtests.
Bei MouseMove Test ob Dragging einschalten.
Bei MouseUp Test ob man nicht draggen will.
Allerdings scheint er da ein bisschen verrückt zu spinnen
Ich finde es nur ungeschickt folgendes zu Sagen:
Zitat von
Die Hilfe:
Hat Immediate den Wert false, wird die Form des Mauszeigers nicht geändert und das Ziehen erst begonnen, wenn der Benutzer den Mauszeiger um die in Threshold angegebene Pixelanzahl verschiebt. Ist Threshold kleiner als 0, wird der Wert aus der Eigenschaft DragThreshold der globalen Variable Mouse gelesen.
Allerdings setzt er alles sofort auf Dragging, selbst wenn man es mit "false" aufruft:
<Pagecontrol>.BeginDrag(false);
Also dort ruft er sofort "OnStartDrag" auf, führt "OnMouseUp" aus und setzt "Dragging" auf "true", selbst wenn die Maus nicht weit genug entfernt wurde.
MfG
xZise
[edit]Jetzt habe ich endlich eine Idioten sichere Lösung
Hoffe ich jedenfalls:
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);
end;
end;
procedure TfrmEnterpriseFile.pcTabsMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if ((Abs(moveTab.start.X - X) >= 3) or (Abs(moveTab.start.Y - Y) >= 3)) and (moveTab.mode = mmBeforeDrag) then
begin
moveTab.mode := mmClicked;
pcTabs.BeginDrag(true);
end;
end;
procedure TfrmEnterpriseFile.pcTabsMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ((Abs(moveTab.start.X - X) < 3) and (Abs(moveTab.start.Y - Y) < 3)) then
begin
pcTabs.EndDrag(false);
moveTab.mode := mmNone;
pcTabs.Repaint;
end;
end;
Das Repaint ist deshalb, weil ich die Tabs nicht sofort verschiebe (ansonsten entstehen u.U. so Flackereffekte), sondern einen Pfeil zeichne.