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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2010, 14:21   #1
Son
Пользователь
 
Аватар для Son
 
Регистрация: 24.11.2008
Сообщений: 76
По умолчанию Создание класса с полем типа TStringList. Ошибка при его заполнении

Возникла такая проблема. Создаю класс в отдельном модуле.
Цитата:
unit Prog_Utils;

interface

uses Windows, Controls, Classes, Messages;

type
TLinkDataRect = class

public
Index :integer;
Caption :string[255];
Plugin :string[255];
Description :string;
PathSave :string;
TimeSave :TTime;
TimeDelta :TTime;
LinkList :TStringList;
FileMask :TStringList;

constructor Create;
function LinkListAdd(sLink:string):integer;
function FileMaskAdd(sMask:string):integer;
end;

implementation

{ TLinkDataRect }

constructor TLinkDataRect.Create;
begin
LinkList:=TStringList.Create;
FileMask:=TStringList.Create;
end;

function TLinkDataRect.FileMaskAdd(sMask: string):integer;
begin
Result:=FileMask.Add(sMask);
end;

function TLinkDataRect.LinkListAdd(sLink: string):integer;
begin
Result:=LinkList.Add(sLink);
end;

end.
В основном модуле программы создаю динамический список типа этого класса.
Цитата:
var
Form1: TForm1;
ar_Link:array of TLinkDataRect;
На Form1.FormShow вешаю заполнение элементов списка:
Цитата:
procedure TForm1.FormShow(Sender: TObject);
var ex:variant;
i,nom,n:integer;
begin
nom:=0;
SetLength(ar_Link,nom);
if FileExists(ExtractFileDir(ParamStr( 0))+'\data\data_link.xls') then
begin
ex:=CreateOleObject('Excel.Applicat ion');
Ex.WorkBooks.Open(ExtractFileDir(Pa ramStr(0))+'\data\data_link.xls');
i:=2;
while AnsiLowerCase(Ex.Cells[i,1].Value)<>'end' do
BEGIN
if Ex.Cells[i,1].Value<>0 then
begin
inc(nom);
SetLength(ar_Link,nom);
ar_Link[nom]:=TLinkDataRect.Create;
ar_Link[nom].Index:=Ex.Cells[i,1].Value;
ar_Link[nom].Caption:=Ex.Cells[i,2].Value;
ar_Link[nom].Description:=Ex.Cells[i,3].Value;
ar_Link[nom].PathSave:=Ex.Cells[i,4].Value;
ar_Link[nom].TimeSave:=Ex.Cells[i,5].Value;
ar_Link[nom].TimeDelta:=Ex.Cells[i,6].Value;
ar_Link[nom].Plugin:=Ex.Cells[i,7].Value;
n:=ar_Link[nom].LinkList.Add(Ex.Cells[i,8].Value);
n:=ar_Link[nom].FileMask.Add(Ex.Cells[i,9].Value);
end
else
begin
if nom<>0 then
begin
n:=ar_Link[nom].FileMaskAdd(Ex.Cells[i,8].Value);
n:=ar_Link[nom].FileMaskAdd(Ex.Cells[i,9].Value);
end;
end;
inc(i);
END;
//Ex.visible:=true;
Ex.WorkBooks.Close;
Ex.Quit;
end;

end;
Ошибка возникает в строке:
Цитата:
n:=ar_Link[nom].LinkList.Add(Ex.Cells[i,8].Value);
В чем я ошибаюсь?
Лучше сдохнуть, чем жить с иглой в яйце (Кащей Бессмертный)
Son вне форума Ответить с цитированием
Старый 13.04.2010, 14:32   #2
NervniiJ
Похмел
Пользователь
 
Регистрация: 10.01.2010
Сообщений: 16
По умолчанию

Какая ошибка? Ошибка подключения к пульту управления миром?
NervniiJ вне форума Ответить с цитированием
Старый 13.04.2010, 14:35   #3
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

так попробуй:
n:=ar_Link[nom].LinkList.Add(String(Ex.Cells[i,8].Value));
принимаю благодарности в письменном виде( весы слева)...
MaxNik2009 вне форума Ответить с цитированием
Старый 13.04.2010, 14:36   #4
Son
Пользователь
 
Аватар для Son
 
Регистрация: 24.11.2008
Сообщений: 76
По умолчанию

