2009-04-02 18 views

答えて

1

みましたGamecat提案された解決策の後にして、コンポーネントのサイズを変更した後、再描画イベントを処理する深刻な問題があり、サブ項目は、私はフォントファミリを変更するために扱われ、私は三角形のような文字を使用Wingdingsフォントを使用して文字列なので、その後、私はちょうどそれが見えるようにフォントの色を変更し

  1. :最後は私が2つの回避策を思い付きましたグリフのように。

  2. TDataGridを最初から使用すると、セルの概念がわかります。実際には何も追加する必要はありません。イベントを再描画すると心配です。 (私には役に立たず、既存のコンポーネントにはすでに多くの機能が組み込まれているからです)。

2

TImageListコンポーネントを使用してイメージを保持し、それをlistviewsのSmallImagesプロパティに割り当て、サブアイテムのImageIndexを設定します。

+1

彼は、ツリービューではなく、リストビューについて話しています。リストビューのサブアイテムは他のデータ列を形成し、Windowsリストビューはプライマリ列のアイコンのみを受け入れます。 –

+0

私はちょうど確認するためにそれを試みた。それはDelphi 2007で動作します。 –

+0

あなたの答えをありがとう。 TOndrejはTListViewコンポーネントを使用していると言いますが、Delphi 4でこれを行う必要があるという小さな制約があります。 :) – tecnotalk

5

CustomDrawSubItemイベントを使用できます。

以下の例では、テキストを無視して矩形を描画しています。残念ながら、それは右の列の矩形を取得する手間を少しですが、このアプローチは動作します:

procedure TForm.ListViewCustomDrawSubItem(Sender: TCustomListView; 
    Item: TListItem; SubItem: Integer; State: TCustomDrawState; 
    var DefaultDraw: Boolean); 
var 
    r : TRect; 
    i : Integer; 
begin 
    r := Item.DisplayRect(drBounds); 
    for i := 0 to SubItem-1 do begin 
    r.Left := r.Left + ListView.Columns.Items[i].Width; 
    r.Right := r.Left + ListView.Columns.Items[i+1].Width; 
    end; 
    case SubItem of 
    1 : ListView.Canvas.Pen.Color := clRed; 
    else 
    ListView.Canvas.Pen.Color := clBlue; 
    end; 

    ListView.Canvas.Rectangle(r.Left, r.Top, r.Right, r.Bottom); 
    DefaultDraw := False; 
end; 
+0

ありがとう、私は試して、それは部分的に働いた。サブアイテム内に何かを描画することは可能ですが、その後にコンポーネントのサイズ変更または移動(TListView)後に列を描画する際に問題があります。 – tecnotalk

関連する問題