AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TTabControl - Drag and Drop?

Ein Thema von glkgereon · begonnen am 19. Feb 2007 · letzter Beitrag vom 13. Mär 2012
Antwort Antwort
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

TTabControl - Drag and Drop?

  Alt 19. Feb 2007, 21:23
Hi,

Ich versuche gerade einem TTabControl beizubringen die Tabs via Drag&Drop zu vertauschen.
Da die bereits vorhandenen Drag&Drop-Methoden anscheinend nur für das gesamte Control funktionieren, muss ich mir da wohl was eigenes basteln, oder?

Hat irgendwer eine Idee oder eine fertige Komponente wie das gehen könnte?
(Am besten natürlich mit so nem Vorschaumodus dass der User direkt sieht wo es eingefügt werden würde wenn er jetzt losließe usw...)
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: TTabControl - Drag and Drop?

  Alt 19. Feb 2007, 21:31
Hi Gereon,

vielleicht kannst du darauf aufbauen: klick

Gute Nacht
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#3

Re: TTabControl - Drag and Drop?

  Alt 19. Feb 2007, 22:03
Also so wie da geht es leider nicht :-/

Zum einen kennt das TabControl "CancelDrag" erst gar nicht und zum anderen kommt sofort so ein "Stop-Cursor", also mag er das wohl nicht
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#4

Re: TTabControl - Drag and Drop?

  Alt 19. Feb 2007, 22:31
Also nach etwas nachdenken und rumprobieren habe ich das ganze (erstmal) so gelöst:

Delphi-Quellcode:
procedure TForm1.ParentMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  TC.Tag:=TC.IndexOfTabAt(X,Y); //Tab was wir verschieben wollen
  TC.Cursor:=crDrag;
end;

procedure TForm1.ParentMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var Von,Nach,Akt: Integer;
    Temp: TRoom;
begin
  Von:=TC.Tag; //Ursprungsposition
  Nach:=TC.IndexOfTabAt(X,Y); //Dahin
  if (Von<>Nach) and (Von<>-1) and (Nach<>-1) then //Andere Position und beide Positionen gültig
  begin //Move Tab Von Nach
    Temp:=Data[Von]; //Daten hinter dem Formular schieben
    for Akt:=Von to Nach-1 do
      Data[Akt]:=Data[Akt+1];
    Data[Nach]:=Temp;
    TC.Tabs.Move(Von,Nach); //Tab-Beschriftung schieben
  end;
  TC.Cursor:=crDefault;
end;
Das ganze sieht dann zwar nicht sooo spektakulär aus, aber es funktioniert
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: TTabControl - Drag and Drop?

  Alt 20. Feb 2007, 06:22
Guten Morgen,

hier noch die von mir angepasste Version zum Vergleichen:

Delphi-Quellcode:
procedure TDemoForm.TabControlDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  with Sender as TTabControl do
    Accept := (IndexOfTabAt(X, Y) <> TabIndex);
end;

procedure TDemoForm.TabControlDragDrop(Sender, Source: TObject; X,
  Y: Integer);
var
  index: Integer;
begin
  if Sender = Source then
    with Sender as TTAbControl do
    begin
      index := IndexOfTabAt(X, Y);
      Tabs.Exchange(TabIndex, index);
      TabIndex := index;
    end;
end;

procedure TDemoForm.TabControlMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  p: TPoint;
begin
  with Sender as TTabControl, p do
  begin
    p := ScreenToClient(Mouse.CursorPos);
    if IndexOfTabAt(X, Y) > -1 then
      BeginDrag(False);
  end;
end;
Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#6

Re: TTabControl - Drag and Drop?

  Alt 20. Feb 2007, 10:05
Bei dem Code vertauschst du aber die beiden Tabs, oder?

Das versuch ich gleich auch nochmal mit deinen Methoden...


Ich hab wieder diesen Fehler dass der Cursor so ein Stopschild ist (naja, zumindest so ähnlich)...
Auf was müssen denn DragMode und DragKind und so stehen?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: TTabControl - Drag and Drop?

  Alt 20. Feb 2007, 10:36
Hallo Gereon,

nimm statt Exchange() besser Move() - und die Einstellungen müssen die Default-Werte sein.

Viel Spaß
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#8

Re: TTabControl - Drag and Drop?

  Alt 20. Feb 2007, 10:45
Aua -.-

Ich habe aus Versehen OnDockOver statt OnDragOver genommen

Naja, wie genau ich jetzt vertausche oder verschiebe kann ich mir ja nun überlegen.
Vielen danke jedenfalls.
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: TTabControl - Drag and Drop?

  Alt 13. Mär 2012, 23:57
Falls jemand nochmal so etwas sucht, ich habe mich jetzt hieran orientiert: http://www.delphigroups.info/2/5b/310157.html

Den DragMode habe ich auf dmManual und dafür:
Delphi-Quellcode:
procedure TFormPlan.MyTabControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  (Sender as TTabControl).BeginDrag(False, 3);
end;
Ein dynamisches Verschieben (sofort während dem ziehen) habe ich nicht zufriedenstellend hin bekommen.

Das ist so noch nicht perfekt, aber auf jeden Fall ausreichend funktionsfähig.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (14. Mär 2012 um 00:01 Uhr)
  Mit Zitat antworten Zitat
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 13:00 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