Есть острая необходимость изменить свойство VisibleRowCount у ListView. Обясняю для чего:
Есть ListView у которого клиентская область сдвинута вниз — таким образом она стала меньше. Проблема в том, что количество отображаемых элементов он считает так как если бы я ничего не делал с клиентской областью и получаем что несколько элементов отображаются как бы ниже клиентской области и увидеть их нельзя, однако курсором по ним можно гулять и они реагируют на события. Покопавшись пришел к неутешительному выводу, что значение VisibleRowCount осталось неизменным. Посоветуйте как побороть проблему и показать скрывающиеся элементы списка.
Вот пример:
type
TMyListView = class(TListView)
procedure WMNCCalcSize(var msg: TWMNCCalcSize); message WM_NCCalcSize;
end;
procedure TmyListView.WMNCCalcSize(var msg: TWMNCCalcSize);
begin
// Выделение не клиентской области под заголовок
if msg.CalcValidRects then
with msg.CalcSize_Params^.rgrc[0] do
top := top + 20;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
vl: TMyListView;
i : longint;
begin
vl := TMyListView.Create(Self);
vl.Parent := Self;
with vl do
begin
Left := 16;
Top := 8;
RowSelect := True;
Width := 401;
Height := 233;
ViewStyle := vsReport;
end;
with vl.Columns.Add do
Caption := 'Проба';
for i := 0 to 1255 do
begin
with vl.Items.Add do
Caption := IntToStr(i);
end;
end;