С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
ANDRUHA88
0 / 0 / 0
Регистрация: 30.01.2013
Сообщений: 25
1

Остановка пограммы.

17.02.2013, 20:13. Просмотров 483. Ответов 8
Метки нет (Все метки)

проблема такая : программа после 4 часов работы выдаёт ошибку 'неверно задан параметр', хотя первые 4 часа работает как часики. в каких местах можно искать может цикличность задана не верное что через какое то время приводит к ошибке, может в поиске картинки в картинке . код не выкладываю так как даже не знаю в каком месте искать, а весь код довольно велик(да и написан коряво,стыдно ). хоть приблизительно где искать в в чём капатьсячто может привести ктакой ошибке

Добавлено через 6 минут
да ещё программа когда работает в диспетчера задач отоброжаеться как 'не отвечает'
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 20:13
Ответы с готовыми решениями:

Остановка на объекте
У меня такая проблема : У меня есть две картинки мне надо что бы когда первая...

Остановка потоков
Привет всем, я новичок на этом форуме и мне нужна Ваша помощь. У меня есть...

остановка движения
как сделать, что бы два объекта направленных друг на друга, остановилиь на...

Пауза в процедуре, остановка
Есть процедура, внутри процедуры цикл делает свои дела. Возможно ли...

Остановка действий программы
Нужно следующее: имеется условие if условие then какие-то действия else ......

8
vampire6666
142 / 142 / 39
Регистрация: 17.08.2012
Сообщений: 411
17.02.2013, 22:41 2
ANDRUHA88, прикрепите исходник(желательно архивом).
0
ANDRUHA88
0 / 0 / 0
Регистрация: 30.01.2013
Сообщений: 25
17.02.2013, 23:32  [ТС] 3
вобщем я тут посидел поглядел почитал в гугле

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
procedure TForm1.Button4Click(Sender: TObject);
{ñêðèГ* ГЅГЄГ°Г*Г*Г*}
 
var
 
desk:hDC;
 
bmp_Screen:Graphics.TBitmap;
 
begin
if i=20 then begin i:=1; end
else begin i:=i+1; end;
 
showcursor(false);
 
bmp_Screen:=Graphics.TBitmap.Create;
 
bmp_Screen.Width:=GetSystemMetrics(SM_CXSCREEN);
 
bmp_Screen.Height:=GetSystemMetrics(SM_CYSCREEN);
 
desk:=GetDC(GetDesktopWindow);
 
BitBlt(bmp_Screen.Canvas.Handle,0,0,
 
bmp_Screen.Width,bmp_Screen.Height,desk,0,0,SRCCOPY);
 
bmp_Screen.SaveToFile(Format('C:\images\screen\%d.bmp', [i]));
 
bmp_Screen.free;
 
showcursor(true);
 
end;
люди пишут что бывает что команда bmp_Screen.free; не всегда срабатывает... а если учесть что прога у меня делает около20 скринов в минут думаю не всегда сробатывает.
при остановке проги файл скринна экрана равен 0 тоесть пустой

дальше идёт поиск заранее сохронённых картинок в скриншоте

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function TForm1.CompareIMG: FRes;
var
  y, x, yy, xx: integer;
begin
 
  For y:=0 To Image1.Height-Image2.Height Do
  For x:=0 To Image1.Width-Image2.Width Do
  Begin
    Result.found:=true;
    For yy:=0 To Image2.Height-1 Do
    If Not Result.found Then Break Else
    For xx:=0 To Image2.Width-1 Do
    Begin
      Result.found:=(buf1[y+yy, x+xx]=buf2[yy,xx]);
      If Not Result.found Then Break;
    End;
    If Result.found Then
    begin
      Result.y:=y-1;
      Result.x:=x-1;
 
      Exit;
    end;
  End;
end;
возможно из-за того что прога пытаеться найти имейдж в пустом скрине и возникает ошибка


можно как то переписать поиск что бы он обробатывал эту ошибку и просто игнорил её?
ну как то так

