Главная страница
    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.083 c
15-1160648885
TJulia
2006-10-12 14:28
2006.11.05
Еще один вопрос по HTML


3-1157611152
vodvorezlaya
2006-09-07 10:39
2006.11.05
Помогите вылазит ошибка EDBEngine error with message insufficien


3-1157607840
tytus
2006-09-07 09:44
2006.11.05
Ошибка ORA-12514


2-1161281677
Нначинающий
2006-10-19 22:14
2006.11.05
Форма в середине десктопа


3-1157621718
NotGooDP
2006-09-07 13:35
2006.11.05
Триггеры в MsSQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский