5

特定のページが表示されない TPageControl を使用しています。

これにより、TabIndex プロパティと ActivePageIndex プロパティの通常の 1:1 マッピングが破られます。

ほとんどの場合、ActivePageIndex (または ActivePage 自体) を使用して現在のページを取得できますが、特定のタブ インデックスに関連付けられているページを特定する必要がある動的なツールヒント ヒントが必要です。

pageControl.IndexOfTabAt(X, Y) を呼び出すと、タブ インデックスが返されますが、一部のページ タブが表示されないため、それを Pages[] 配列のインデックスとして直接使用することはできません。

表示されているページを無視して、明示的にページを反復処理することはできますが、VCL には既にこれを行う何かがあるはずです...?

4

3 に答える 3

2

TPageControl (ComCtrls.pas) のソースを見ると、プライベート メソッドがあります。

function TPageControl.PageIndexFromTabIndex(TabIndex: Integer): Integer;

それはあなたが望むことをします。しかし、それを呼び出すことはできません (D2007) ので、(残念ながら) コードをコピーする必要があります。

于 2010-01-26T13:22:22.983 に答える
-1

これは、ページのドラッグ アンド ドロップを扱った古い記事です。(X, Y) 位置からページのインデックスを取得するためのロジックがいくつかあります。おそらくそれを使用できます。このようなもの(テストされていません):

function TMyPageControl.GetPageIndexAtPos(X, Y: Integer) : Integer;
const
   TCM_GETITEMRECT = $130A;
var
   TabRect: TRect;
   j: Integer;    
begin
   for j := 0 to PageCount - 1 do
   begin
     Perform(TCM_GETITEMRECT, j, LParam(@TabRect)) ;
     if PtInRect(TabRect, Point(X, Y)) then
     begin
       Result := j;
       exit;
     end;
   end;
   Result := -1;
end;
于 2010-01-27T13:59:36.060 に答える