Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 18.03.2011, 18:13
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

1. А чем вам мешают разные цвета?
2. From, To: TPoint; - координаты начала и конца линии, или координаты прямоугольник и т.п.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
  #17  
Старый 18.03.2011, 18:33
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

1- при наложении на паинтбокс последний наложеный цвет будет перекрывать тот что под ним,
2-
имеешь ввиду такого вида?
Код:
procedure Line(From, To, Attrib);
//атрибуты....
VScreen.Canvas.MoveTo(From);
 VScreen.Canvas.LineTo(To);
end;
хм ну у меня приходят только координаты места на которое кликнул человек, откуда начал и дальше куда он мышкой ведет
Ответить с цитированием
  #18  
Старый 18.03.2011, 18:41
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Ясно. про первый вариант догнал.
Ну а по второму... тебе важно видеть что рисует твой оппонент в процессе рисования? или (допустим) достаточно увидеть то, что он нарисовал "фигуру"?
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
  #19  
Старый 18.03.2011, 18:46
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

важно видеть процесс
Ответить с цитированием
  #20  
Старый 18.03.2011, 18:50
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Дело в том, что я не знаю как ты реализуешь процесс отрисовки и какой результат хочешь получить. Как у тебя происходит рисование? Что должно передаваться оппоненту?

К примеру MsPaint: когда ты рисуешь линию, ты нажатием мышки устанавливаешь точку начала и, пока ты не отпустишь мышь, можешь "двигать" конец линии в произвольном положении. Так вот в чем вопрос: должен ли оппонент видеть как ты "таскаешь" конец линии, или же достаточно увидеть что линия нарисовалась от сих до сих?... ну а потом следующая фигура.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
  #21  
Старый 18.03.2011, 18:57
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

хм я пока делаю лишь простую рисовку без вссяких прямых линий
Код:
  VScreen.Canvas.MoveTo(X, Y);
  ClientSocket1.Socket.SendText('movet¶'+IntToStr(X)+'='+IntToStr(Y));
PaintBox1Paint(nil);
при нажатии мышки на паинтбоксе
Код:
VScreen.Canvas.LineTo(X, Y);
      ClientSocket1.Socket.SendText('linet¶'+IntToStr(X)+'='+IntToStr(Y));
      PaintBox1Paint(nil);
это при ведении нажатой мышки по паинт бокусу, мы рисуем и отправляем человеку второму
и при получении такого пакета идет отрисовка вырезаются из него координаты и отрисовываем,
тоесть выясняется что это нажатие или ведение мышки, и рисуется
а и сам VScreen
Код:
  VScreen := TBitmap.Create;
  VScreen.Width:=PaintBox1.ClientWidth;
  VScreen.Height:=PaintBox1.ClientHeight;
  VScreen.Canvas.Pen.Color := clBlack;
  VScreen.Canvas.Pen.Width := 5;
Ответить с цитированием
  #22  
Старый 18.03.2011, 19:06
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Ну так надо отправлять X1, X2, Y1, Y2 для линии,
при OnMouseDown сохранять X1, Y1,
при OnMouseUp сохранять X2, Y2
и все это отправлять, а на принимающей стороне,
сохраняем координаты пера в, скажем, tmpX, tmpY, после рисуем линию, координаты которой приняли
MoveTo(X1,Y1);LineTo(X2,Y2);
и возвращаем перо на место: MoveTo(tmpX,tmpY); и тогда все будет норм.
Ответить с цитированием
  #23  
Старый 18.03.2011, 19:10
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

дак у меня нет таких линий как ты говоришь,
допустим я вожу вожу мышкой и при отпускании у меня сохранятся координаты от начала до конца получится прямая обычная
Ответить с цитированием
  #24  
Старый 18.03.2011, 19:12
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

А смысл пересылать МовТу, ЛайнТу? Может проще переслать координаты линии и все?
Я бы сделал так:
Код:
type
  TFigure = (fLine, fRectangle, fEllipse); // тип фигуры, которую рисуем (линия, прямоугольник, элипс)

  TDrawCommand = packed record // команда на рисование
                   PenColor, BrushColor: TColor;  // цвет кисти и цвет заливки
                   LineWidth: Integer; // толщина линии
                   BrushStyle: TBrushStyle; // стиль заливки
                   PenStyle: TPenStyle; // стиль линии
                   Figure: TFigure; // тип фигуры для отрисовки
                   Position: TRect; // положение фигуры
                 end

Впринципе, это уже готовый пакет для передачи, причем с фиксированнм размером!!!
Код:
 Отправка:
var
  cmd: TDrawCommand;
begin
  with cmd do
  begin
    // выставляем нужные значения
  end;
  ClientSocket1.Socket.SendBuf(dc, SizeOf(cmd));
end;

  Получение:
var
  cmd: TDrawCommand;
begin
  Socket.ReceiveBuf(cdm, SizeOf(cmd))
end;

После получения не надо разбирать полученные данные! Единствоенное, надо контроллировать размер приходящих данных и т.п. (см. как работать с сокетами). Ну и уже вся информация для рисования есть!

Поясню про Position: TRect;
1. Если у тебя тип фигуры fLine (линия), то Position.TopLeft - это начало линии (MoveTo), а Position.BottomRight - конец линии.
2. Если фигура fRectangle или fEllipse - это координаты прямоугольника, в который вписывается рисуемая фигура.

Я бы так делал.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
  #25  
Старый 18.03.2011, 19:20
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

чтото я не понял как это например применять при рисовке самому на паинт боксе
Ответить с цитированием
  #26  
Старый 18.03.2011, 20:29
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Поскольку все так плохо, пришлось сделать рабочий пример.
Итак, я не делал передачу по сети. Вместо этого у меня таймер раз в три секунды "выплевывает" команду на отрисовку случайно фигуры. Остальное все как в MsPaint
Я реализовал буферный объект, который получает команды от всех рисующих, будь то по сети, будь то рисующий в своем окне....ну или таймер как в примере
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.

Последний раз редактировалось dr. F.I.N., 12.01.2012 в 17:09.
Ответить с цитированием
  #27  
Старый 18.03.2011, 20:50
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

+
спасибо большое!
незнаю будет ли нормально работать так как надо завтра буду тогда пытаться сделать)
Ответить с цитированием
  #28  
Старый 19.03.2011, 14:37
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Ну, собственно, нечего было делать и решил я реализовать сетевую рисовалку. Ничего не изменял в первой версии программы, только добавил сеть. Тестировал на одном компе (1 сервер) с 10 клиентами. Все красиво и без ошибок прошло. Конечно сетевой вариант реализован не в идеале, но работает. Всю задачу за тебя решил
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.

Последний раз редактировалось dr. F.I.N., 12.01.2012 в 17:09.
Ответить с цитированием
  #29  
Старый 19.03.2011, 15:14
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Спасибо, жаль конечно, я хотел сам доделать) в принципе так и сделаю по примеру этому)
Спасибо еще раз)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:36.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025