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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2008, 20:23   #1
Pedro
Форумчанин
 
Аватар для Pedro
 
Регистрация: 25.03.2007
Сообщений: 166
Вопрос Передать Канву

Здраствуйте! Обьясните пожалуйста как
1. передать содержимое канвы или Image через idtcpserver/client?
2. Как с помощью них же передавать потоки(TStream), idtcpclient.writestream() что то не получается?
Заранее благодарен
Pedro вне форума Ответить с цитированием
Старый 27.04.2008, 21:22   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

что не получается ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 27.04.2008, 21:30   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Содержимое канвы это есть матрица цветов.
Код:
var
  i: Integer; // счетчик
  buf: Pointer; // буфер, матрица цветов, ее и шлете
  size: Integer; // размер буфера
  linesize: Integer; // размер в линии канвы

...

  linesize := TCanvas.Brush.Bitmap.Width;
  case TCanvas.Brush.Bitmap.PixelFormat of
    pf15bit, pf16bit: linesize := linesize * 2;
    pf24bit: linesize := linesize * 3;
    pf32bit: linesize := linesize * 4;
  end;
  size := linesize * TCanvas.Brush.Bitmap.Height;
  GetMem(buf, size);

  for i:= 0 to TCanvas.Brush.Bitmap.Height - 1 do
    move(TCanvas.Brush.Bitmap.ScanLine[i]^,
    Pointer(Integer(buf) + linesize * i)^, linesize);

  // тело отправки
  // WinSock.Send(s, buf^, size, 0);

  FreeMem(buf, size);
Вроде не ошибся Конечно, если там формат с использованием палитры, то лучше уже записать Bitmap в поток и отпарвить
BOBAH13 вне форума Ответить с цитированием
Старый 28.04.2008, 05:39   #4
Pedro
Форумчанин
 
Аватар для Pedro
 
Регистрация: 25.03.2007
Сообщений: 166
По умолчанию

Цитата:
лучше уже записать Bitmap в поток и отпарвить
Скажите как это сделать???
Я делаю так:
Код:
image1.picture.bitmap.savetostream(str)///записываю содержимое Image в поток(TMemoryStream)
Athread.connections.writestream(str,true,false,sizeof(str))///ну вроде посылаю поток
Клиент:

Код:
IdTcpClient.readstream(st,sizeof(st))/// st - TMemoryStream
Сервер продолжает работать, а клиент тупо виснет. Что я делаю неправильно???
Pedro вне форума Ответить с цитированием
Старый 28.04.2008, 09:52   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Один раз в жизни пробывал это Read/Writestream, мне они уж больно не понравились. Лучше уже функциями winsock'a. Ну вот, блокирующие сокеты:

Код:
uses WinSock;

function SendStream(s: TSocket; str: TStream): Boolean;
var
  r: Integer;
  buf: array[0..1023] of BYTE;
begin
  while (str.Position < str.Size) do
  begin
    r := str.Read(buf, SizeOf(buf));
    r := send(s, buf, r, 0);
    if (r = SOCKET_ERROR) then Break;
  end;
  Result := str.Position = str.Size;
end;
Вроде верно, написал... Начинает отправлять с позиции потока
BOBAH13 вне форума Ответить с цитированием
Старый 28.04.2008, 13:28   #6
Pedro
Форумчанин
 
Аватар для Pedro
 
Регистрация: 25.03.2007
Сообщений: 166
По умолчанию

Извините за тупой вопрос... А как принимать поток?
Pedro вне форума Ответить с цитированием
Старый 28.04.2008, 16:09   #7
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Берете литературу по WinSock + MSDN и по аналогии с проверкой получаемого результата recv делаете
BOBAH13 вне форума Ответить с цитированием
Старый 28.04.2008, 17:38   #8
Pedro
Форумчанин
 
Аватар для Pedro
 
Регистрация: 25.03.2007
Сообщений: 166
По умолчанию

Спасибо! Буду пробывать.
Pedro вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать параметр? Иллидан Общие вопросы Delphi 8 12.07.2008 12:57
DOM. как передать HTML разметку badfilin JavaScript, Ajax 3 26.04.2008 20:25
Как передать указатель в процедуру??? kate4ka Общие вопросы Delphi 1 17.03.2008 12:49
Как передать объект по наследству Legat Win Api 6 03.11.2007 11:19
передать переменную ar4i Общие вопросы Delphi 10 04.12.2006 14:30