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

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

Ошибка : "Неверный дескриптор" и "Параметр задан не верно" [D7, XP]


worldmen ©   (2009-03-02 09:56:00) 

Есть процедуры:

procedure TForm1.tmTrueFromDockTimer(Sender: TObject);              
Var
 bmpDoc : TBitmap;
 R,G,B : Word;
 x,y: integer;
Begin      
 x := StrToInT(Edit37.Text);
 y := StrToInT(Edit38.Text);

 repeat
   PrintScreen(x, y, 1, 1, bmpDoc);
   R := GetRValue(bmpDoc.Canvas.Pixels[0,0]);
   G := GetGValue(bmpDoc.Canvas.Pixels[0,0]);
   B := GetBValue(bmpDoc.Canvas.Pixels[0,0]);
 until (R<100)and(G>100)and(B>100);
 ...
end

и

procedure TForm1.tmFlyTimer(Sender: TObject);                      
Var
 bmpStop : TBitmap;
 R,G,B : Word;
 x,y: integer;
Begin
 tmFly.Enabled:=false;
 x := StrToInT(Edit37.Text);
 y := StrToInT(Edit38.Text);

 repeat
   PrintScreen(x, y, 1, 1, bmpStop);
   R := GetRValue(bmpStop.Canvas.Pixels[0,0]);
   G := GetGValue(bmpStop.Canvas.Pixels[0,0]);
   B := GetBValue(bmpStop.Canvas.Pixels[0,0]);
 until (R>100)and(G>100)and(B>100);
 ...
End

procedure TForm1.PrintScreen(x,y,w,h: integer; var bmp : TBitmap);
Begin    
 bmp := TBitmap.Create;
 Bmp.PixelFormat := pf16Bit;
 bmp.Width := w;
 bmp.Height:= h;
 StretchBlt(bmp.Canvas.Handle,0,0, w,h, GetDC(0),x,y, w,h, SRCCOPY);
End;


Выполняются эти процедуры по таймерам (последовательно через промежуток времени). Програмы работала нормально, я дописывал другие процедуры не связанные с этими. Позже при выполнении появилась ошибка "Направильный дескриптор" в первой процедуре на строке
R := GetRValue(bmpDoc.Canvas.Pixels[0,0]);
Я сделал точку останова на предыдущей строке и выполнил пошагово - выполнилось без ошибок.
Я запустил на выполнение программу с начала - первая проедура выполнилась, а такая же ошибка возникла на второй процедуре
procedure TForm1.tmFlyTimer(Sender: TObject);в такойже строке:
R := GetRValue(bmpStop.Canvas.Pixels[0,0]);
Исправить ошибку не получилось. Принес прогу на др. ком, запустил - опять ругается на строку из первой процедуры.


worldmen   (2009-03-02 12:33:00) [1]

Я уже написал выше - нашел ошибку. Всем спасибо.


clickmaker   (2009-03-02 12:27:00) [2]

> Говорил при заходе второй раз в repeat

судя по этому, деструктора все-таки нет )


Ega23   (2009-03-02 12:21:00) [3]


> У него там троеточие стоит


Глаз-ватерпас. Не заметил.  :)


Rouse_   (2009-03-02 12:18:00) [4]


> глобальный пока вижу один.

У него там троеточие стоит, так что не факт что деструктора нет :)


Ega23   (2009-03-02 12:16:00) [5]


> тут не один косяк. К тому же, неоптимально


глобальный пока вижу один. Остальные - надо весь код смотреть.


clickmaker   (2009-03-02 12:11:00) [6]

тут не один косяк. К тому же, неоптимально


Ega23   (2009-03-02 11:31:00) [7]


> Говорил при заходе второй раз в repeat


Сам косяк найдёшь, или подсказать?


worldmen   (2009-03-02 11:20:00) [8]


> Прикольно. А через сколько времени программа тебе говорила
> о "недостаточно оперативной памяти для работы"?

Говорил при заходе второй раз в repeat


worldmen   (2009-03-02 11:19:00) [9]

Похоже нашел ошибку - связано и с таймером тоже.


Ega23   (2009-03-02 11:06:00) [10]

Прикольно. А через сколько времени программа тебе говорила о "недостаточно оперативной памяти для работы"?


worldmen   (2009-03-02 11:04:00) [11]

Удалил dcu
И сделал: Project->Build All Projecs - не помогло.


Anatoly Podgoretsky   (2009-03-02 11:03:00) [12]

Зачем два практически одинаковых обработчика, к тому же между ними и между собой будут гонки и как результат разрушение стека.


Rouse_   (2009-03-02 10:36:00) [13]

Удали DCU и сделай ребилд


Наверх

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