Добавлено через 5 минут
или к скрину экрана что нить дописать что бы он наверочку скринил и освобождал буфер
0
angstrom
2471 / 1847 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
17.02.2013, 23:36 4
Ресурсы не освобождаются
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.Button4Click(Sender: TObject);
var
  desk : HDC;
  bmp_Screen : TBitmap;
begin
  if i = 20 then
    i := 1
  else
    inc(i);
 
  showcursor(false);
  bmp_Screen := TBitmap.Create;
  bmp_Screen.Width := GetSystemMetrics(SM_CXSCREEN);
  bmp_Screen.Height := GetSystemMetrics(SM_CYSCREEN);
  
  desk := GetDC(0);
  BitBlt(bmp_Screen.Canvas.Handle, 0, 0, bmp_Screen.Width, bmp_Screen.Height, desk, 0, 0, SRCCOPY);
  bmp_Screen.SaveToFile(Format('C:\images\screen\%d.bmp', [i]));
  bmp_Screen.free;
  ReleaseDC(desk, 0);
  showcursor(true);
end;
1
ANDRUHA88
0 / 0 / 0
Регистрация: 30.01.2013
Сообщений: 25
17.02.2013, 23:46  [ТС] 5
может после скрина добавить ещё проверку файла на кол м/байт
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
type TSize = Record
  Bait: byte;
end;
var
  F: File of TSize;
  Size: Integer;
begin
Size:=0;
 
      AssignFile(F, 'c:\images\image.bmp');
      Reset(F);
      while (not EOF(F)) do
        begin
          Size:=Size+1;
          seek(F, Size*1024*1024);
        end;
 
CloseFile(F);
   end;
если равен 0 то повторить?
0
angstrom
2471 / 1847 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
17.02.2013, 23:50 6
Зачем это?
Delphi
1
2
3
type TSize = Record
  Bait: byte;
end;
достаточно
Delphi
1
 Reset(F, 1);
0
ANDRUHA88
0 / 0 / 0
Регистрация: 30.01.2013
Сообщений: 25
18.02.2013, 00:13  [ТС] 7
ну так немного поправил жаль сразу непроверить но всё равно спасибо
0
angstrom
2471 / 1847 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
18.02.2013, 00:17 8
В коде где делается "снимок" экрана нет нужды прятать курсор, он всё равно не отобразится на "снимке".
0
ANDRUHA88
0 / 0 / 0
Регистрация: 30.01.2013
Сообщений: 25
18.02.2013, 09:42  [ТС] 9
не всё равно ошибку выдаёт приблизительно черз 3.5 часа работы. у меня поиск идёт загрузкой из файла ожет обойти это и искать из переменной?

Delphi
1
LoagIMG(buf1, Image1, Format('C:\images\screen\%d.bmp', [i]));

можно ли заменить путь к файлу переменной bmp_Screen ?


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure LoagIMG(var buffer: TBuf; img: TImage; Name: String);
var
  x,y,c: integer;
  p: pByteArray;
begin
  img.Picture.LoadFromFile(Name);
  img.Picture.Bitmap.PixelFormat:=pf24Bit; // pf8Bit;
  SetLength(buffer, img.Height, img.Width);
  for y:=0 to img.Height-1 do begin
    p:=img.Picture.Bitmap.ScanLine[y];
    for x:=0 to img.Width-1 do begin
      c:=((p[x*3+0] shl 8+p[x*3+1]) shl 8)+p[x*3+2];
      buffer[y,x]:=c;
    end;
  end;
end;
0
18.02.2013, 09:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2013, 09:42

Остановка цикла по нажатию кнопки
Подскажите, как реализовать остановку цикла (листание картинок), нажав кнопку?

Строковые функции. Остановка цикла.
Вот бьюсь я уже второй день над этими стрковыми функциями. Уж больно они глупо...

Остановка и возобновление выполнения кода
Здравствуйте! Подскажите пожалуйста, а может посоветуйте или даже дадите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru