Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.039 c
15-1161159145
DevilDevil
2006-10-18 12:12
2006.11.05
Файл Ресурсов VS C++


1-1159238370
dreamse
2006-09-26 06:39
2006.11.05
Работа с Flash


2-1161184511
CAH CAHbI4
2006-10-18 19:15
2006.11.05
Создание поля в TADOTable


2-1161620422
Alral
2006-10-23 20:20
2006.11.05
Определение нажатия клавиши.


2-1161276226
Чародей
2006-10-19 20:43
2006.11.05
Потоки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский