掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リスト項目の独自描画が何故か時間が掛かる (ID:39810)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
皆さんありがとうございます、早速試してみました。 takeさんの方法から試したのですが、それで一発で解決しました。 大変感謝しています。 以前と比べて非常に高速です。 他のPCと遜色ない速度で動いています。 非常に勉強になりました。 安直に動作を考えずに組んじゃうと、後々大変になるのですね。 torさんのおっしゃる通り、以前のコードでは凄い回数繰り返してました。 カウントして計ったのですが、起動から読み込み完了までの間、1200回前後ループしてました・・・。 電気の無駄遣いもいいとこですね^^; monaaさんのご意見もとても参考になりました。 同じバージョンのWindowsなら何でも一緒、とばかり思い込んでたので、 今回の件は大変参考になりました。 ハードウェアグラフィックアクセラレータの無効の仕方がわからなかったので、 ディスプレイアダプタを無効にしてみましたが、リストの読み込みは遅いままでした。 そして今日は何故かいつも以上に動作が重く、リスト表示完了まで20秒以上・・・。 前日との動作速度の差は一体・・・? ソフトウェアとOSも生ものみたいな物なのですね。 今回は大変勉強になりました。 今後のプログラミングにも、 安直に楽して組もうとせず、今回のお知恵を役立てたいと思います。 皆さんありがとうございましたm(__)m。 以下完成したコードです。 procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var s1,s3:string; 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 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; case swi3 of 1:begin s1 := ListBox1.Items[Index]+ '.y1'; // fileelistbox1のフォルダや拡張子を s3 := ListBox1.Items[Index]+ '.iy11'; // fileelistbox3のフォルダや拡張子を end; 2:begin s1 := ListBox1.Items[Index]+ '.y2'; // fileelistbox1のフォルダや拡張子を s3 := ListBox1.Items[Index]+ '.iy21'; // fileelistbox3のフォルダや拡張子を end; 3:begin s1 := ListBox1.Items[Index]+ '.y3'; // fileelistbox1のフォルダや拡張子を s3 := ListBox1.Items[Index]+ '.iy31'; // fileelistbox3のフォルダや拡張子を end; 4:begin s1 := ListBox1.Items[Index]+ '.n1'; // fileelistbox1のフォルダや拡張子を s3 := ListBox1.Items[Index]+ '.in11'; // fileelistbox3のフォルダや拡張子を end; 5:begin s1 := ListBox1.Items[Index]+ '.n2'; // fileelistbox1のフォルダや拡張子を s3 := ListBox1.Items[Index]+ '.in21'; // fileelistbox3のフォルダや拡張子を end; 6:begin s1 := ListBox1.Items[Index]+ '.n3'; // fileelistbox1のフォルダや拡張子を s3 := ListBox1.Items[Index]+ '.in31'; // fileelistbox3のフォルダや拡張子を end; end; if FileExists(s1) then begin ListBox1.Canvas.Brush.Color := clred; ListBox1.Canvas.Ellipse(rect.Left + 2, rect.Top + 2, rect.Left + 10, rect.Top + 10); end; if FileExists(s3) then begin ListBox1.Canvas.Brush.Color := clblue; ListBox1.Canvas.Ellipse(rect.Left + 2, rect.Top + 10, rect.Left + 10, rect.Top + 20); end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.