XPスタイルの仮想リストビューでちらつきをなくすには?

解決


eka  2006-09-15 13:22:00  No: 23236  IP: 192.*.*.*

Delphi6Personal→Turbo Delphi
manifestファイル使用
OS:WinXP

Delphi6からTurboDelphiに移行しXPスタイルにしてみました。
XPスタイル状態の仮想リストビューの上でマウスを動かすとちらつくのですが、ちらつかせない方法はないでしょうか。

編集 削除
eka  2006-10-13 19:46:08  No: 23237  IP: 192.*.*.*

自己レスです

仮想リストビューでちらついていると思ったのですが、
AdvancedCustomDrawItemで行毎に色を変えていたのが原因でした。
AdvancedCustomDrawItemをしつつ、ちらつかせない方法はあるでしょうか。

またListViewでサムネイル表示も行っているのですが、
CustomDrawItemを行うとちらつくようです。

編集 削除
もにゃ  2006-10-13 22:53:26  No: 23238  IP: 192.*.*.*

仮想リストビューって標準コンポーネントじゃ無いですよね?
どこから入手した何か?
どんなコードを書いて起こる現象か?
それが示されなきゃ答える方は答えようが無いです。

編集 削除
eka  2006-10-13 23:51:03  No: 23239  IP: 192.*.*.*

申し訳ありません

仮想リストビューはこちらを参考に作成しました。
http://homepage3.nifty.com/m-and-i/tips/textlistview.htm

AdvancedCustomDrawItemで行毎に色を変えるという部分は
http://lupin.client.jp/delphi/index.html#9
manifestファイルを使用しない場合は正常です。

サムネイル表示部分については
http://www1.cncm.ne.jp/~ogawate/delphi/samples/thumbnail/menu.html
のHPを参考にさせていただいたものです。
こちらもmanifestファイルを使用しない場合は正常です。

編集 削除
かみづ  2006-10-14 00:21:34  No: 23240  IP: 192.*.*.*

本題ではないですけど、TListViewでもOwenerDataプロパティをtrueにすれば
仮想リストビューになりますよ。

またDoubleBufferedをtrueにしてもちらつきは変わらないでしょうか?

編集 削除
eka  2006-10-14 10:28:09  No: 23241  IP: 192.*.*.*

確かめて見ました。
使い方これで合ってるのかな。

FormCreate時に
Form1.DoubleBuffered:=True;

TListView1.DoubleBufferd:=True;
を試して見ましたが変わりませんでした。

また

private
  procedure WMEraseBkgnd(var Msg:TMessage);message WM_ERASEBKGND;

procedure TForm1.WMEraseBkgnd(var Msg:TMessage);
begin
  msg.Result:=0;
end;

を書いてみましたがこちらも変わらず。

編集 削除
もにゃ  2006-10-14 21:31:45  No: 23242  IP: 192.*.*.*

TExtListViewは既に公開を停止しているようですね。
ちょっと私はお役に立てそうにないので、これで失礼させていただきます。

編集 削除
eka  2006-10-14 23:01:55  No: 23243  IP: 192.*.*.*

TExtListViewは最終的には使用せず、
TListViewのOwnerDataをTrueに仮想リストビューにしていました。

それからTListViewでOnCustomDrawItemイベントとOnDataイベントを使用するとちらつきが発生するようです。
(またAdvancedCustomDrawItemとOnDataを使用した場合もちらつく)

どちらかのイベントを1つしか使用しない場合はちらつきは発生しませんでした。

とりあえずはManifestファイルがある場合はどちらかのイベントしか発生しないようにしようと思います。

編集 削除
かみづ  2006-10-15 22:09:34  No: 23244  IP: 192.*.*.*

BDS2006でXP SP2のXPstyleで試してみました。(manifestはTXPManifest)

OnDataを使用して仮想リストビューにし、OnAdvancedCustomDrawItemで
奇数行の色を変えて試してみましたが、マウスを動かしても特にちらつきませんでした。
スクロール時に多少ちらつきますが、
ListView1.DoubleBufferd:=True;をするとちらつきが抑えられました。

編集 削除
eka  2006-10-16 20:04:01  No: 23245  IP: 192.*.*.*

かみづ様

試していただきありがとうございます。
レスを見てもう一度確認してみたところ、
OnAdvancedCustomDrawItem時  色を変えつつ
ListView1.Item.Caption および  ListView1.Item.SubItems
を中央揃えになるよう書き直しを行っていました。

//中央揃え
DrawText(
Sender.Canvas.Handle,
PCHAR(Item.SubItems[i]),
-1,
Rect,
DT_SINGLELINE or DT_END_ELLIPSIS or DT_VCENTER or DT_NOPREFIX or DT_CENTER);

見た目だけなので、この処理をやめようと思います。

編集 削除