![]() |
PageControl - Drag and Drop ist problematisch
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: :shock: 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 |
Re: PageControl - Drag and Drop ist problematisch
Hi,
gibt es keine Lösung für das Problem? Immerhin müsste jeder Programierer mit einer Tabverschiebenfunktion dieses Problem haben! MfG xZise |
Re: PageControl - Drag and Drop ist problematisch
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 |
Re: PageControl - Drag and Drop ist problematisch
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) |
Re: PageControl - Drag and Drop ist problematisch
Zitat:
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:
Delphi-Quellcode:
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.
<Pagecontrol>.BeginDrag(false);
MfG xZise [edit]Jetzt habe ich endlich eine Idioten sichere Lösung ;) Hoffe ich jedenfalls:
Delphi-Quellcode:
Das Repaint ist deshalb, weil ich die Tabs nicht sofort verschiebe (ansonsten entstehen u.U. so Flackereffekte), sondern einen Pfeil zeichne.
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; |
Re: PageControl - Drag and Drop ist problematisch
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:
DragMode ist dmManual.// 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; 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 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