Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

Ни в одном случае приложению это сообщение не приходит. Равно как и все остальные сообщения тоже не приходят приложению ни в каких случаях.


Наверх

Титульная страница Поиск, карта сайта Написать письмо