Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2011, 21:47   #1
stasones
Пользователь
 
Регистрация: 09.01.2011
Сообщений: 13
По умолчанию TidHttpServer и закачка картинки.

Помогите разобраться. Пишу программу удаленного администрирования через веб-интерфейс. Использую TidHttpServer, который и обрабатывает запросы. Дело в том, что когда пытаюсь скачать картинку скриншота экрана, пишет ошибку "Access violation at address 00416EB6 in module 'ProjectMain.exe'. Write of address 00000004".
Вот ключевые моменты кода:
Код:
procedure TFormMain.IdHTTPServer1CommandGet(AThread: TIdPeerThread;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
  var
  AuthPassword, AuthUsername:string;
  action, temp:string;
  Jpg:TFileStream;
begin

...//Аутентификация

if (ARequestInfo.Document = '/jpg.jpg')  then
  Begin
  //    AResponseInfo.ContentStream := Jpg.Create('D:\jpg.jpg', fmOpenRead);//собственно ошибка идет отсюда. 
    AResponseInfo.ContentType:='image/jpeg';
    AResponseInfo.ContentStream := TFileStream.Create('D:\jpg.jpg', fmOpenRead);
    exit;
  end;
AResponseInfo.ContentText:=MemoHtml.Lines.Text;
action:=ARequestInfo.FormParams;
MemoLog.Lines.Add(action);
temp:=action;
delete(temp, 9, length(temp));
MemoLog.Lines.Add(temp);
...//дальше идет определение действия по полученному запросу(пока-что или отправка сообщения, или выключение компьютера, или загрузка скриншота)
else if temp='CLS1234=' then
 begin
 ScreenShot(Image1.Picture.BitMap);// делаю скриншот экрана
 ConvertBMP2JPEG;//конвертирую в jpg
 AResponseInfo.ContentType:='image/jpeg';
 MemoHtml.Lines[MemoHtml.Lines.Count-2]:='<img src="/jpg.jpg" alt="ScreenShoot">';//html код я сделал в memo
 AResponseInfo.ContentText:=MemoHtml.Lines.Text;
 MemoHtml.Lines[MemoHtml.Lines.Count-2]:='';
 end;
end;

procedure TFormMain.ScreenShot(Bild: TBitMap);
var
   c: TCanvas;
   r: TRect;
 begin
   c := TCanvas.Create;
   c.Handle := GetWindowDC(GetDesktopWindow);
   try
     r := Rect(0, 0, Screen.Width, Screen.Height);
     Bild.Width := Screen.Width;
     Bild.Height := Screen.Height;
     Bild.Canvas.CopyRect(r, c, r);
   finally
     ReleaseDC(0, c.Handle);
     c.Free;
   end;
 end;

procedure TFormMain.ConvertBMP2JPEG;
var
Bitmap: TBitmap;
JpegImg: TJpegImage;
begin
Bitmap := image1.Picture.Bitmap;
JpegImg := TJpegImage.Create;
JpegImg.Assign(Bitmap);
JpegImg.SaveToFile('D:\jpg.jpg');
JpegImg.Free;
Bitmap.Free
end;
А так же содержимое memo:
Код HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <HEAD>
	<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
    <TITLE>Админка</TITLE>
    </HEAD>
<BODY>
<FORM Align="CENTER" ACTION="/" METHOD=POST NAME="Mes">
<INPUT TYPE="submit" VALUE="Вывести сообщение:">
<INPUT TYPE="text" name="Message" SIZE="50" VALUE="Сообщение"><br>
</form>
<br>
<FORM Align="CENTER" ACTION="/" METHOD=POST NAME="Power">
<INPUT TYPE="submit" VALUE="Выключить компьютер"><br>
<INPUT TYPE="hidden" name="PowerOf" SIZE="1" VALUE="Выключение"><br>
</form>
<br>
<FORM Align="CENTER" ACTION="/jpg.jpg" METHOD=POST NAME="CLS1234">
<INPUT TYPE="submit" VALUE="Снимок экрана"><br>
<INPUT TYPE="hidden" name="CLS1234" SIZE="1" VALUE="CLS1234"><br>
</form>
</BODY>
</HTML>
Заранее спасибо!
Пс В гугл не слать, только что от туда...

Последний раз редактировалось stasones; 10.01.2011 в 16:34.
stasones вне форума Ответить с цитированием
Старый 10.01.2011, 02:42   #2
stasones
Пользователь
 
Регистрация: 09.01.2011
Сообщений: 13
По умолчанию

Судя по всему я не в тот раздел написал...
Модераторы! Если можно, перенесите эту тему в раздел "Работа с сетью в Delphi".
stasones вне форума Ответить с цитированием
Старый 10.01.2011, 02:47   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

TFileStream.Create
правильно обьекты создавать надо.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.01.2011, 16:36   #4
stasones
Пользователь
 
Регистрация: 09.01.2011
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
TFileStream.Create
правильно обьекты создавать надо.
Огромное спасибо!
stasones вне форума Ответить с цитированием
Старый 10.01.2011, 18:07   #5
stasones
Пользователь
 
Регистрация: 09.01.2011
Сообщений: 13
По умолчанию

Переделал код, загружаю скриншот - нормально. Загружаю еще раз-ошибка(Access violation at address...).
Код:
if (ARequestInfo.Document = '/jpg.jpg')  then
  Begin
    ScreenShot(Image1.Picture.BitMap);
    ConvertBMP2JPEG;
    AResponseInfo.ContentType:='image/jpeg';
    AResponseInfo.ContentStream := TFileStream.Create('D:\jpg.jpg', fmOpenRead);
    exit;
  end;
Код HTML:
<FORM Align="CENTER" ACTION="/jpg.jpg" METHOD=POST NAME="CLS1234">
<INPUT TYPE="submit" VALUE="Снимок экрана"><br>
<br>
</form>
Я чего-то недопонимаю..
stasones вне форума Ответить с цитированием
Старый 13.01.2011, 20:47   #6
stasones
Пользователь
 
Регистрация: 09.01.2011
Сообщений: 13
По умолчанию

Есть идеи?
Могу скинуть весь проект..
stasones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отображение картинки на кнопке WPF. Загрузка картинки из ресурсов. Проблема с Uri. Casper-SC Общие вопросы .NET 0 27.06.2010 23:11
Можно ли разрешить докачку для HTTP - сервера на основе TIdHTTPServer (Indy 9)? Slavka8800 Работа с сетью в Delphi 0 02.06.2009 22:07
TidHTTPServer не многозадачный? vitek123 Работа с сетью в Delphi 2 16.11.2007 08:32
закачка по ftp Lonix Работа с сетью в Delphi 1 06.11.2007 21:34
Непонятка или ошибка TIdHTTPServer Vovkin Работа с сетью в Delphi 7 09.01.2007 16:15