TListViewで特定の項目に特定のワードが含まれていた場合に文字の色を変えるにはどうすればいいのでしょうか?
ここで検索してCustomDrawSubItemを使うところまではわかったのですが、
ListCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
begin
if Item.SubItems[2] <> '' then begin
if SubItem = 3 then begin
Sender.Canvas.Font.Color := clRed;
end;
end;
end;
これを実行するとリストのインデックスが範囲を超えています(2)というエラーが出ます。
Item.SubItems[2]の行がダメだということはわかるのですが、
どうすればいいのかわかりません。
ちなみに特定のワードとは<font color=red>などです。
えらーを防ぐには...
begin
if Item.SubItems.Count > 2 then // これを追加
if Item.SubItems[2] <> '' then begin
.......
>Item: TListItem
SubItems.Countで項目数を検査すれば?
ちぇっくぽいんとさん、HOtaさんありがとうございます。
教えていただいたようにしたらエラーが出なくなりました。
ですが、次は特定のワードの処理の方法で詰まりました・・・。
SubItem[2]には'','canceled','<font color=red>canceled</font>'が入るのですが、
項目に入れる前にタグを消してif Item.SubItems[2] <> '' then begin
でやるとfontタグの違いを出せないし、
CutomDrawSubItemの中でタグを消してItem.SubItems[2]に代入してしまうと延々再描画してリストがちらついてしまいます。
>項目に入れる前にタグを消してif Item.SubItems[2] <> '' then begin
>でやるとfontタグの違いを出せないし、
TListItemのData プロパティに、それらの情報を保持するのは、
どうですか?
ListViewの項目に HTMLのタグを使ってるのはなぜ?
単に、文字色を変えるための目印なの?
もしそうであって、Item(行)ごとでなく、SubItemごとに別の色を指定したい場合は、
SubItemのObjectsに色を格納する手もあるけど。
Webのリストから取り込んでるからです。
(my)とかつけたら簡単そうですけどね。
TListItemのDataプロパティは使ったこと無いので調べてみます。
色々ありがとうございます。
ツイート | ![]() |