掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TPageControlで選択されようとしているタブは? (ID:19770)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
下記のような感じでいけるのでは無いでしょうか? type TForm1 = class(TForm) PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; TabSheet3: TTabSheet; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private FDefProc: TWndMethod; procedure PgCtrlProc(var Message: TMessage); public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.DFM} uses Commctrl; procedure TForm1.FormCreate(Sender: TObject); begin FDefProc:= PageControl1.WindowProc; PageControl1.WindowProc:= PgCtrlProc; end; procedure TForm1.FormDestroy(Sender: TObject); begin PageControl1.WindowProc:= FDefProc; end; procedure TForm1.PgCtrlProc(var Message: TMessage); const LastKey: DWORD = 0; type PTCKeyDown = ^TTCKeyDown; var I, NextTab: Integer; Pt: TPoint; begin if (Message.Msg = CN_NOTIFY) then with PNMHdr(Message.LParam)^, PageControl1 do case code of TCN_KEYDOWN: LastKey:= PTCKeyDown(Message.LParam)^.wVKey; TCN_SELCHANGING: begin NextTab:= -1; case LastKey of VK_LEFT: for I:= ActivePage.PageIndex - 1 downto 0 do if (Pages[I].TabIndex >= 0) then begin NextTab:= I; Break; end; VK_RIGHT: for I:= ActivePage.PageIndex + 1 to PageCount - 1 do if (Pages[I].TabIndex >= 0) then begin NextTab:= I; Break; end; VK_HOME: for I:= 0 to PageCount - 1 do if (Pages[I].TabIndex >= 0) then begin NextTab:= I; Break; end; VK_END: for I:= PageCount - 1 downto PageCount - 1 do if (Pages[I].TabIndex >= 0) then begin NextTab:= I; Break; end; else GetCursorPos(Pt); Pt:= ScreenToClient(Pt); NextTab:= IndexOfTabAt(Pt.x, Pt.y); end; ShowMessage(Format('NextTabIndex:%d', [NextTab])); end; TCN_SELCHANGE: LastKey:= 0; end; FDefProc(Message); end; end.
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.