AGB  ·  Datenschutz  ·  Impressum  







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

PageControl - Drag and Drop ist problematisch

Ein Thema von xZise · begonnen am 4. Okt 2007 · letzter Beitrag vom 30. Okt 2007
Antwort Antwort
Benutzerbild von xZise
xZise

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

PageControl - Drag and Drop ist problematisch

  Alt 4. Okt 2007, 17:54
Hi DP,
ich habe ein kleines Problem mit dem TPageControl.
Auf diesen sind mehrere Tabsheets.
Nun kann man in einen TabSheet ein Objekt aufnehmen, und man soll dann auf die Leite oben gehen.
Und dann sollte er normalerweise auf das aktuell selektierte Tab gehen.
Also schnell eine DragOver Prozedur geschrieben.
Anfangs hat er noch nicht den Tab gewechselt.
Also flugs Dragmode in "dmAutomatic" umgestellt und tada es funktioniert.
Leider habe ich das verboten (absicht) und musste nochmal ansetzen und dann der Schock:
Jedes mal wenn ich den Tab ändere ändert sich das Mausicon ...
Abgesehen davon, dass die OnChange Methode nicht aufgerufen wird.
Dabei habe ich noch nicht "StartDrag" eingebaut!

Nun ist meine Frage, wie man das umsetzt ohne DragMode wieder auf dmNormal (oder so) zu stellen, weil dann ja wieder nichts mehr mit draggen ist xD

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

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

Re: PageControl - Drag and Drop ist problematisch

  Alt 6. Okt 2007, 12:38
Hi,
gibt es keine Lösung für das Problem? Immerhin müsste jeder Programierer mit einer Tabverschiebenfunktion dieses Problem haben!

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

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

Re: PageControl - Drag and Drop ist problematisch

  Alt 30. Okt 2007, 16:42
Hallo ich bin es nochmal.

Dieses Problem besteht weiterhin, und ich weiß nicht, wie man es Lösen kann!

Weil irgendwie verhält sich dass seltsam.
Gibt es den KEINE Möglichkeit herauszufinden, ob er Draggt?
Weil Dragging setzt er schon auf true sobald StartDrag(false) ausführt, was ja "etwas" zu früh ist!

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#4

Re: PageControl - Drag and Drop ist problematisch

  Alt 30. Okt 2007, 17:00
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)
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

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

Re: PageControl - Drag and Drop ist problematisch

  Alt 30. Okt 2007, 21:41
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.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#6

Re: PageControl - Drag and Drop ist problematisch

  Alt 30. Okt 2007, 22:09
Hallo XZise,

wenn ich dich richtig verstanden habe, geht es dir um das Verschieben von Tabs im Control per Drag&Drop. Ich hab das so gelöst. Funzt anstandslos.

Delphi-Quellcode:

// Member der Klasse
private
    DragPage : TTabSheet; // zu verschiebenden Tabscheets (Drag&Drop)
.......

procedure TForm2.PageControl2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var i: integer;
begin
  // Drag & Drop
  i:=PageControl2.IndexOfTabAt(x,y);
  If (Button=mbLeft) then begin
   DragPage:=Pagecontrol2.Pages[i];
   PageControl2.BeginDrag(false);
  end;
end;

procedure TForm2.PageControl2DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  If (Source is TTabSheet) then
    Accept:=true;
end;

procedure TForm2.PageControl2DragDrop(Sender, Source: TObject; X, Y: Integer);
var i:integer;
begin
  i:=PageControl2.IndexOfTabAt(x,y);
  DragPage.PageControl:=PageControl2;
  DragPage.PageIndex:=i;
end;
DragMode ist dmManual.

Das hab ich dann auch noch für ein weiters PageControl. Das Verschieben von Tabs zwischen beiden Controls ist ebenso ohne Probleme möglich.

Gruß oki
42
  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 22:06 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