Показать сообщение отдельно
  #6  
Старый 17.03.2011, 17:52
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Код:
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if MouseDowned then
    begin
      X:=X+10;
      Y:=Y+10;
      VScreen.Canvas.LineTo(X, Y);
      serversocket1.socket.connections[1].sendtext('linet¶'+IntToStr(X)+'='+IntToStr(Y));
      PaintBox1Paint(nil);
    end;
end;

Вот при движении рисую и отправляю координаты, там все отрисовывается как надо, но в если я буду отправлять с атрибутами и прочим, то в это время же, рисовать человек у себя тоже может, и выйдет что если сменить атрибут то сменится и у тебя, и в это время могут то линии другие начиркаться, то твой цвет в другой перейдет.

Поэтому я и хотел сделать две переменные.
Код:
  VScreen: T8Bit;
  VScreen2: T8Bit;
Одна твоя, другая второго человека, чтобы косяков не было такихю

Код:
VScreen := T8Bit.Create;
  VScreen.Init(PaintBox1.Width + 20, PaintBox1.Height + 20);
  VScreen.Canvas.Pen.Color := clBlack;
  VScreen.Canvas.Pen.Width := 5;
VScreen2:= T8Bit.Create;
  VScreen2.Init(PaintBox1.Width + 20, PaintBox1.Height + 20);
  VScreen2.Canvas.Pen.Color := clBlack;
  VScreen2.Canvas.Pen.Width := 5;

создаются они так

сам класс 8бит

Код:
T8Bit = class(TBitmap)   // класс восьмибитной картинки с градациями серого
  private
    Scan: array[0..1023{этим числом ограничена максимальная высота}] of PByte;
    BitHeight, BitWidth:Integer;
  public
    constructor Create; override;
    procedure Init(AWidth, AHeight: Integer);
    procedure Clear(Color: Byte);
  end;

init процедура что при создании
Код:
procedure T8Bit.Init(AWidth, AHeight: Integer);
var i:Integer;
    Pal:PLogPalette;
    NewPal:HPalette;
begin
  PixelFormat := pf8bit;
  Width := AWidth;
  Height := AHeight;
  BitHeight:=AHeight;
  BitWidth:=AWidth;
  GetMem(Pal, 256*4 + 40);
  Pal.palVersion := $300;
  Pal.palNumEntries := 256;

  for i := 0 to 255 do
  begin
    Pal.palPalEntry[i].peRed :=   Byte(i);
    Pal.palPalEntry[i].peGreen := Byte(i);
    Pal.palPalEntry[i].peBlue :=  Byte(i);
    Pal.palPalEntry[i].peFlags:=0;
  end;
  NewPal := CreatePalette( Pal^ );
  Palette := NewPal;
  GDIFlush;
  FreeMem(Pal);


  for i:=0 to BitHeight-1 do
    begin
      Scan[i]:=ScanLine[i];
      FillChar(PByte(Scan[i])^, AWidth, 255);
    end;

end;

А в приеме же из пакета вырезаются координаты и отрисовываются, клиентская при рисовке отправляет, и серверная тоже при рисовке отправляет, при получении обе отрисовывают.
Ответить с цитированием