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

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

В событии 2я процедура начинается раньше чем заканчивается 1я! [D7, WinXP]


Страницы:   1 2 3

RoLeX ©   (2006-10-24 15:43:00) 

Итак, предположим событие Button1Click. Между begin и end расположены две процедуры/функции:
procedure TForm1.Button1Click(Sender: TObject);
begin
procedure1;
procedure2;
end;

Так вот, у меня 2я процедура начинается раньше чем первая! Из-за этого ошибка. 1я процедура относительно продолжительная (делает скриншот экрана и сжимает его, а потом сохраняет файл).

Вот моя ситуация:
procedure GetScreenImage(AWidth, AHeight,AQuality: Integer);
var JPEG: TJPEGImage; bmp, tmpBitmap: TBitmap;
begin
JPEG:=TJPEGImage.Create;
Bmp:=TBitmap.Create;
tmpBitmap:=TBitmap.Create;
try
tmpBitmap.Width := AWidth;
tmpBitmap.Height := AHeight;
bmp.Width:=Screen.Width;
bmp.Height:=Screen.Height;
BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,GetDC(GetDesktopWindow), 0, 0, SRCCopy);
SetStretchBltMode(tmpBitmap.Canvas.Handle, STRETCH_HALFTONE);
StretchBlt(tmpBitmap.Canvas.Handle, 0, 0, AWidth, AHeight,bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, tmpBitmap.Canvas.CopyMode);
bmp.Assign(tmpBitmap);
JPEG.Assign(bmp);
JPEG.CompressionQuality:=AQuality;
jpeg.Compress;
JPEG.SaveToFile(ch+'\screen.jpg');
finally
JPEG.Free;
bmp.Free;
tmpBitmap.Free;
end;
end;

1-я процдура:GetScreenImage(StrToInt(plist[1]),StrToInt(plist[2]),StrToInt(plist[3]));

2-я процдура:
   with TFileStream.Create(ch+'\screen.jpg', fmOpenRead) do
   try
   file_size := Size;
   AThread.Connection.WriteBuffer(file_size, SizeOf(Int64));
   read_total := 0;
   while (read_total <> file_size) do
   begin
     read_current := Read(buf, 1024);
     AThread.Connection.WriteBuffer(buf, read_current);
     Inc(read_total, read_current);
   end;
   finally
     Free;
   end;


RoLeX   (2006-10-24 16:07:00) [41]

Что значит вру, если у меня иногда выскакивает ошибка (когда часто совершаю событие). Причём ошибка из-за того что 1я и 2я процедуры вроде как совершают "одновременный доступ" к файлу ch+'\screen.jpg'


Сергей М.   (2006-10-24 16:03:00) [42]


> 2я процедура начинается раньше чем первая


Врешь ведь)

Сам же написал - сначала procedure1, а уж следом procedure2 ..


Страницы:   1 2 3

Наверх

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