![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
||||
|
||||
![]() 1. А чем вам мешают разные цвета?
2. From, To: TPoint; - координаты начала и конца линии, или координаты прямоугольник и т.п. Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#17
|
||||
|
||||
![]() 1- при наложении на паинтбокс последний наложеный цвет будет перекрывать тот что под ним,
2- имеешь ввиду такого вида? Код:
procedure Line(From, To, Attrib); //атрибуты.... VScreen.Canvas.MoveTo(From); VScreen.Canvas.LineTo(To); end; |
#18
|
||||
|
||||
![]() Ясно. про первый вариант догнал.
Ну а по второму... тебе важно видеть что рисует твой оппонент в процессе рисования? или (допустим) достаточно увидеть то, что он нарисовал "фигуру"? Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#19
|
||||
|
||||
![]() важно видеть процесс
|
#20
|
||||
|
||||
![]() Дело в том, что я не знаю как ты реализуешь процесс отрисовки и какой результат хочешь получить. Как у тебя происходит рисование? Что должно передаваться оппоненту?
К примеру MsPaint: когда ты рисуешь линию, ты нажатием мышки устанавливаешь точку начала и, пока ты не отпустишь мышь, можешь "двигать" конец линии в произвольном положении. Так вот в чем вопрос: должен ли оппонент видеть как ты "таскаешь" конец линии, или же достаточно увидеть что линия нарисовалась от сих до сих?... ну а потом следующая фигура. Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#21
|
||||
|
||||
![]() хм я пока делаю лишь простую рисовку без вссяких прямых линий
Код:
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
|
|||
|
|||
![]() Ну так надо отправлять X1, X2, Y1, Y2 для линии,
при OnMouseDown сохранять X1, Y1, при OnMouseUp сохранять X2, Y2 и все это отправлять, а на принимающей стороне, сохраняем координаты пера в, скажем, tmpX, tmpY, после рисуем линию, координаты которой приняли MoveTo(X1,Y1);LineTo(X2,Y2); и возвращаем перо на место: MoveTo(tmpX,tmpY); и тогда все будет норм. |
#23
|
||||
|
||||
![]() дак у меня нет таких линий как ты говоришь,
допустим я вожу вожу мышкой и при отпускании у меня сохранятся координаты от начала до конца получится прямая обычная |
#24
|
||||
|
||||
![]() А смысл пересылать МовТу, ЛайнТу? Может проще переслать координаты линии и все?
Я бы сделал так: Код:
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
|
||||
|
||||
![]() чтото я не понял как это например применять при рисовке самому на паинт боксе
|
#26
|
||||
|
||||
![]() Поскольку все так плохо, пришлось сделать рабочий пример.
Итак, я не делал передачу по сети. Вместо этого у меня таймер раз в три секунды "выплевывает" команду на отрисовку случайно фигуры. Остальное все как в MsPaint ![]() Я реализовал буферный объект, который получает команды от всех рисующих, будь то по сети, будь то рисующий в своем окне....ну или таймер как в примере ![]() Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. Последний раз редактировалось dr. F.I.N., 12.01.2012 в 17:09. |
#27
|
||||
|
||||
![]() +
спасибо большое! незнаю будет ли нормально работать так как надо завтра буду тогда пытаться сделать) |
#28
|
||||
|
||||
![]() Ну, собственно, нечего было делать и решил я реализовать сетевую рисовалку. Ничего не изменял в первой версии программы, только добавил сеть. Тестировал на одном компе (1 сервер) с 10 клиентами. Все красиво и без ошибок прошло. Конечно сетевой вариант реализован не в идеале, но работает. Всю задачу за тебя решил
![]() Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. Последний раз редактировалось dr. F.I.N., 12.01.2012 в 17:09. |
#29
|
||||
|
||||
![]() Спасибо, жаль конечно, я хотел сам доделать) в принципе так и сделаю по примеру этому)
Спасибо еще раз) |