Извините. искал как загрузить изображение. Вот скриншот ошибки.
Изображения
Тип файла: jpg b1.JPG (18.9 Кб, 47 просмотров)
Лучше сдохнуть, чем жить с иглой в яйце (Кащей Бессмертный)
Son вне форума Ответить с цитированием
Старый 13.04.2010, 14:42   #5
NervniiJ
Похмел
Пользователь
 
Регистрация: 10.01.2010
Сообщений: 16
По умолчанию

Вот теперь хотябы видно куда смотреть:
Код:
nom:=0;
SetLength(ar_Link,nom);
if FileExists(ExtractFileDir(ParamStr( 0))+'\data\data_link.xls') then
begin
ex:=CreateOleObject('Excel.Applicat ion');
Ex.WorkBooks.Open(ExtractFileDir(Pa ramStr(0))+'\data\data_link.xls');
i:=2;
while AnsiLowerCase(Ex.Cells[i,1].Value)<>'end' do
BEGIN
if Ex.Cells[i,1].Value<>0 then
begin
inc(nom); // тут 1
SetLength(ar_Link,nom);
ar_Link[nom]:=TLinkDataRect.Create; // А индексы с нуля начинаются, помним?
NervniiJ вне форума Ответить с цитированием
Старый 13.04.2010, 14:56   #6
Son
Пользователь
 
Аватар для Son
 
Регистрация: 24.11.2008
Сообщений: 76
Смущение


все верно. Пойду убъюсь об стену. Спасибо большое!
Лучше сдохнуть, чем жить с иглой в яйце (Кащей Бессмертный)
Son вне форума Ответить с цитированием
Старый 13.04.2010, 15:03   #7
bitSoft
Programming...
Форумчанин
 
Аватар для bitSoft
 
Регистрация: 13.03.2010
Сообщений: 198
По умолчанию

Цитата:
Сообщение от NervniiJ Посмотреть сообщение
Вот теперь хотябы видно куда смотреть:
Код:
nom:=0;
SetLength(ar_Link,nom);
if FileExists(ExtractFileDir(ParamStr( 0))+'\data\data_link.xls') then
begin
ex:=CreateOleObject('Excel.Applicat ion');
Ex.WorkBooks.Open(ExtractFileDir(Pa ramStr(0))+'\data\data_link.xls');
i:=2;
while AnsiLowerCase(Ex.Cells[i,1].Value)<>'end' do
BEGIN
if Ex.Cells[i,1].Value<>0 then
begin
inc(nom); // тут 1
SetLength(ar_Link,nom);
ar_Link[nom]:=TLinkDataRect.Create; // А индексы с нуля начинаются, помним?
vapsheta zdesi tipa tak nado

Код:
if Ex.Cells[i,1].Value<>0 then
begin
ar_Link[nom]:=TLinkDataRect.Create;
inc(nom);
SetLength(ar_Link,SizeOf(ar_Link)+nom);// tut
Код:
With TProgrammersForum.Create do  AddNewTopic('Title','Content...');
bitSoft вне форума Ответить с цитированием
Старый 13.04.2010, 15:12   #8
NervniiJ
Похмел
Пользователь
 
Регистрация: 10.01.2010
Сообщений: 16
По умолчанию

Цитата:
vapsheta zdesi tipa tak nado

Код:

if Ex.Cells[i,1].Value<>0 then
begin
ar_Link[nom]:=TLinkDataRect.Create;
inc(nom);
SetLength(ar_Link,SizeOf(ar_Link)+n om);// tut
vapsheta tak nado toliko tebe.
NervniiJ вне форума Ответить с цитированием
Старый 13.04.2010, 21:38   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

inc(nom);
SetLength(ar_Link,nom);
n:=ar_Link[nom].LinkList.Add(Ex.Cells[i,8].Value);
нумерация с НУЛЯ
последний индекс nom-1
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в заполнении двумерного массива в файл серг Общие вопросы C/C++ 0 19.02.2010 09:43
Ошибка при присвоении tStringList Altera Общие вопросы Delphi 16 24.07.2009 22:08
Delphi. Создание нового класса, его "предков". Krechet Помощь студентам 0 26.04.2009 15:52
Ошибка при создании типа Monte-Kristo Помощь студентам 4 04.03.2009 19:51
Ошибка при заполнении таблицы masterdela БД в Delphi 6 26.01.2009 01:16