TListViewで特定の項目に特定のワードが含まれていたときに処理する方法?


Newcomer  2008-11-22 18:31:03  No: 32684

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]の行がダメだということはわかるのですが、
どうすればいいのかわかりません。


Newcomer  2008-11-22 18:33:34  No: 32685

ちなみに特定のワードとは<font color=red>などです。


ちぇっくぽいんと  2008-11-22 19:19:13  No: 32686

えらーを防ぐには...
begin
 if Item.SubItems.Count > 2 then       // これを追加
  if Item.SubItems[2] <> '' then begin
  .......


HOta  2008-11-22 19:28:40  No: 32687

>Item: TListItem
SubItems.Countで項目数を検査すれば?


Newcomer  2008-11-23 03:57:24  No: 32688

ちぇっくぽいんとさん、HOtaさんありがとうございます。
教えていただいたようにしたらエラーが出なくなりました。

ですが、次は特定のワードの処理の方法で詰まりました・・・。

SubItem[2]には'','canceled','<font color=red>canceled</font>'が入るのですが、
項目に入れる前にタグを消してif Item.SubItems[2] <> '' then begin
でやるとfontタグの違いを出せないし、
CutomDrawSubItemの中でタグを消してItem.SubItems[2]に代入してしまうと延々再描画してリストがちらついてしまいます。


igy  2008-11-23 18:29:23  No: 32689

>項目に入れる前にタグを消してif Item.SubItems[2] <> '' then begin
>でやるとfontタグの違いを出せないし、

TListItemのData プロパティに、それらの情報を保持するのは、
どうですか?


ていうか...  2008-11-23 20:57:56  No: 32690

ListViewの項目に HTMLのタグを使ってるのはなぜ?
単に、文字色を変えるための目印なの?
もしそうであって、Item(行)ごとでなく、SubItemごとに別の色を指定したい場合は、
SubItemのObjectsに色を格納する手もあるけど。


Newcomer  2008-11-24 08:27:02  No: 32691

Webのリストから取り込んでるからです。
(my)とかつけたら簡単そうですけどね。

TListItemのDataプロパティは使ったこと無いので調べてみます。

色々ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加