3

DelphiTListViewでは、SubItemImages が左に描画されすぎているため、SubItemImages の誤った水平位置をシフトすることは可能ですか? たとえば、次のようなものです(意図を示すだけの擬似コード):

x := MyListView.Items[i].SubItemImages[2].HorizontalPosition;
MyListView.Items[i].SubItemImages[2].HorizontalPosition := x + 2;

バグを示すこのスクリーンショット:

ここに画像の説明を入力

4

1 に答える 1

3

No.TListItem.SubItemImagesは整数であり、整数には水平方向の位置がありません。

property SubItemImages[Index: Integer]: Integer read GetSubItemImage 
  write SetSubItemImage;

ComCtrlsこれは、VCL ソース コード (この場合は単元) を見るとわかります。関連するコードはTListItem.GetSubItemImage次のとおりです(以下に示す XE3 のコードですが、以前のバージョンの Delphi のコードと同じです)。

function TListItem.GetSubItemImage(Index: Integer): Integer;
begin
  Result := TSubItems(FSubItems).ImageIndex[Index];
end;

MSDN のドキュメントからわかる限り、そのイメージの場所を変更する方法はありません。列は、基になる WindowsListViewコントロールLVCOLUMNに各列の定義のレコード (構造) を送信することによって作成されますが、割り当て可能な位置情報はありません。画像を右揃え ( LVCFMT_BITMAP_ON_RIGHT) に設定するためのフラグがありますが、列内の特定の場所に画像を実際に配置できるようにするフラグは他にありません。

于 2013-02-15T23:02:17.420 に答える