数十の項目と 24 を超える列を持つ動的に作成されたリストビュー コンポーネントがいくつかあります。
onCustomdrawXXX
イベントまたはリストビューのイベントでいくつかのキャンバス プロパティ (brush.color など) を設定するonAdvancedCustomDrawXXX
と、アプリケーションが不安定になり、クラッシュします。
最初に、いくつかの視覚的な不具合が発生し始め (ヘッダーが描画されない、リストビューにアーティファクトが表示される)、アプリが応答しなくなり、クラッシュします。
設計時に作成されたリストビューでも問題を再現できました。
私はこれを読みましたが、コントロールを所有したくありません。
誰でもこれで私を助けてくれますか?
更新:コード
procedure TMainForm.listview1AdvancedCustomDrawItem(
Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
Stage: TCustomDrawStage; var DefaultDraw: Boolean);
begin
FDefaultCanvasColor := clWindow;
if Item.SubItems[1] = 'Test' then begin
FDefaultCanvasColor := $66CCFFFF;
end;
// if i remove this line, everything is OK
(Sender As TCustomListView).Canvas.Brush.Color := FDefaultCanvasColor;
end;
ビジュアルは上に示されています (コントロールが応答しなくなり、コントロールにアーティファクトが表示されます)、クラッシュします (YourApp.exe が標準の Windows エラー メッセージの動作を停止しました)。
2回目の更新
まだ問題を再現できませんでしたが、取り組んでいます。
私は(気が進まないにもかかわらず)コントロールを描画することになりましたが、これは問題なく動作します。
私はまだこの問題を調査し、解決策を思いついたらお知らせします。