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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.12.2010, 08:23   #1
NiKiToZZ-
Пользователь
 
Регистрация: 28.12.2010
Сообщений: 28
Печаль

В общем есть на форме мемо. Заполняется посредством прихода информации от сервера. Но если не поставить очистку Memo перед получением следующего пучка информации, то они просто будут друг к другу "приплюсовываться", т.е инфо2 будет добавляться в мемо после инфо1. Так вот подскажите как сделать, чтобы при получение новой информации, мемо затирало прежнюю? Но без потерь! А то я сварганил такой код, но при получении новой инфы часть ее тоже пропадает.

Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket); 
var Received: string;
begin
  Received:=Socket.ReceiveText;
  Memo2.Clear;
  Memo2.Lines.Add(Received);
end;
P.S я не совсем новичок, но все же вы пожалуйста, если вам не сложно скидывайте готовый код. Объяснения приветствуются!

Почему все молчат( Неужели так сложно исправить код? Кому то вы целые задачи решаете а комуто несколько строчек исправить не можете

Последний раз редактировалось Stilet; 29.12.2010 в 12:04.
NiKiToZZ- вне форума
Старый 29.12.2010, 12:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Почему все молчат( Неужели так сложно исправить код?
Торопыжка был голодный. Его проктолог это оценил.

Цитата:
чтобы при получение новой информации, мемо затирало прежнюю
Memo2.Clear; это и делает.
Цитата:
Но без потерь!
Ты уж определись, чего тебе надо. Затер значит затер.
Цитата:
Кому то вы целые задачи решаете а комуто несколько строчек исправить не можете
Раз ты такой обидчивый без причины, то рекомендую заглянуть вот сюда:
http://www.delphiworld.narod.ru/_all_articles_.html
В раздел Сокеты - [27]. Там сказано что делать со склейками и потерями пакетов, оттуда и начни свое изучение.
I'm learning to live...
Stilet вне форума
Старый 29.12.2010, 12:20   #3
NiKiToZZ-
Пользователь
 
Регистрация: 28.12.2010
Сообщений: 28
По умолчанию

Уважаемый Stilet, дело не в том что теряются пакеты. Проблема в том что в один момент времени функция Memo2.Clear начинает свою работу по очищению содержания Memo2. И следующим действием идет добавление в Memo2 новой, только что пришедшей информации. Но в моей программе ее приходит много, около сотни строчек. Так вот инфо пришло, но Memo2.Clear стирает еще и половину новой информации. Я незнаю почему. Потери пакетов и инфы исключены. Если удалить строчку Memo2.Clear то вся информация приходит. Если вы знаете какую нибудь команду ожидания для Delphi может вы мне подскажете? Или подскажите чем несущественным можно заполнить время в период между выполнением Memo2.Clear и Memo2.Lines.Add(Socket.ReceiveText) ?
NiKiToZZ- вне форума
Старый 29.12.2010, 12:31   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Memo2.Clear + Memo2.Lines.Add(s) = Memo2.Text:=s;

Информация приходит блоками, НО не такими которыми думает(ожидает) программист, а такими как удобно серверу, клиенту и всем тем кто находится на пути и участвует в передаче.
И уж задача программиста определить начало НУЖНОГО ему блока.

if .... then memo2..clear;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума
Старый 29.12.2010, 12:35   #5
NiKiToZZ-
Пользователь
 
Регистрация: 28.12.2010
Сообщений: 28
По умолчанию

В общем код мне никто не подправит. Жаль. Придется дальше самому мучаться. Спасибо за помощь
NiKiToZZ- вне форума
Старый 29.12.2010, 12:55   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
NiKiToZZ-
В таком случае стирать инфу необходимо в другом событии, скажем в OnClientConnect, если ты конечно после посылки разрываешь связь.
Я бы делал так:
1) Открыл коннетк - у приемщика сработал OnClientConnect, где началась очистка мемо, причем для скорости можно отключить отрисовку:
Код:
 with Memo1 do begin
  Lines.BeginUpdate;Clear;Lines.EndUpdate;
 end;
А уж потом принимать данные, и писать их в Мемо.

Цитата:
Придется дальше самому мучаться.
В таком случае тема закрыта, всего доброго
I'm learning to live...
Stilet вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно разорвать АДСЛ соединение и сразу его востановить? AquaKlaster Работа с сетью в Delphi 3 30.06.2012 13:26
Как получить входящую/исходящую скороть сети/подключения? Зная его имя. TwiX Работа с сетью в Delphi 10 01.04.2010 19:17
Проблема с заполнением asd48 Помощь студентам 1 21.04.2009 00:21
Как установить в TEdit фразу "инкрементный поиск" с последующим его очищением на ввод символов? SkAndrew Общие вопросы Delphi 3 10.11.2008 02:38
сделать интерактивный тест чтоб по локальной сети его проходили сразу несколько человек CheGuevera БД в Delphi 4 10.06.2008 19:21