У управляющего элемента TListBox, в библиотеке VCL, есть возможность, работать в виртуальном режиме ( Style = lbVirtual ), когда данные, для элементов списка, поставляет метод, связанный с событием OnData:
Спойлер
Unit main;
Interface
Uses
System.Classes,
Vcl.Forms,
Vcl.Controls,
Vcl.StdCtrls;
Type
TfmMain = class(TForm)
lbItems: TListBox;
procedure lbItemsData(Control: TWinControl; Index: Integer; var Data : string);
procedure FormShow(Sender: TObject);
public
constructor Create(AOwner : TComponent); override;
end;
Var
fmMain : TfmMain;
Implementation
Uses
System.SysUtils;
{$R *.dfm}
Const
MaxLines = 65536;
{--------------------------------------------------------------------------}
constructor TfmMain.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
lbItems.Count := MaxLines;
end;
{--------------------------------------------------------------------------}
procedure TfmMain.FormShow(Sender: TObject);
begin
lbItems.ItemIndex := MaxLines - 1;
end;
{--------------------------------------------------------------------------}
procedure TfmMain.lbItemsData( Control : TWinControl;
Index : Integer;
var Data : string);
begin
Data := 'Item ' + IntToStr(Index);
end;
End.
Есть ли что-нибудь похожее в FireMonkey (FMX) ?
Или придется для каждого элемента списка создавать объект класса TListBoxItem ?
Попытка создать, таким образом, ListBox на 65536 элементов, приводит к диким расходам ОП - 248 MB:
Спойлер
Const
MaxLines = 65536;
procedure TfmMain.btAddItemsClick(Sender: TObject);
var
I : Integer;
M : TListBoxItem;
T0, T1 : TDateTime;
begin
T0 := Now;
lbItems.BeginUpdate;
try
for I := 0 to MaxLines - 1 do
begin
M := TListBoxItem.Create(nil);
M.Parent := lbItems;
M.Text := 'Item ' + IntToStr(I);
end;
finally
lbItems.EndUpdate;
end;
T1 := Now;
edTime.Text := IntToStr(SecondsBetween(T0, T1));
end;
Вопрос
Billy Bones
У управляющего элемента TListBox, в библиотеке VCL, есть возможность, работать в виртуальном режиме ( Style = lbVirtual ), когда данные, для элементов списка, поставляет метод, связанный с событием OnData:
Есть ли что-нибудь похожее в FireMonkey (FMX) ?
Или придется для каждого элемента списка создавать объект класса TListBoxItem ?
Попытка создать, таким образом, ListBox на 65536 элементов, приводит к диким расходам ОП - 248 MB:
Ссылка на комментарий
5 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.