| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Где промохнулся в коде |
| Автор: Andreyzpr 2.6.2007, 15:42 | ||
| Введу в курс дела: Я пишу чат. Список пользователей у меня выводиться в TreeView. Когда кто либо в чате начинает печатать текст, то возле его иконки в чате появляеться красная полосочка Все это делаеться таким путем: Когда ктото начинает печатать, его клиент посылает другим в чате команду, а те клиенты, которые получили, просто меняют иконку на другую - такую же как прежнюю только с красной полосочкой. Когда юзер перестает печатать, то клиент посылает команду об окончании набора текста, и остальные клиенты возвращают прежнюю иконку, естествено уже без той черточки. А проблема у меня такая Где то я сделал ошибку в коде, что раз на раз посылаеться команда о начале набора текста Вот код, касающиеся набора текста:
Гляньте ктото свежим глазом в чем ошибка, из за чего оно бывает протормаживает Ато знаете как, ошибка явная а я не вижу! |
| Автор: Sunvas 2.6.2007, 17:38 | ||
Не нравится мне этот кусок кода. ИМХО коряво как-то. Таймер у тебя на сколько заряжен? |
| Автор: Andreyzpr 2.6.2007, 17:50 | ||||
таймер заряжен на 1,5 секунлы Этож получаеться у каждого разная скорость печати Ктото в одну секунду вводит 5 букв - ктото одну тут же выходит что пока ты печатаешь клиент не отправит команду об окончании набора текста |
| Автор: Sunvas 2.6.2007, 18:09 | ||||
Ну вот тебе и ошибка. После прохода 1.5 секунды вызывается код:
Потом, пока человек печатает, благодаря тому, что PrintIndex=0, вызывается этот код:
|
| Автор: Andreyzpr 2.6.2007, 18:21 | ||||||
Чето я ниче не понял Сматри для чего эта переменная: Когда пользователь начинает печатать - а именно набрал первый символ - переменная стала равна 1 запускаеться таймер, который при срабатывании отправит команду о завершении набора текста. Если Пользователь набирает второй символ, таймер, чтобы он не сработал - не отправил команду о завершении печати, отключаеться. Дальше идет проверка. Если эта переменная равна еденице - то уже не нужно отправлять команду о том что я набираю текст - она уже отправлена. После идет активация таймера - если пользователь закончит печатать через 1,5 секунды таймер подаст соответствующую команду. Ввел пользователь третюю букву. Смотрим - Деактивируем таймер - опять же, чтобы он не отправил команду о завершении набора текста! Дальше проверяем - если мы уже отправляли команду о начале набора - тогда молча запускаем обратно таймер. Прошло 1,5 секунды, запущеный таймер сработал. При срабатывании он переменную поставил в значение НОЛЬ, отправил команду о том что я закончил печатать. Вдруг я решил еще точку поставить - короче говоря набрал исче один символ. Смотрим код: Если переменная равна нулю ТОГДА мы ОТПРАВЛЯЕМ команду о наборе текста и опять активируем таймер! Тоесть этот код позволяет как можно меньше отправлять команд на сервер! ----- Поэтому мы переменную ставим в ноль! Я не литератор, могу не очь внятно объясниь, если чет непонятно спрашуй |
| Автор: Sunvas 2.6.2007, 18:29 | ||
Возможно я че-то не понял. Что означает "раз на раз"? |
| Автор: Andreyzpr 2.6.2007, 18:38 | ||||
Ну вот например Запустил чат Начинаешь печатать текст - а уведомления о наборе текста в чате нету. Ждещь 1,5 секунды и продолжаешь печатать - появилось Непонятно из за чего такой глюк - где я допустил ошибку! |
| Автор: Sunvas 2.6.2007, 19:23 |
| По твоему алгоритму вроде бы все правильно. Но попробуй для начала определить что именно глючит: отправка текста или твой алгоритм. Выводи состояния печати текста куда-нить в лабел и смотри что происходит. |
| Автор: Andreyzpr 2.6.2007, 19:39 | ||
В лабеле работает! Значит проблема в изменении иконки, чтоли!!!!! А что там та такого? |
| Автор: Sunvas 2.6.2007, 19:45 |
В 17й строке ошибка. |
| Автор: Andreyzpr 2.6.2007, 19:53 | ||
17 строка - это end; ?????? |
| Автор: Sunvas 2.6.2007, 20:07 |
http://forum.vingrad.ru/act-Help/CODE-01/HID-17.html 8е сверху. |
| Автор: Andreyzpr 2.6.2007, 20:18 | ||
http://forum.vingrad.ru/forum/topic-154457/anchor-entry1153383/0.html Первый пост - пример кода! |
| Автор: Sunvas 2.6.2007, 21:00 |
| Andreyzpr, в первом куске лишь хорошо описан лишь код получения состояния печатает/не печатает. А вот сама отправка сообщения, его получение и изменения иконки - очень урезаны. |
| Автор: Alexeis 2.6.2007, 21:27 | ||
|
| Автор: Andreyzpr 4.6.2007, 14:13 |
| А вот покажи пример, как можно было назвать эту тему? Добавлено через 57 секунд Суть темы такова: я допустил ошибку в коде, хочу чтобы мне с этим помогли! Вот от сути и пошло название: Где промохнулся в коде!!!!!!! Что еще не так!!!!!!!! |
| Автор: Alexeis 4.6.2007, 14:38 |
| Andreyzpr, мы не в детском саду, чтобы кричать "помогите я не знаю что у меня случилось, но что-то не работает! Нужно проводить анализ своих ошибок и по крайней мере локализовать причину ошибки, и если после этого не удалось найти причину, то только тогда спрашивать указывая на использованные методы или технологии которые, вероятно, неверно используются. Формулировать задачу нужно нормально, тогда и название получиться само собой. |