Главная страница
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.044 c
3-1171882209
vani
2007-02-19 13:50
2007.05.20
Delphi7 ADO MSSQL2k


6-1163695742
p314
2006-11-16 19:49
2007.05.20
ssl


2-1177492705
webpauk
2007-04-25 13:18
2007.05.20
Handle


15-1177150699
ArtemESC
2007-04-21 14:18
2007.05.20
А как в PHP вывести нормально дату и время в строке?


2-1177506224
Abcdef123
2007-04-25 17:03
2007.05.20
Прошу прокомментировать, и дать совет, как сделать лучше