Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Где промохнулся в коде 
:(
    Опции темы
Andreyzpr
Дата 2.6.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 4.2.2007
Где: Украина

Репутация: нет
Всего: 1



Введу в курс дела:
Я пишу чат.
Список пользователей у меня выводиться в TreeView.
Когда кто либо в чате начинает печатать текст, то возле его иконки в чате появляеться красная полосочка
Все это делаеться таким путем:
Когда ктото начинает печатать, его клиент посылает другим в чате команду, а те клиенты, которые получили, просто меняют иконку на другую - такую же как прежнюю только с красной полосочкой.
Когда юзер перестает печатать, то клиент посылает команду об окончании набора текста, и остальные клиенты возвращают прежнюю иконку, естествено уже без той черточки.
А проблема у меня такая
Где то я сделал ошибку в коде, что раз на раз посылаеться команда о начале набора текста
Вот код, касающиеся набора текста:

Код

procedure TForm1.TextMemoChange(Sender: TObject);
begin
PrintText;
end;

procedure TForm1.PrintText;
begin
ResetTimer.Enabled:=false;
if PrintIndex = 1 then
  begin
    ResetTimer.Enabled:=true;
  end else
    begin
     SendCommand('PrintYes', '*', '*', '');  //посылаем комадну о начале
     PrintIndex:=1;
     ResetTimer.Enabled:=true;
    end;
end;

procedure TForm1.ResetTimerTimer(Sender: TObject);
begin
SendCommand('PrintNo', '*', '*', '');  //Посылаем команду о завершении набора
PrintIndex:=0;
ResetTimer.Enabled:=false;
end;
 
//------------
//Обработка в сокете OnRead - читаем команды
if (command = 'PrintYes') then
  begin
    for i:=1 to UserList.Items.Count do
      begin
        name:=UserList.Items.Item[i-1].Text;
        if (Name = AuthorName) then
          begin
            UserList.Items.Item[i-1].ImageIndex:=UserList.Items[i-1].ImageIndex + 12;
            UserList.Items.Item[i-1].SelectedIndex:=UserList.Items[i-1].SelectedIndex + 12;
          end;
      end;
  end;
if (command = 'PrintNo') then
  begin
    for i:=1 to UserList.Items.Count do
      begin
        name:=UserList.Items.Item[i-1].Text;
        if (Name = AuthorName) then
          begin
            UserList.Items.Item[i-1].ImageIndex:=UserList.Items[i-1].ImageIndex - 12;
            UserList.Items.Item[i-1].SelectedIndex:=UserList.Items[i-1].SelectedIndex - 12;
          end;
      end;
  end;

Гляньте ктото свежим глазом в чем ошибка, из за чего оно бывает протормаживает
Ато знаете как, ошибка явная а я не вижу!
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 2.6.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Код

ResetTimer.Enabled:=false;    
if PrintIndex = 1 then    
  begin    
    ResetTimer.Enabled:=true;

Не нравится мне этот кусок кода. ИМХО коряво как-то. 
Таймер у тебя на сколько заряжен?


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Andreyzpr
Дата 2.6.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 4.2.2007
Где: Украина

Репутация: нет
Всего: 1



Цитата(Sunvas @ 2.6.2007,  17:38)
Код

ResetTimer.Enabled:=false;    
if PrintIndex = 1 then    
  begin    
    ResetTimer.Enabled:=true;

Не нравится мне этот кусок кода. ИМХО коряво как-то. 
Таймер у тебя на сколько заряжен?

таймер заряжен на 1,5 секунлы
Этож получаеться у каждого разная скорость печати
Ктото в одну секунду вводит 5 букв - ктото одну
тут же выходит что пока ты печатаешь клиент не отправит команду об окончании набора текста
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 2.6.2007, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Ну вот тебе и ошибка. После прохода 1.5 секунды вызывается код:
Код

SendCommand('PrintNo', '*', '*', '');  //Посылаем команду о завершении набора    
PrintIndex:=0;    <-обрати внимание на эту строку!!
ResetTimer.Enabled:=false;

Потом, пока человек печатает, благодаря тому, что PrintIndex=0, вызывается этот код:
Код

     SendCommand('PrintYes', '*', '*', '');  //посылаем комадну о начале



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Andreyzpr
Дата 2.6.2007, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 4.2.2007
Где: Украина

Репутация: нет
Всего: 1



Цитата(Sunvas @ 2.6.2007,  18:09)
Ну вот тебе и ошибка. После прохода 1.5 секунды вызывается код:
Код

SendCommand('PrintNo', '*', '*', '');  //Посылаем команду о завершении набора    
PrintIndex:=0;    <-обрати внимание на эту строку!!
ResetTimer.Enabled:=false;

Потом, пока человек печатает, благодаря тому, что PrintIndex=0, вызывается этот код:
Код

     SendCommand('PrintYes', '*', '*', '');  //посылаем комадну о начале

Чето я ниче не понял
Сматри для чего эта переменная:
Когда пользователь начинает печатать - а именно набрал первый символ - переменная стала равна 1
запускаеться таймер, который при срабатывании отправит команду о завершении набора текста.
Если Пользователь набирает второй символ, таймер, чтобы он не сработал - не отправил команду о завершении печати, отключаеться. Дальше идет проверка. Если эта переменная равна еденице - то уже не нужно отправлять команду о том что я набираю текст - она уже отправлена. После идет активация таймера - если пользователь закончит печатать через 1,5 секунды таймер подаст соответствующую команду.
Ввел пользователь третюю букву.
Смотрим - 
Деактивируем таймер - опять же, чтобы он не отправил команду о завершении набора текста! 
Дальше проверяем - если мы уже отправляли команду о начале набора - тогда молча запускаем обратно таймер.

Прошло 1,5 секунды, запущеный таймер сработал.
При срабатывании он переменную поставил в значение НОЛЬ, отправил команду о том что я закончил печатать.
Вдруг я решил еще точку поставить - короче говоря набрал исче один символ.
Смотрим код:
Если переменная равна нулю ТОГДА мы ОТПРАВЛЯЕМ команду о наборе текста и опять активируем таймер!
Тоесть этот код позволяет как можно меньше отправлять команд на сервер!
-----
Поэтому мы переменную ставим в ноль!
Я не литератор, могу не очь внятно объясниь, если чет непонятно спрашуй  smile 
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 2.6.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата

 что раз на раз посылаеться команда

Возможно я че-то не понял. Что означает "раз на раз"?


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Andreyzpr
Дата 2.6.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 4.2.2007
Где: Украина

Репутация: нет
Всего: 1



Цитата(Sunvas @ 2.6.2007,  18:29)
Цитата

 что раз на раз посылаеться команда

Возможно я че-то не понял. Что означает "раз на раз"?

Ну вот например
Запустил чат
Начинаешь печатать текст - а уведомления о наборе текста в чате нету.
Ждещь 1,5 секунды и продолжаешь печатать - появилось
Непонятно из за чего такой глюк - где я допустил ошибку!
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 2.6.2007, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



По твоему алгоритму вроде бы все правильно. Но попробуй для начала определить что именно глючит: отправка текста или твой алгоритм. Выводи состояния печати текста куда-нить в лабел и смотри что происходит.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Andreyzpr
Дата 2.6.2007, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 4.2.2007
Где: Украина

Репутация: нет
Всего: 1



Цитата(Sunvas @ 2.6.2007,  19:23)
По твоему алгоритму вроде бы все правильно. Но попробуй для начала определить что именно глючит: отправка текста или твой алгоритм. Выводи состояния печати текста куда-нить в лабел и смотри что происходит.

В лабеле работает!
Значит проблема в изменении иконки, чтоли!!!!!
А что там та такого?
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 2.6.2007, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Andreyzpr @  2.6.2007,  19:39 Найти цитируемый пост)
А что там та такого?

