Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2012, 14:49   #1
Pasha_Sh
Форумчанин
 
Аватар для Pasha_Sh
 
Регистрация: 16.05.2010
Сообщений: 137
По умолчанию ListView

Пробую создать справочник с помощью компонента listview, но возникло две проблемы
1. Кода в поле больше 4 строк, программа начинает ругаться ListIndex out of bounds (4)
2. Не получается добавить список листвью в TStringList, но программа снова начинает ругаться, вот код
Код:
var
x: tstringlist;
t: integer;
begin
x:=tstringlist.Create;
x.Add(inttostr(i));
for t:=0 to i do begin
x.Add(listview1.Items[t].Caption);
x.Add(listview1.Items[t].SubItems[0]);
x.Add(listview1.Items[t].SubItems[1]);
x.Add(listview1.Items[t].SubItems[2]);
x.SaveToFile('base.txt');
И вот полный код программы:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, ComCtrls, StdCtrls, Mask, DBCtrls, XPMan;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    Edit1: TEdit;
    GroupBox5: TGroupBox;
    Edit2: TEdit;
    GroupBox6: TGroupBox;
    Edit3: TEdit;
    Button1: TButton;
    Button2: TButton;
    XPManifest1: TXPManifest;
    Timer1: TTimer;
    listview1: TListView;
    ComboBox1: TComboBox;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure get;
    procedure listview1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  op: string;
  i,n: integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
listview1.AddItem(combobox1.Text, listview1.Columns[i]);
listview1.Items[i].subitems.add(edit1.Text);
listview1.Items[i].subitems.add(edit2.Text);
listview1.Items[i].subitems.add(edit3.Text);
i:=listview1.Items.Count;
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
n:=ListView1.Selected.Index;
listview1.Items[n].Caption:=op;
listview1.Items[n].subitems[0]:=edit1.Text;
listview1.Items[n].subitems[1]:=edit2.Text;
listview1.Items[n].subitems[2]:=edit3.Text;
end;

procedure TForm1.get;
begin
edit1.Text:=listview1.Items[n].SubItems[0];
edit2.Text:=listview1.Items[n].SubItems[1];
edit3.Text:=listview1.Items[n].SubItems[2];
combobox1.Text:=listview1.Items[n].Caption;
end;

procedure TForm1.listview1Click(Sender: TObject);
begin
n:=ListView1.Selected.Index;
get;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
listview1.Items[n].Delete;
i:=i-1;
end;

end.
osu
Pasha_Sh вне форума Ответить с цитированием
Старый 15.05.2012, 14:50   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

цикл должен быть до i-1
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.05.2012, 15:22   #3
Pasha_Sh
Форумчанин
 
Аватар для Pasha_Sh
 
Регистрация: 16.05.2010
Сообщений: 137
По умолчанию

Пепел Феникса, спасибо!
Как насчет с
Цитата:
Кода в поле больше 4 строк, программа начинает ругаться ListIndex out of bounds (4)
?
osu
Pasha_Sh вне форума Ответить с цитированием
Старый 15.05.2012, 15:32   #4
Veronikaa
Пользователь
 
Регистрация: 05.05.2012
Сообщений: 11
По умолчанию

Код:
  for I := 0 to 99 do   begin
listview1.Items.Add();
listview1.Items.Item[listview1.Items.Count-1].Caption:=(IntToStr(i));
listview1.Items.Item[listview1.Items.Count-1].SubItems.Add(IntToStr(Random(999)));
listview1.Items.Item[listview1.Items.Count-1].SubItems.Add(IntToStr(Random(999)));
listview1.Items.Item[listview1.Items.Count-1].SubItems.Add(IntToStr(Random(999)));
  end;
наверно так

Последний раз редактировалось Veronikaa; 15.05.2012 в 15:37.
Veronikaa вне форума Ответить с цитированием
Старый 15.05.2012, 15:44   #5
Pasha_Sh
Форумчанин
 
Аватар для Pasha_Sh
 
Регистрация: 16.05.2010
Сообщений: 137
По умолчанию

Оо, нет же, это при нажатии на кнопку сразу 100 ненужных строк создастся
osu
Pasha_Sh вне форума Ответить с цитированием
Старый 15.05.2012, 16:14   #6
Veronikaa
Пользователь
 
Регистрация: 05.05.2012
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Pasha_Sh Посмотреть сообщение
Оо, нет же, это при нажатии на кнопку сразу 100 ненужных строк создастся
это пример
просто вместо
Код:
listview1.AddItem(combobox1.Text, listview1.Columns[i]);
использую
Код:
listview1.Items.Add();
listview1.Items.Item[listview1.Items.Count-1].Caption:=combobox1.Text;
Veronikaa вне форума Ответить с цитированием
Старый 15.05.2012, 16:49   #7
Pasha_Sh
Форумчанин
 
Аватар для Pasha_Sh
 
Регистрация: 16.05.2010
Сообщений: 137
По умолчанию

Спасибо вам! Заработало
osu
Pasha_Sh вне форума Ответить с цитированием
Старый 15.05.2012, 17:44   #8
Pasha_Sh
Форумчанин
 
Аватар для Pasha_Sh
 
Регистрация: 16.05.2010
Сообщений: 137
По умолчанию

Вот еще мелкая ошибка:
Вроде бы все сохраняется хорошо, но если в листвью нет записей, то при сохранении программа выдает ошибка. как исправить это?
osu
Pasha_Sh вне форума Ответить с цитированием
Старый 15.05.2012, 19:20   #9
Veronikaa
Пользователь
 
Регистрация: 05.05.2012
Сообщений: 11
По умолчанию

listview1.Items.Count<>0
то сохранить
Veronikaa вне форума Ответить с цитированием
Старый 15.05.2012, 20:39   #10
Pasha_Sh
Форумчанин
 
Аватар для Pasha_Sh
 
Регистрация: 16.05.2010
Сообщений: 137
По умолчанию

Блин, я пробовал если больше нуля
Спасибо большое еще раз
osu
Pasha_Sh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перетащить элемент ListView в другой ListView? Paul Hindenburg Компоненты Delphi 5 26.01.2013 11:35
[C# + WPF] ListView. Узнать выделена ли строка в нём. ListView.View == GridView. Casper-SC WPF, UWP, WinRT, XAML 2 12.08.2010 19:04
ListView qwerty55 Общие вопросы Delphi 1 21.03.2010 02:46
ListView Старовъръ Компоненты Delphi 8 02.07.2008 19:08
ListView Witaliy Общие вопросы Delphi 1 01.05.2008 20:46