Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача класса в функцию. 
V
    Опции темы
CynicRus
  Дата 12.7.2012, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



Есть класс, в котором находятся некие данные в виде динамического массива:
Код

TSimbaComponentList = class
  private
    SimbaList: array of TSimbaComponent; // Simba components storage
  public
  constructor Create;
  destructor Destroy; override;
  procedure AddItem(Item: TSimbaComponent;index: integer);
  procedure RemoveItem(Index: Integer);
  function GetComponent(Idx: integer): TSimbaComponent;
  function Count: integer;
end;

implementation

{ TSimbaComponentList }

constructor TSimbaComponentList.Create;
begin
  setlength(SimbaList,1);
  inherited Create;
end;

destructor TSimbaComponentList.Destroy;
begin
  SimbaList := nil; //free storage
  inherited Destroy;
end;

procedure TSimbaComponentList.AddItem(Item: TSimbaComponent;index: integer);
var
  len: integer;
begin
  Len:= Length(SimbaList);
  if Index >= Len then Index := Len+1;
   setLength( SimbaList, Len+1);
   move( SimbaList[Index],SimbaList[ Index+1 ],
         (Len-Index) * sizeof( SimbaList[Index] ));
   SimbaList[Index] := Item;
end;

procedure TSimbaComponentList.RemoveItem(Index: Integer);
var
  last: integer;
begin
  last := high(SimbaList);
  if Index <  Last then move( SimbaList[Index+1], SimbaList[Index],
       (Last-Index) * sizeof( SimbaList[Index] )  );
   setLength(SimbaList, Last );
end;

function TSimbaComponentList.GetComponent(Idx: integer): TSimbaComponent;
begin
  result:= SimbaList[Idx];
end;


function TSimbaComponentList.Count: integer;
begin
  Result := Length(SimbaList);
end;

Создаю экземпляр этого класса, перед передачей в функцию - смотрю, он заполнен. Затем передаю в процедуру:
Код

procedure TCodeGen.CreateScript(list: TSimbaComponentList);
var
  i: integer;
begin
  for i:=0 to list.Count -1 do begin
    CmpList.AddItem(list.GetComponent(i),i);
  end;
  GenerateFormCode(list);
  SynEdit1.Lines.AddStrings(ScriptCode);
end;                                
 - проверяю экземпляр класса, который должен был принять переданное - а он стабильно имеет 1 элемент. Как тут быть?

PM MAIL   Вверх
Frees
Дата 12.7.2012, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



А если не мудрить с индексом а добавлять в конц?


Код

procedure TSimbaComponentList.AddItem(Item: TSimbaComponent);
var
  len: integer;
begin
   Len:= Length(SimbaList);
   if Index >= Len then 
     Index := Len+1;
   Inc(Len);
   setLength( SimbaList, Len);
   SimbaList[Len - 1] := Item;
end;


Точно не помню но какая то проблема была с похожим кодам
Цитата(CynicRus @  12.7.2012,  11:54 Найти цитируемый пост)
   move( SimbaList[Index],SimbaList[ Index+1 ],         (Len-Index) * sizeof( SimbaList[Index] ));




--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
CynicRus
Дата 12.7.2012, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



Тоже, как вариант. Но тем не менее - при передачи класса в процедуру, экземпляр класса из процедуры имеет 1 элемент-(
PM MAIL   Вверх
Frees
Дата 12.7.2012, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



Код

GenerateFormCode(CmpList);

а не 
Код

GenerateFormCode(list);


Добавлено через 4 минуты и 35 секунд
Цитата(CynicRus @  12.7.2012,  11:54 Найти цитируемый пост)
- а он стабильно имеет 1 элемент.

А сколько должно быть?


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
CynicRus
Дата 12.7.2012, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



Оу, спасибо.
PM MAIL   Вверх
Frees
Дата 12.7.2012, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



Цитата(CynicRus @  12.7.2012,  11:54 Найти цитируемый пост)
он стабильно имеет 1 элемент

в только что созданном экземпляре  у тебя всегда есть 1 элемент
Код

constructor TSimbaComponentList.Create;
begin
  setlength(SimbaList, 1);//может 1 на 0 поменять.
  inherited Create;
end;



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
CynicRus
Дата 12.7.2012, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



Да, я уже разобрался-))) Спасибо ещё раз-)
PM MAIL   Вверх
gesper
Дата 19.8.2012, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


"Shарфик"
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 23.2.2005

Репутация: 1
Всего: 2



Очень часто такое бывает, что сидишь тупишь, почему ошибка вылазит или не получается что то. Создашь тему с вопросом, а пока ждешь хорошего ответа ил подсказки, то сам находишь решение. ИМХО, общение нужно больше чем ответы на вопросы. Жаль что чатов сейчас мало smile
--------------------
...И приколется обломившийся и oбломится приколовшийся...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.