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

解決


eka  2006-09-15 22:22:00  No: 23236

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

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


eka  2006-10-14 04:46:08  No: 23237

自己レスです

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

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


もにゃ  2006-10-14 07:53:26  No: 23238

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


eka  2006-10-14 08:51:03  No: 23239

申し訳ありません

仮想リストビューはこちらを参考に作成しました。
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 09:21:34  No: 23240

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

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


eka  2006-10-14 19:28:09  No: 23241

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

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-15 06:31:45  No: 23242

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


eka  2006-10-15 08:01:55  No: 23243

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

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

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

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


かみづ  2006-10-16 07:09:34  No: 23244

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

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


eka  2006-10-17 05:04:01  No: 23245

かみづ様

試していただきありがとうございます。
レスを見てもう一度確認してみたところ、
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);

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


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

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






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