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

Вниз

Ошибки при добавлнии элемента в TListView   Найти похожие ветки 

 
Димон   (2007-03-28 02:58) [0]

type
 TMainForm = class(TForm)
   ListInformation: TListView;
   procedure FormActivate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   type
     TObjectInformation = record
       Handle: HWND;
       WindowText, ClassName: WideString;
   end;
   TObjectsInformation = array of TObjectInformation;
 public
   ObjectsInformation: TObjectsInformation;
 end;

var
 MainForm: TMainForm;
 Window: HWND;
 lpString: PWideChar;
 Index: Word = 0;

implementation

{$R *.dfm}

procedure TMainForm.FormActivate(Sender: TObject);
var
 MyItem: TListItem;
begin
 New(lpString);
 EnumWindows(@EnumWindowsProc, 0);
 EnumChildWindows(Window, @EnumChildProc1, 0);
 SetLength(MainForm.ObjectsInformation, Index);
 Index := 0;
 EnumChildWindows(Window, @EnumChildProc2, 0);
 lpString := nil;
 Dispose(lpString);
 Index := 0;
 repeat
 MyItem := MainForm.ListInformation.Items.Add;// Вот здесь происходит ошибка EAccessViolation, когда Index = 1
 MyItem.Caption := IntToStr(Index);
 MyItem.SubItems.Add(IntToStr(MainForm.ObjectsInformation[Index].Handle));
 MyItem.SubItems.Add(MainForm.ObjectsInformation[Index].WindowText);
 MyItem.SubItems.Add(MainForm.ObjectsInformation[Index].ClassName);
   Index := Index + 1;
 until Index = Length(MainForm.ObjectsInformation);
end;
// Если в ListInformation перед компиляцией добавляю один элемент, то ошибки нет. Если элементов изначально нет, то при добавлении элементов во время выполнения программы происходит ошибка. Что не так?


 
Loginov Dmitry ©   (2007-03-28 08:02) [1]

> Если в ListInformation перед компиляцией добавляю один элемент,
> то ошибки нет. Если элементов изначально нет, то при добавлении
> элементов во время выполнения программы происходит ошибка.
> Что не так?


Скорее всего, это приведенная ошибка. На самом деле ошибка возникает раньше, в другом месте, а здесь она лишь себя проявляет. Это и не удивительно при таком сомнительном коде. Index объявлена как глобальная, но зачем-то используется еще и как счетчик цикла (так нельзя). Зачем-то вызывается Dispose(nil). Перепиши все по уму, глядишь, заработает.


 
zap8   (2007-03-28 09:01) [2]

Чему равно вот это значение   Length(MainForm.ObjectsInformation);

не понятно чему равен index если 0 зачем тогда
SetLength(MainForm.ObjectsInformation, Index);


 
_Аноним   (2007-03-28 15:38) [3]


> MyItem := MainForm.ListInformation.Items.Add;// Вот здесь
> происходит ошибка EAccessViolation, когда Index = 1

Зачем здесь указание переменной?
Она не нужна. Она кстати инициализирована?

С другой стороны, вчера поймал AV на безобидной строке
ListView1.Items.Add.Caption:=Format("Элемент %d", [N]);

надо разбираться, возможно, в генофонде не все гладко



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

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

Наверх




Память: 0.47 MB
Время: 0.051 c
2-1177736039
Mical
2007-04-28 08:53
2007.05.20
Скажите, как сделать DBEdit прозрачным?


11-1150662182
DevilDevil
2006-06-19 00:23
2007.05.20
"PROJECT Informator" - утилитка в помощь KOL программисту


1-1174061963
Людмила
2007-03-16 19:19
2007.05.20
Межпрограммное взаимодействие. Собираю идеи.


15-1177076711
Ringo
2007-04-20 17:45
2007.05.20
Вот те раз! А я думал, - Медведев...


15-1177382155
Slider007
2007-04-24 06:35
2007.05.20
С днем рождения ! 24 апреля