掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ListViewのColumns[0].Alignmentがうまく働かない (ID:32330)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
この件で、OwnerDrawで解決すべく、以下のように記述しました。 ですが、ここでいくつか問題が出ました。原因についてご指摘いただける と幸いです。 なお、前提条件として、ListViewのスタイルはvsReportで、Font を9ポイントのMSゴシックにしています。 (1)発生した問題 ・選択行のみ、フォントの色をclHighlightTextにしたかったが、 変更できない。 ・選択行のみ、フォントが9ポイントのMSゴシックになっていない。 (見た感じでは11ポイントくらいのMSPゴシックになっている様子。) ・ヘッダー部分をダブルクリックして、Columnの幅を変更したとき、 再描画がされず、表示が変になる。(特にこれに一番苦慮しています。) (2)実際に記述したコード(DrawItemイベントの内容) procedure TMTEMain.ListView1DrawItem(Sender: TCustomListView; Item: TListItem; Rect: TRect; State: TOwnerDrawState); var R0, R1, R2, R3, R4: TRect; H: HDC; Str: String; begin R0 := Item.DisplayRect(drBounds); // 行全体 R1 := R0; // R1 は Colmuns[0]の位置 R1.Right := R1.Left + ListView1.Column[0].Width; R2 := R0; // R2 は Colmuns[1]の位置 R2.Left := R1.Right; R2.Right := R2.Left + ListView1.Column[1].Width; R3 := R0; // R3 は Colmuns[2]の位置 R3.Left := R2.Right; R3.Right := R3.Left + ListView1.Column[2].Width; H := ListView1.Canvas.Handle; if Item.Selected then begin ListView1.Canvas.Font.Color := clHighlightText; ListView1.Canvas.Brush.Color := clHighlight; end else begin ListView1.Canvas.Font.Color := clWindowText; ListView1.Canvas.Brush.Color := clWindow; end; ListView1.Canvas.FillRect(R0); DrawText(H, PChar(Item.Caption), Length(Item.Caption), R1, DT_RIGHT or DT_VCENTER or DT_END_ELLIPSIS); DrawText(H, PChar(Item.SubItems[0]), Length(Item.SubItems[0]), R2, DT_RIGHT or DT_VCENTER or DT_END_ELLIPSIS); DrawText(H, PChar(Item.SubItems[1]), Length(Item.SubItems[1]), R3, DT_RIGHT or DT_VCENTER or DT_END_ELLIPSIS); if Item.Selected then DrawFocusRect(H, R0); // 点線の描画 end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.