|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Передача данных между StringGrid'ами от клиента к серверу
Подскажите как решить задачу. Собственно, на сервере и клиенте есть StringGrid с одинаковым количеством столбцов (5) и строк. Клиенту нужно отправить на сервер данные конкретной строки.
Делаю так, но на сервере все данные принимаются в одну ячейку скопом. На клиенте: Код:
procedure TForm1.Button1Click(Sender: TObject); var cc, rc, c, r: Integer; begin cc := Form1.StringGrid1.ColCount; rc := Form1.StringGrid1.RowCount; for r := 1 to rc -1 do for c := 0 to cc -1 do Form1.ClientSocket1.Socket.SendText(Form1.StringGrid1.Cells [c,r]); end; На сервере: Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var cc, rc, c, r: Integer; begin cc := Form1.StringGrid1.ColCount; rc := Form1.StringGrid1.RowCount; for r := 1 to rc -1 do for c := 0 to cc -1 do Form1.StringGrid1.Cells [c,r] := Socket.ReceiveText; end; |
#2
|
|||
|
|||
Наверное, всё же не в одну ячейку скопом, а во все ячейки одно и тоже значение, т.к. событие ServerSocket1ClientRead генерируется по приходу данных.
Лучше делать примерно так - завести переменную указывающую текущие координаты ячейки и при каждом событии чтения изменять эту переменную так, чтобы следующий читаемый текст попадал в нужную ячейку. А ещё лучше - с данными посылать эти самые координаты, например склеить в строку с разделителем, типа '0;0;100' - в ячейку 0/0 значение 100, на сервере эту строку разбирать и заполнять грид с гарантией. |
#3
|
||||
|
||||
По-видимому, в ServerSocket1ClientRead нужны внешние счётчики координат ячейки, напр. примерно так
Код:
var c, r: Integer; //при первой передаче их нужно установить как c:=0;r:=1; procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin Form1.StringGrid1.Cells [c,r] := Socket.ReceiveText; Inc(c); Inc(r); if c > 5 then c:= 0; if r > 5 then r:= 1; end; Код:
procedure TForm1.Button1Click(Sender: TObject); var cc, rc, c, r: Integer; begin cc := Form1.StringGrid1.ColCount; rc := Form1.StringGrid1.RowCount; for r := 1 to rc -1 do for c := 0 to cc -1 do Form1.ClientSocket1.Socket.SendText(IntToStr(c)+IntToStr(r)+Form1.StringGrid1.Cells[c,r]); end; Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var c, r: Integer; s: string; begin s:= Socket.ReceiveText; c:= StrToInt(s[1]); r:= StrToInt(s[2]); Form1.StringGrid1.Cells [c,r]:= Copy(s,3,Length(s)); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 15.07.2014 в 13:32. |
#4
|
|||
|
|||
Говорят можно через разделители. Может подскажет кто примером? Буду крайне благодарен!
|