リスト ビューに似ていますが、軽量なカスタム リスト コントロールを作成しています。プロパティItemWidth
とItemHeight
そのアイテムごとにあり、アイテムはTOwnedCollection
. どの商品も同じサイズです。また、各項目をどのくらい離して配置するかを指定するMargins
およびのプロパティもあります。ItemSpacing
問題は、各項目の位置を計算して、現在の制御空間に最適に収まるようにするときです。コントロールには垂直スクロールのみがあり、水平スクロールはありません。したがって、アイテムがリストに収まらない場合を認識して、次の行に移動する必要があります。
これをさらに難しくするには、マウス イベントを処理するために、特定のポイントが項目の四角形領域内にあるかどうかを識別できる必要もあります。これを解決するために、各項目に、その項目の領域をコントロールにGetRect
返す関数を配置することにしました。Rect
しかし、この関数にこれを計算させるにはどうすればよいでしょうか?
この関数の 2 つの主な実装はPaint
、コントロールにあります。
for X := 0 to FItems.Count - 1 do begin
Canvas.Rectangle(FItems[X].GetRect);
end;
ポイントがこのアイテムのエリア内にあるかどうかを識別する場合:
for X := 0 to FItems.Count - 1 do begin
R:= FItems[X].GetRect;
Result := (P.X > R.Left) and (P.X < R.Right) and (P.Y > R.Top) and (P.Y < R.Bottom);
end;