タブコントロールのタブ部分をマウスでドラッグ&ドロップすることで
ページ位置を並び換えたいのですが可能でしょうか?
オブジェクトインスペクタ上のプロパティ、イベントとHELPで確認して
見ましたがドロップするときのTabIndexを得ることが出来ませんでした。
よろしくお願いします。m(__)m
これでどうでしょうか?
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=17#0241.txt
レスありがとうございます。
早速確認してテストしてみたのですが、TCM_GETITEMRECTが、
[エラー] Unit1.pas(57): 未定義の識別子 : 'TCM_GETITEMRECT'
とでてしまいました。
使用したコンパイラはDELPHI6.0です。
#include <windows.h>
などのincludeが必要なのでしょうか?
必要だとすればDELPHIではどういった記述になるのでしょうか?
実はDELPHIはあまり詳しくなくてメインは
C++Builder6.0を使っております。φ(..;)
引き続き試して見たいと思います。
usesにCommCtrlを追加してください。
ついでに乗っからせてください。
べたな処理のため,使うことは断念していたのですが,だいぶ前に挿入
先に黒い縦線を引っ張るサンプルを作っていました(IDEのようなやつで
す。)。参考までに載せてみます。
知識のある方は,まずい点等がありましたらご指摘くださると幸いです。
var
AIndex: Integer;
procedure TForm1.TabControl1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
TabControl1.BeginDrag(False);
end;
procedure TForm1.TabControl1DragDrop(Sender, Source: TObject; X,
Y: Integer);
var
i: Integer;
begin
if not (Sender is TTabControl) then exit;
i := TabControl1.IndexOfTabAt(X, Y);
TabControl1.Tabs.Move(TabControl1.TabIndex, i);
end;
procedure TForm1.TabControl1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
var
Index, i: Integer;
R: TRect;
begin
if Sender is TTabControl then
Accept := True;
Index := TabControl1.TabIndex;
i := TabControl1.IndexOfTabAt(X, Y);
R := TabControl1.TabRect(i);
if AIndex <> i then begin
AIndex := i;
//↓これを何とかしたかった。
TabControl1.Repaint;
end;
if i = Index then exit;
TabControl1.Canvas.Brush.Color := clBlack;
if Index < AIndex then begin
R.Right := R.Right + 1;
R.Left := R.Right - 4;
TabControl1.Canvas.FillRect(R);
end else begin
R.Left := R.Left - 1;
R.Right := R.Left + 4;
TabControl1.Canvas.FillRect(R);
end;
end;
procedure TForm1.TabControl1EndDrag(Sender, Target: TObject; X,
Y: Integer);
begin
TabControl1.Repaint;
end;
かみづさん、まことさんレスありがとうございます。
無事コンパイル出来ました。
問題なく動作することも確認しました。(^O^)v
ツイート | ![]() |