2009-10-12 18 views
5

私はこれらは、このような「タグパネル」の主な機能だと思います。このスクリーンショットDelphiで 'タグパネル'コントロールを実装していますか?

alt text http://www.maclife.com/files/u18/Yep3-big.jpg

を見てください:

1)パネル上の各タグは、スタンドアロンのコントロールと缶ですクリックしてください

2)現在の行に次のタグを表示するための十分な領域がない場合の自動改行。

3)各タグの丸い角の四角形の枠線は、使いやすい機能です。

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

ありがとうございます。

+0

このような「タグパネル」の別の例:http://www.macgenealogy.org/ images/screen/yep-list.jpg 右側のタグセクションを確認できます。 –

答えて

3

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

各エリアをWindows regionとして表すとします。 TCanvas.TextExtent機能を使用して、それぞれのテキストに基づいてどれぐらいの幅にする必要があるかを調べることができます。次に、CreateRectRgnのような機能を持つ領域を作成します。角が丸い場合は、CreateRoundRectRgnを試してください。 PtInRegion機能を使用して、各地域のマウスイベントをテストできます。 FrameRgnで境界線を塗りつぶすことができます。最後の障害は、それらがすべてフィットするように画面に描画することです。リージョンを作成していて、その幅を知っているので、空白がなくなるまでタグを行に割り当ててから、次の行を開始します。

+0

ヒントRobに感謝します。これらのタグをドラッグアンドドロップで再配置できるようにするにはどうすればよいですか? たとえば、2行目の2番目のタグを1行目の先頭にドラッグします。 ありがとうございます。 –

+0

ドラッグダウンとマウス移動イベントを検出してドラッグとクリックを区別し、 'SetCapture'を呼び出して「ドラッグ」モードに入ります。マウスアップイベントを待つ間にマウス移動イベントを処理します。その時点でタグを並べ替えることができます。あなたが何かについて具体的な質問がある場合は、1つの答えで6つの異なる問題をカバーすることなく人々が反応できる新しい*質問を開始してください。 –

7

最新のDelphiのバージョンを使用している場合は、TFlowPanelとタグの適切なコントロールを使用してください。シンプルなTButtonやTLinkLabelはそのために必要です。

+0

残念なことにUweさん、ありがとうございます、私はD7を使用します。現在、アップグレードはオプションではありません。 –

1

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

私はTCustomPanel派生オプションに行ったと思います。 TFlowPanelの形式でDelphi 2007はそのオプションを使用していますが、私は自分自身を試したことがないことを認めなければなりません...

+0

ヒントありがとう、Vegar :) –

関連する問題