掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リスト項目の独自描画が何故か時間が掛かる (ID:39808)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
基本的に、描画処理は描画にだけ専念して、他の余計な処理はしないのがセオリーです。 (リストの項目を選択したりすると、DrawItemは何度も何度も繰り返し呼び出される場合があります) 描画処理の中で他のリストボックスをUpdateしたり、項目を検索したりするのが重いと思われるので、 ファイルの有無を判定したりするのはどこか他でやっておいて、DrawItemではその結果を使って描画するだけにした方が良いのではないでしょうか。 リストボックスの各項目には、Items.Objects[i] という形で任意のデータを保存しておくことができます。 これを使って判定結果を保存するという方法があります。 // 適当なタイミング(ファイルリストを更新した時など)で判定を行なう for i := 0 to ListBox1.Count - 1 do begin // 各ファイルの有無を判定 if ListBox.Items[i]がfilelistbox1にある then judge := 1 else if ListBox.Items[i]がfilelistbox3にある then judge := 3 else judge := 0; // その結果を保存 ListBox1.Items.Objects[i] := TObject(judge); end; ListBox1.Invalidate; // ListBoxの表示を更新する // DrawItemの処理 ... // 判定結果を取り出す judge := Integer(ListBox1.Items.Objects[Index]); // その内容に応じて描画 if judge = 1 then 赤丸を描画 else if judge = 3 then 青丸を描画; ...
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.