Autor Beitrag
bayou
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 88


D6 PE
BeitragVerfasst: So 21.12.08 12:41 
Hallo Leute,

ich habe mit TabControl ein kleines Problem und hoffe Ihr werdet mir helfen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.TabControl1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
var
  iNewPos : Integer;
begin
  with TabControl1 do begin
    iNewPos := IndexOfTabAt(x, y); // ermittle Eintrag unter maus
    if iNewPos = -1 then // kein Eintrag darunter
       iNewPos := FMyFigure.Count - 1// also werde letzter
    FMyFigure.Move(TabIndex, iNewPos); // Neue Position
    Tabs.Move(TabIndex, iNewPos); // Neue Position
    TabIndex := iNewPos;
    Figchanged := true;
    Statchanged := True;
  end;
end;

procedure TForm1.TabControl1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Source = TabControl1; // bist du eintrag von mir
end;


Die Tabs werden beim öffnen des Programmes generiert.
Verschieben geht nur das er sofort die erste Tab selektiert und nicht mehr frei gibt.
Also ich kann keine andere Tab mehr markieren.

Außerdem möchte ich nach dem löschen einer Tab automatisch die erste Tab anzeigen (hab ich leider auch nicht hin bekommen).

Vielen Dank schon mal
bayou Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 88


D6 PE
BeitragVerfasst: So 21.12.08 22:34 
Nach langer Suche habe ich in der Delphi Hilfe unter Mouse action eine Lösung mit OnMouseDown, OnMouseMove, OnMouseUp gefunden.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
  public
    { Public declarations }
    Drawing: Boolean; { Für Tab verschieben OnMouseDown beginnen OnMouseMove verschieben OnMouseUp beenden }
  end;

procedure TForm1.TabControl1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
     Drawing := True;
end;

procedure TForm1.TabControl1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
   if Drawing then begin
   TabControl1.DragMode := dmAutomatic;
   TabControl1DragDrop(Sender, TabControl1.Tabs.Objects[TabControl1.TabIndex], x, y);
   end;
end;

procedure TForm1.TabControl1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
     Drawing := False;  { clear the Drawing flag }
     TabControl1.DragMode := dmManual;
end;

procedure TForm1.TabControl1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
var
  iNewPos : Integer;
begin
  with TabControl1 do begin
    iNewPos := IndexOfTabAt(x, y); // ermittle Eintrag unter maus
    if iNewPos = -1 then // kein Eintrag darunter
       iNewPos := FMySheet.Count - 1// also werde letzter
    FMySheet.Move(TabControl1.TabIndex, iNewPos); // Neue Position
    TabControl1.Tabs.Move(TabControl1.TabIndex, iNewPos); // Neue Position
    TabControl1.TabIndex := iNewPos;
  end;
end;

procedure TForm1.TabControl1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Source = TabControl1; 
end;




Edit:
OK es geht noch nicht ganz. Es wird die Position nicht gehalten und an die TListe meines FMySheet weiter gegeben und gesichert.
Leider doch keine Lösung :(