タブコントロールのタブをドラッグして並び換えるには?

解決


KEN  2006-12-23 09:31:43  No: 24358

タブコントロールのタブ部分をマウスでドラッグ&ドロップすることで
ページ位置を並び換えたいのですが可能でしょうか?

オブジェクトインスペクタ上のプロパティ、イベントとHELPで確認して
見ましたがドロップするときのTabIndexを得ることが出来ませんでした。
よろしくお願いします。m(__)m


かみづ  2006-12-23 09:55:10  No: 24359

これでどうでしょうか?
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=17#0241.txt


KEN  2006-12-24 08:44:45  No: 24360

レスありがとうございます。
早速確認してテストしてみたのですが、TCM_GETITEMRECTが、

[エラー] Unit1.pas(57): 未定義の識別子 : 'TCM_GETITEMRECT'

とでてしまいました。

使用したコンパイラはDELPHI6.0です。
#include <windows.h>
などのincludeが必要なのでしょうか?
必要だとすればDELPHIではどういった記述になるのでしょうか?
実はDELPHIはあまり詳しくなくてメインは
C++Builder6.0を使っております。φ(..;) 

引き続き試して見たいと思います。


かみづ  2006-12-24 12:22:18  No: 24361

usesにCommCtrlを追加してください。


まこと  2006-12-24 20:09:48  No: 24362

ついでに乗っからせてください。

べたな処理のため,使うことは断念していたのですが,だいぶ前に挿入
先に黒い縦線を引っ張るサンプルを作っていました(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;


KEN  2006-12-26 03:24:35  No: 24363

かみづさん、まことさんレスありがとうございます。
無事コンパイル出来ました。
問題なく動作することも確認しました。(^O^)v


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加