掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リスト項目の独自描画が何故か時間が掛かる (ID:39805)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
開発環境は、Vista、XP、 Delphi3Pro&3.1Proです。 予定帳兼日記帳を作りました。 リストボックスに日付を描画しするのですが、 独自描画して文字列を一文字分右にずらして表示して、 テキストがある日付にはその左端に丸を描画します。 実質完成しているのですが、困っている事があります。 ウルトラモバイルノートの富士通Loox U/b50(Vista ATOM160)と、 ミニノートのビクターMP-XP7310(XP SP3 centrino PentiumM1.0Ghz) で最初は開発し、リストの表示も瞬時に描画されます。 しかし、 パナソニック レッツノート CF-W8(Vista centrino2 core2Duo1.40ghz) に移して使うと、 リストの描画が4秒近くと遅く、非常に使いづらいです。 下のコードがそのリスト描画部です。 これを改めて書き直し、効率化しましたが、 半分の2秒になっただけで、依然として遅いです。 色々いじって見たところ、丸を表示するループに時間が掛かっているようです。 何故ロースペックのPCでは高速に表示されるのに、 ハイスペックのPCでは遅くなるのでしょうか? 理由が全く判りません。 レッツノートでメインに使う為に作ったのに、肝心のPCでは全く使い物にならず・・・。困ってます。 どなたかお知恵のある方、どうかお知恵を拝借くださると助かりますm(__)m。 procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var i,i1:integer; begin ListBox1.Canvas.Brush.Color := clwindow; ListBox1.Canvas.FillRect(rect); ListBox1.Canvas.Font.Color := clwindowtext; ListBox1.Canvas.TextOut(rect.Left + 12, rect.Top, ListBox1.Items[index]); if odSelected in State then begin filelistbox1.Update; ListBox1.Canvas.Brush.Color := clyellow; ListBox1.Canvas.Font.Color := clwindowtext; ListBox1.Canvas.FillRect(rect); ListBox1.Canvas.TextOut(rect.Left + 12, rect.Top, ListBox1.Items[index]); end; i := 0; filelistbox1.Update; while filelistbox1.Items.Count > i do begin i1 := ListBox1.Items.IndexOf( changefileext(filelistbox1.Items[i], '')); if index = i1 then begin ListBox1.Canvas.Brush.Color := clred; ListBox1.Canvas.Ellipse(rect.Left + 2, rect.Top + 2, rect.Left + 10, rect.Top + 10); end; i := i + 1; end; i := 0; filelistbox3.Update; while filelistbox3.Items.Count > i do begin i1 := ListBox1.Items.IndexOf( changefileext(filelistbox3.Items[i], '')); if index = i1 then begin ListBox1.Canvas.Brush.Color := clblue; ListBox1.Canvas.Ellipse(rect.Left + 2, rect.Top + 10, rect.Left + 10, rect.Top + 20); end; i := i + 1; end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.