![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WM_KILLFOCUS
DevilDevil © (2006-10-25 17:56:00)В каких случаях приложению может придти это сообщение? У меня не поймёшь по какой причине оно приходит...
DevilDevil (2006-10-26 13:09:00) [1]:)
type
TByteArray = array[0..0] of byte;
PByteArray = ^TByteArray;
var
Line : PByteArray;
i : intger;
begin
Line := Bitmap8.ScanLine[0];
for i := 0 to Bitmap8.Width - 1 do
Line[i] := 0;
end;
<-- достаточно часто видел такое обращение. Один и тот же код работает корректно в других проектах и вызывает ошибку в моём. Почему?
ЮЮ (2006-10-26 12:54:00) [2]PByteArray, случаем не TByteDynArray?
Если так, то Integer(PByteArray) + i вполне может оказаться в твоем адресном пространстве, но это вовсе не i-ый элемент твоего массива. Надеюсь, ты не правишь данные таким способом?
DevilDevil (2006-10-26 12:45:00) [3]> нет, это i в первом примере может быть DWORD.
Нет, i : Integer; ...
Может тогда ответите на следующий вопрос:
Конкретно в этом проекте обращениеPbyteArray[i]вызывает ошибку доступа к памяти. Обращениеpbyte( Integer(PByteArray) + i )^работает корректно. Из-за чего в первом случае вызывается ошибка?
ЮЮ (2006-10-26 12:36:00) [4]
> Или ты хочешь сказать, что length() возвращает DWORD?
нет, это i в первом примере может быть DWORD.
З.Ы. Следую включить Range Checking в опциях проекта, иначе при неаккуратной работе с динамическими массивами AV и прочие просто неизбежны и трудно уловимы
DevilDevil (2006-10-26 12:25:00) [5]> Германн © (26.10.06 00:24) [6]
procedure TForm1.FormCreate(Sender: TObject);
var i, Count, Iterations : integer;
begin
Iterations := 0;
Count := 0;
for i := 0 to Count - 1 do
inc(Iterations);
Caption := IntToStr(Iterations);
end;
Или ты хочешь сказать, чтоlength()возвращаетDWORD?
Германн (2006-10-26 00:24:00) [6]
> Кто нибудь знает, что происходит?
>
Многие знают. Тем более что не так давно было весьма активное обсуждение сколько раз выполнится подобный цикл при разных типах переменной цикла. :-)
Gero (2006-10-25 19:57:00) [7]> [2] DevilDevil © (25.10.06 18:06)
Нет, не смешно, а грустно.
DevilDevil (2006-10-25 19:44:00) [8]> Приходит окну при потере фокуса очевидно.
Да это то я знаю, всё равно спасибо.
Ошибку нашёл. Странная она какая-то:
ОШИБКА:
for i := 0 to length(DinamicArray)-1 do
with DinamicArry[i] do ...
НЕТ ОШИБКИ:
if length(DinamicArray)<>0 then
for i := 0 to length(DinamicArray)-1 do
with DinamicArry[i] do ...
Кто нибудь знает, что происходит?
DVM (2006-10-25 18:09:00) [9]
> У меня не поймёшь по какой причине оно приходит...
Приходит окнупри потере фокуса очевидно.
DevilDevil (2006-10-25 18:06:00) [10]> Игорь Шевченко © (25.10.06 17:59) [1]
Очень смешно!
А вообще, извиняюсь, сильно ступил; от отчаяния наверное.
Не могу найти, в каком месте у меня ошибка, которая приводит к ошибке доступа к данным по адресу $00000004
Игорь Шевченко (2006-10-25 17:59:00) [11]Ни в одном случае приложению это сообщение не приходит. Равно как и все остальные сообщения тоже не приходят приложению ни в каких случаях.