![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
*ошибся в заголовке
Мне нужно создать связь между программами(!). То есть одна программа должна предоставить другой - изображение (генерируется с интервалом 1 сек). Как это лучше сделать? (я думал писать изображение на диск в файл, а другая просто его скачивать. Но проблема в том что нет события конца записи на диск.) |
|
#2
|
||||
|
||||
|
Цитата:
|
|
#3
|
|||
|
|||
|
программы будут на разных языках, и работать на разных компах.
первая на делфи(которая будет отправлять изображения) я думал сделать http сервер(делфи) и вторая просто скачивать изображение когда оно сохраниться, но походу тут трудности.. |
|
#4
|
|||
|
|||
|
Также можно и через буфер, socket (если на разных машинах).
|
|
#5
|
|||
|
|||
|
Обе программы на INDY. Первая клиент вторая сервер вот и всё, если в локалке то можно вообще использовать udp.
|
|
#6
|
||||
|
||||
|
Цитата:
А в чём трудности при скачивании по http? |
|
#7
|
||||
|
||||
|
Цитата:
|
|
#8
|
||||
|
||||
|
CreateRemoteComObject
|
|
#9
|
||||
|
||||
|
Можно через сообщения, через майлслоты, атомы, расшаренную память, можно у удаленного процесса вызвать метод класса. Я бы через вызов удаленной процедуры сделал и выдергивание картинки прямо из памяти процесса отправителя.
|
|
#10
|
|||
|
|||
|
спасибо за ответы. осталось только разобраться, что это все из перечисленного )
|
|
#11
|
|||
|
|||
|
в продолжении темы. новый вопрос:
У меня есть компонент IdHTTPServer. При запросе IdHTTPServer1CommandGet я отправляю с диска изображение: IdHTTPServer1.ServeFile(AThread, AResponseInfo, ProgramPath+'\1.bmp'); А можно ли как то отправить изображение прямо из компонента image? |
|
#12
|
|||
|
|||
|
Цитата:
в данный момент столкнулся с этим и меня, тоже, заинтересовал этот вопрос... |
|
#13
|
||||
|
||||
|
Цитата:
Цитата:
Код:
procedure TForm1.IdHTTPServer1CommandGet(Thread: TIdPeerThread;
RequestInfo: TIdHTTPRequestInfo; ResponseInfo: TIdHTTPResponseInfo);
var
sl: TStringList;
gc: TGraphicClass;
ext: String;
begin
.....
if AnsiSameText(RequestInfo.Document, '/image1') then
begin
gc := TGraphicClass(Image1.Picture.Graphic.ClassType); // Получаем класс графического объекта в Image1
ext := '.'+GraphicExtension(gc); // По этому классу определяем расширение файлов этого типа
ResponseInfo.ContentType := IdHTTPServer1.MIMETable.GetFileMIMEType(ext); // По расширению получаем строку "Content-Type"
ResponseInfo.ContentStream := TMemoryStream.Create; // Создаём новый поток
Image1.Picture.Graphic.SaveToStream(ResponseInfo.ContentStream); // И выгружаем в него картинку из Image1
end;
.....
end;p.p.s. Так как это просто пример, то тут отсутствуют проверки на корректность. В рабочем коде их конечно же нужно добавить. |