2012-05-03 40 views
4

PageControlに閉じるボタンを実装したいのですが、私はこの質問も読んでいますHow to implement a close button for a TTabsheet of a TPageControl
問題は私が提供したコードを実装する方法を理解できませんUlrichbの答え... TPageControlから新しいコンポーネントの子孫を構築しているかどうか?誰かが特定のコードを書く場所を説明できるのであれば、私は感謝しています!私は私の学校で少しデルファイを知っている一人の先生がいるが、彼は私を助けませんでした..そして、これは愚かな質問である場合私は残念ですが、私はデルファイとプログラミングに新しいです。TPageControlの各Ttabsheetに閉じるボタンを描画します

答えて

4

あなたがリンクしている質問のコードは、新しいコンポーネントを作成しません。代わりに、ページコントロールのイベントを使用してカスタム描画を実装します。具体的にこれらのイベント:

  • OnDrawTab
  • れるonmousedown
  • ONMOUSEMOVE
  • OnMouseLeave
  • onMouseUpの

あなたは、一致するイベントまでのこれらのイベントハンドラを接続するためにDelphiのフォームデザイナを使用する必要があります。コードを動作させる。

このアプローチは、その質問に答えるときは簡単に選択されたかもしれませんが、ページコントロールを持つ多くのフォームを持つアプリケーションには適用できません。そのような状況では、新しいページコントロールコンポーネントを派生させたいと思うだろう。

あなたは、むしろイベントを使用するよりも、あなたは以下のメソッドをオーバーライドする必要があることを行う場合は、次の

  • DrawTab
  • のMouseDown
  • のMouseMove
  • のMouseUp

ほかこれにはOnMouseLeaveの動作を複製する必要があります。それにはメッセージハンドラが必要です。

procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; 
.... 
procedure TMyPageControl.CMMouseLeave(var Message: TMessage); 
begin 
    inherited; 
    if Message.LParam=0 then 
    begin 
    // move OnMouseLeave code here 
    end; 
end; 
+0

デルファイxe2で試してみましょう。大変ありがとうございます。 –

+0

私はまだそれを終わらせることはできません:デイビッドは、DrawTabイベントが使用されていると私に言っていますが、私は例でそれを見つけることができませんでした。私はTFormMain.PageControlCloseButtonDrawTabだけを見つけました。このイベントを実装しようとすると、「宣言されていない識別子ページコントロールクローズボタン」というエラーが発生しています。そのサンプルのソースコード全体をどこから見つけることができますか? –

+0

オブジェクトインスペクタでOnDrawTabなどを検索し、それらのイベントにハンドラを割り当てます。これはイントロのもので、あなたはそれを習得するために戒律を読むべきです。 –

関連する問題