Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Работа с TObjectList


Автор: 2211 17.11.2009, 20:59
Есть код
Код

  numb:= random(CountCelinders);
  files:=MyFile.Create;
  files.name:=str;
  files.number:=numb;
  //MyObjectList.Add(files);
  files.Destroy;


Если разкомментировать строку, то выдает ошибку Аксесс виалэйшен. Помогите разобраться.

files это мой объект моего класса, который является наследником Tobject + имеет два дополнительных поля имени и номера.

Автор: Frees 17.11.2009, 21:05
а где ты создаешь MyObjectList

Автор: 2211 17.11.2009, 21:09
Создаю в конструкторе:

Код

procedure TMainForm.FormCreate(Sender: TObject);
begin
MyObjectList:= TObjectList.Create;
count:= 0;

end;

Автор: 2211 17.11.2009, 21:53
Все спят??  :((

Автор: Демо 17.11.2009, 22:16
2211, 
Проверяй, где у тебя теряется (либо уничтожается, либо переменная переписывается) MyObjectList.

Автор: 2211 17.11.2009, 23:15
у меня кода кот наплакал. никаких особых манипуляций с переменной не делаю.

Код

unit UMainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls, Math, UMyFiles, contnrs;

type
  TMainForm = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
  private
    MyObjectList: TObjectList;
    files: MyFile;
    CountCelinders: integer;
    count: integer;
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);
begin
MyObjectList:= TObjectList.Create;
count:= 0;
end;

procedure TMainForm.Timer2Timer(Sender: TObject);
var
str: string;
length, i, j, numb: integer;
begin
for j:=0 to random(4) do
begin

  length:=random(10)+1;
  SetLength(str,length+6);
  for i:=0 to length do
    str[i]:=Chr(RandomRange(97,122));
  str[length+1]:='.';
  for i:=length+2 to length+4 do
    str[i]:=Chr(RandomRange(97,122));
  str[Length+5]:=#0;
  numb:= random(CountCelinders);
  files:=MyFile.Create;
  files.name:=str;
  files.number:=numb;
  //MyObjectList.Add(files); <----- ОШИБКА!!!!!!!!!!
  //files.Destroy;
  count:=count+1;

end;

end;

end. 

Автор: Демо 17.11.2009, 23:59
Цитата(2211 @  17.11.2009,  23:15 Найти цитируемый пост)
у меня кода кот наплакал. никаких особых манипуляций с переменной не делаю.


У тебя таймер срабатывает раньше, чем TObjectList создаётся.

Автор: Christoph 18.11.2009, 01:36
А разве такое может быть?По-моему после FormCreate начинают обрабатываться события компонентов

Автор: Демо 18.11.2009, 03:26
Цитата(2211 @  17.11.2009,  23:15 Найти цитируемый пост)
TMainForm = class(TForm)
    Timer1: TTimer;


Цитата(2211 @  17.11.2009,  23:15 Найти цитируемый пост)
procedure TMainForm.Timer2Timer(Sender: TObject);


Так и должно быть? - Timer1, но Timer2Timer

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)