5

このスクリーンショットを見てください

代替テキスト http://www.maclife.com/files/u18/Yep3-big.jpg

このような「タグ パネル」の主な機能は次のとおりだと思います。

1) パネル上の各タグはスタンドアロン コントロールであり、クリックすることができます

2) 現在の行に次のタグを表示するのに十分なスペースがない場合の自動行折り返し。

3) 各タグの角丸長方形の境界線は、あると便利な機能です。

Delphi で同様の機能を実装したいのですが、これを行うための既存のコントロールはありますか? そうでない場合、そのようなコントロールを実装する最良の方法は何ですか?

ありがとうございました。

4

3 に答える 3

7

Delphi の最新バージョンを使用している場合は、TFlowPanel とタグに適切なコントロールを使用します。そのためには、単純な TButton または TLinkLabel を使用する必要があります。

于 2009-10-12T05:53:38.147 に答える
3

クリック可能な各タグは、必ずしも独自のコントロールである必要はありません。クリックされたことを検出できる領域である必要があります。

各エリアをWindows リージョンとして表すとします。関数を使用して、テキストに基づいてそれぞれの幅を把握できTCanvas.TextExtentます。次に、のような関数でリージョンを作成しますCreateRectRgn。角が丸い場合は、CreateRoundRectRgn代わりに試してください。関数を使用して、各領域のマウス イベントをテストできPtInRegionます。でそれらの周りに境界線を描くことができますFrameRgn。最後の障害は、すべてが収まるように画面に描画することです。リージョンを作成していて、その幅がわかっているので、スペースがなくなるまでタグを行に割り当ててから、次の行を開始します。

于 2009-10-12T05:41:21.730 に答える
1

Delphi 7 でのカスタム アラインメントには 2 つの解決策があります。TCustomPanel から派生させて独自のフローパネルを作成し、AlignControls( ) メソッドをオーバーライドするか、アラインメントを alCustom に設定して OnAlignPosition イベントを処理することができます。

TCustomPanel-derivative オプションを選択したと思います。Delphi 2007 形式の TFlowPanel はそのオプションを使用します。ただし、自分で試したことはありません...

于 2009-10-12T10:44:51.813 に答える