Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

Проблема с массивом неизвестного размера   Найти похожие ветки 

 
beglec ©   (2006-10-22 16:22) [0]


// задача: По нажатию кнопки создать 1 дополнительный объект
//         Изначально не известно сколько будет объектов
// ресурсы: подгружается изображение bmp 32x32
// Конфигурация компа: P3000x2 1Gb Memory.
// Проблема: Возникает исключительная ситуация уже на первом десятке создания объектов EAccessViolation
aunit Unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls,
     Install, rxGif;
type
  TsdComputer=record
  IDRec       : Integer;
  ComputerName: String;
  Login       : String;
  Image       : TImage;
  LabelLogin  : TLabel;
  end;
 TFMain = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
 public
 end;
var   FMain: TFMain;
     Computers: array of TsdComputer;
     Index:   Integer;
implementation
{$R *.dfm}
// ------------------------------------------------------------------------------ создание формы
procedure TFMain.FormCreate(Sender: TObject);
begin Index:=0; end;                                                             // индекс начала массива
// ------------------------------------------------------------------------------ нажимаем кнопочку
procedure TFMain.Button1Click(Sender: TObject);
begin
  Inc(Index);                                                                   // увеличиваем размер массива
  SetLength(Computers,Index);                                                   // создаем задаем новое значение длины массива
  Computers[Index].Image                 :=TImage.Create(FMain);                // создаем изображение
  Computers[Index].Image.Parent          :=FMain;                               //
  Computers[Index].Image.ShowHint        :=True;                                // разрешить подскаски
  Computers[Index].Image.Hint            := "Имя: "+#13#10+                     // делаем двухстрочную подсказку
                                            "Группа: ";
  Computers[Index].Image.AutoSize        :=True;                                // автоматический размер установить
  Computers[Index].Image.Transparent     :=True;                                // изоражение прозрачное

  Computers[Index].Image.Picture.LoadFromFile(PathPicture+"comp0.gif");         // загружаем картинки
  Computers[Index].Image.Left            :=0;                                   // координаты
  Computers[Index].Image.Top             :=Index*32;
end;
end.


 
Dmitrij_K   (2006-10-22 16:27) [1]

Индексы дин. массива начинаются с нуля


 
Dmitrij_K   (2006-10-22 16:30) [2]

l := Length(Computers);
SetLEngth(Computers, l+1);
Computers[l].xxx
Computers[l].xxx

у такого метода плохая скорость, чем больше массив тем медленнее бедет работать


 
beglec ©   (2006-10-22 16:31) [3]

Что посоветуете ?


 
beglec ©   (2006-10-22 16:33) [4]

Dmitrij_K -> а причем тут 0 индекс ?
я ведь к 0 индексу не обращаюсь ?
Но все равно спасибо учту. Честно говоря забыл про это дело.


 
Dmitrij_K   (2006-10-22 16:33) [5]


> Что посоветуете ?

лопату


 
Dmitrij_K   (2006-10-22 16:35) [6]

// Index=0
Inc(Index);
//Index=1
SetLength(Computers,Index);
// Length(Computers)=1
// обрашение к индексу 1 которого нет, получаешь AV
Computers[Index].Image


 
Ketmar ©   (2006-10-22 16:37) [7]

>[3] beglec(c) 22-Oct-2006, 16:31
>Что посоветуете ?
сделать {$R+} и долго удивляться.


 
beglec ©   (2006-10-22 16:37) [8]

Dmitrij_K - спасибо, действительно помогло!!!
Проблема исчезла.
А почему тогда она (ИС) не сразу вылазит, а только после создания нескольких объектов ? - Ну этот вопрос так, уже для дальнейшего просвещения


 
Ketmar ©   (2006-10-22 16:39) [9]

>[8] beglec(c) 22-Oct-2006, 16:37
>А почему тогда она (ИС) не сразу вылазит, а только после
>создания нескольких объектов?
потому что не сразу витальный кусок ливера портишь.



Страницы: 1 вся ветка

Текущий архив: 2006.11.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
15-1160722370
IMHO
2006-10-13 10:52
2006.11.05
Охотники за мифами Windows Vista


15-1160889398
cyborg
2006-10-15 09:16
2006.11.05
Толи кони не едут


15-1160647970
ПЛОВ
2006-10-12 14:12
2006.11.05
Жесткий диск с 2-мя интерфейсами...


2-1161607497
Чипырик
2006-10-23 16:44
2006.11.05
Поиск в TList


5-1142359961
Кашперук Иван
2006-03-14 21:12
2006.11.05
Создание красивой кнопки