Форум: "Основная";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];
ВнизОшибки при добавлнии элемента в 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.063 c