2017-01-29 15 views
-1

Я хочу добавить некоторые строки в ListView, но я не знаю, как долго может быть строка.Проблемы с добавлением списка ListView и SubItems

Например:

mystring := 'a'+|+'b'+|+ 'c'+|+ 'd'+|+ 'e'+|+ 'f'+|+ ....... '1000 of mystr'; 

После того как я взрываюсь строка, у меня есть:

'a' 
'b' 
'c' 
. 
. 
. 
'1000ofmystr' 

Я хочу, чтобы добавить новый элемент в ListView, где 'A' является Caption и «B 'и' C 'являются SubItems.

Затем добавьте новый элемент, где «D» - это надпись, а «E» и «F» - это элементы SubItems.

И продолжайте, как это, для всей строки, даже если у нее есть миллионы подстрок в взорванных данных.

Каждые три подстроки - это один элемент ListView, пока строка не будет исчерпана.

Я не знаю, как это сделать, поэтому я прошу здесь. То, что я хочу сделать, это нравится эта картина:

image

мне нужно что-то вроде этого кода:

ListView1.Items.Add; 
ListView1.Caption:= StrArr[0]; // id of the book number one 
SubItems.Add(StrArr[1]); //its title 
SubItems.Add(StrArr[2]); // its editor 
ListView1.Items.Add; 
ListView1.Caption:= StrArr[3]; // id of the book number two 
SubItems.Add(StrArr[4]);  //its title 
SubItems.Add(StrArr[5]); // its editor 
ListView1.Items.Add; 
ListView1.Caption:= StrArr[6]; // id of the book number three 
// and so on for other books for an unknown number of strings 

Пожалуйста, покажите мне правильный код, чтобы сделать это.

+0

Так идти вперед и написать код. Что вас останавливает. –

+0

ОК, я не знаю, как это сделать, поэтому я спрашиваю, что я хочу сделать на картинке https://s24.postimg.org/cry3s6hs5/Captussssssssre.png, затем ListView1.Items.Add; ListView1.Caption: = StrArr [0]; id книги номер один SubItems.Add (StrArr [1]); // его заголовок SubItems.Add (StrArr [2]); // его редактор SubItems.Add (StrArr [3]); id номера книги буксировка SubItems.Add (StrArr [4]); // его заголовок SubItems.Add (StrArr [5]); // его редактор SubItems.Add (StrArr [6]); /// и другие для других книг ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ SubItems.Add (StrArr [100000000]); – Mario

+0

Это не то, для чего мы здесь. Прочитайте [help] –

ответ

0

Используйте цикл, например:

var 
    Item: TListItem: 
    i: Item; 

for i := 0 to NumberOfStrings-1 do 
begin 
    if (i mod 3) = 0 then 
    begin 
    Item := ListView1.Items.Add; 
    Item.Caption := StrArr[i]; 
    end else 
    Item.SubItems.Add(StrArr[i]); 
end; 

не отметить, однако, что отображение тысячи/миллионы элементов в TListView работает лучше, если вы используете его в виртуальном режиме вместо (когда его свойство OwnerData является установлено значение true). Установите свойство Items.Count числу элементов для отображения, а затем использовать его OnData событие, чтобы обеспечить строки только для тех элементов, которые он просит, например:

var 
    NewCount: Integer; 

NewCount := NumberOfStrings div 3; 
if (NumberOfStrings mod 3) <> 0 then 
    Inc(NewCount); 
ListView1.Items.Count := NewCount; 

... 

procedure TMyForm.ListView1Data(Sender: TObject; Item: TListItem); 
var 
    Index: Integer; 
begin 
    Index := Item.Index * 3; 
    Item.Caption := StrArr[Index]; 
    for Index := Index+1 to Index+2 do 
    begin 
    if Index < NumberOfStrings then 
     Item.SubItems.Add(StrArr[Index]) 
    else 
     Break; 
    end; 
end; 
+0

СПАСИБО ВАМ ОЧЕНЬ. ВАШ ОТВЕТ ОЧЕНЬ ОЧЕНЬ ПОМОЩИ. ПРОБЛЕМА РЕШАЕТ – Mario