 <p>Instead of <code>TStringGrid</code> use <code>TGrid</code> with <code>TColumn</code> columns. Then use the <code>OnGetValue</code> event to fetch values for display in the grid. This is closest to the <code>VCL</code>s <code>TDrawGrid</code>.</p> <pre><code>procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer; var Value: TValue); begin Value := inttostr(col)+', '+inttostr(row); end; </code></pre> <p>Sample result of grid with 10 mio rows:</p> <p><a href="https://i.stack.imgur.com/NHQK0.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/NHQK0.png" alt="enter image description here"></a></p>