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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2010, 22:06   #1
ChEaTeR-abc
Заблокирован
 
Регистрация: 30.06.2010
Сообщений: 104
По умолчанию Програма проверки скорость печатания

Пишу программу для проверки скорости печатания.Есть текст, который нужно написать(каждое слово текста есть в массиве), есть Edit.После ввода очередного слова при нажатии пробела текст из Edit'а сверяется со следующим по очереди элементом массива.Если они совпадают то это слово в RichEdit'e выделяется зеленым, если нет - красным.После этого Edit очищается.Вот что я написал:

Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  I:integer;
begin
  IF Key=#32 THEN
    IF Edit1.Text=Texts[C] THEN
      begin
        RichEdit1.SelText;
        SearchText(RichEdit1, Texts[C]);
        RichEdit1.SelAttributes.Color:=clGreen;
      end
    ELSE
      begin
        SearchText(RichEdit1, Texts[C]);
        RichEdit1.SelAttributes.Color:=clRed;
      end;
    Edit1.Text:=''
end;


function TForm1.SearchText(RichEdit: TRichEdit;
  SearchText: string): boolean;
var
  StartPos, EndPos, Pos: integer;
begin
   StartPos := 0;
   with RichEdit do
   begin
      EndPos := Length( Text );
      Lines.BeginUpdate;
      while FindText( SearchText, StartPos, EndPos, [stMatchCase] ) <> -1 do
      begin
         EndPos := Length( Text ) - StartPos;
         Pos := FindText( SearchText, StartPos, Endpos, [stMatchCase] );
         Inc( StartPos, Length( SearchText ) );
         SetFocus;
         SelStart := Pos;
         SelLength := Length( SearchText );
         Break;
      end;
      Lines.EndUpdate;
   end;
end;
Небольшие пояснения к коду:
Texts - массив со словами текста
C - переменная, указывающая сколько слов уже введено и какой элемент массива нужно проверять при следующем нажатии пробела


Код не работает, не могу понять почему.Ошибок при компиляции нету, но при нажатии пробела ничего не происходит.Помогите написать рабочий код

PS.Добавил полный исходник
Вложения
Тип файла: rar Тест.rar (176.0 Кб, 4 просмотров)

Последний раз редактировалось ChEaTeR-abc; 11.09.2010 в 22:10.
ChEaTeR-abc вне форума Ответить с цитированием
Старый 12.09.2010, 08:24   #2
NeshSoft
Максим Николаев
Форумчанин
 
Аватар для NeshSoft
 
Регистрация: 15.02.2009
Сообщений: 170
По умолчанию

на вскидку не увидел где С увеличивается на 1
NeshSoft. Программирование на заказ для студентов. Delphi/Pascal. Подробнее на сайте neshsoft.narod.ru
NeshSoft вне форума Ответить с цитированием
Старый 12.09.2010, 08:59   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
при нажатии пробела текст из Edit'а сверяется со следующим по очереди элементом массива.
Edit1.Text=Texts[C]

здесь Edit1.Text текст включает пробел
а здесь Texts[C] пробела нет
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 12.09.2010, 09:08   #4
NeshSoft
Максим Николаев
Форумчанин
 
Аватар для NeshSoft
 
Регистрация: 15.02.2009
Сообщений: 170
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Edit1.Text=Texts[C]

здесь Edit1.Text текст включает пробел
а здесь Texts[C] пробела нет
Неа, при KeyPress не включается, событие происходит до включения символа в текст
NeshSoft. Программирование на заказ для студентов. Delphi/Pascal. Подробнее на сайте neshsoft.narod.ru
NeshSoft вне форума Ответить с цитированием
Старый 12.09.2010, 10:45   #5
ChEaTeR-abc
Заблокирован
 
Регистрация: 30.06.2010
Сообщений: 104
По умолчанию

NeshSoft, забыл про увеличение C, но здесь проблема явно не в этом.Добавил Inc(C);, ничего не изменилось.
Сейчас попробую ещё раз проследить переменные в дебаге

Добавил:почему-то перед сравнением C=количество слов в тексте, хотя перед этим я обнуляю её.
При дебаге заметил ещё одну проблему:в массиве перед каждым словом стоит символ #0

Последний раз редактировалось ChEaTeR-abc; 12.09.2010 в 11:01.
ChEaTeR-abc вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слепой десятипальцевый способ печатания ArtInt Свободное общение 8 13.12.2009 00:39
Функция проверки монотонности ax1d Общие вопросы Delphi 3 27.10.2009 12:44
система проверки знаний (php) andrey4623 PHP 3 11.04.2009 08:46
Макрос проверки ошибок Iskin Microsoft Office Excel 7 09.12.2008 14:00
Система проверки на человека Andrey1433 PHP 2 11.03.2008 14:13