В 17й строке ошибка.  smile 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Andreyzpr
Дата 2.6.2007, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 4.2.2007
Где: Украина

Репутация: нет
Всего: 1



Цитата(Sunvas @ 2.6.2007,  19:45)
Цитата(Andreyzpr @  2.6.2007,  19:39 Найти цитируемый пост)
А что там та такого?

В 17й строке ошибка.  smile

17 строка - это end; ??????
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 2.6.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Andreyzpr @  2.6.2007,  19:53 Найти цитируемый пост)
17 строка - это end; ??????

http://forum.vingrad.ru/act-Help/CODE-01/HID-17.html 8е сверху.  smile 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Andreyzpr
Дата 2.6.2007, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 4.2.2007
Где: Украина

Репутация: нет
Всего: 1



Цитата(Sunvas @ 2.6.2007,  20:07)
Цитата(Andreyzpr @  2.6.2007,  19:53 Найти цитируемый пост)
17 строка - это end; ??????

http://forum.vingrad.ru/act-Help/CODE-01/HID-17.html 8е сверху.  smile

http://forum.vingrad.ru/forum/topic-154457...y1153383/0.html
Первый пост - пример кода!
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 2.6.2007, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Andreyzpr, в первом куске лишь хорошо описан лишь код получения состояния печатает/не печатает.
А вот сама отправка сообщения, его получение и изменения иконки - очень урезаны.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Alexeis
Дата 2.6.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459




M
Alexeis
Модератор: Название темы должно отражать ее суть!



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.