Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 526

/ вопрос решён /

Здравствуйте, уважаемые эксперты! У меня такой вопрос: как реализовать "реакцию" программы на вводимый текст? к примеру есть список слов(команд/вопросов) и соответвующий ему список ответов. как сделать так, чтобы при вводе в TEdit слова из списка вопросов, программа выводила в лейбл или TMemo ответ на соответвующий вопрос?*
Я так подозреваю, зделать можно с помощью case. а как именно не предтавляю, спасибо заранее.

Phoenix Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Phoenix (статус: Посетитель)
Вопрос отправлен: 24 апреля 2007, 21:58
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

На делфи со строками case не работает. Но выход есть. Можно например подвязать к номеру строки. Например. Вы в edit вводите слово. Найти его индекс в мемо можно с помощью Memo1.Lines.IndexOf('слово'). Если слово не найдено - возвратиться -1. Хотя можно и проще сделать - завести масив записей виде
type Taskanser=record
ask:string;
answer:string;
end;
var questions:array of Taskanswer;
Но case здесь никаким боком. А вот в C# там можно делать Case по строкам (он правда там switch назывется).

Но если хочеться что то в виде case, тогда поможет такая конструкция
if s='test1' then begin
//test1
end else
if s='test2' then begin
//test2
end else
if s='test3' then begin
//test3
end else
//если ничего не нашлось
И на последок. Строки часто надо сравнивать без учёта регистра. Для этого есть чудная функция function SameText(str1,str2:string):boolean;

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 25 апреля 2007, 00:38
Оценка за ответ: 5

Комментарий к оценке: спасибо большое, пригодилось

Ответ #2. Отвечает эксперт: min@y™

Предлагаю использовать TStringList, а точнее, его свойства Names и Values. Изначально один раз заполнить список строками типа "Текст_вопроса=Текст ответа". А потом, при вводе вопроса, юзать метод IndexOfName(Текст_вопроса). Пишу пример на коленке:

Приложение:
  1. Index:= List.IndexOfName(Edit.Text);
  2. if Index <> -1
  3. then Label1.Caption:= List.Values[Index];


Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 25 апреля 2007, 08:32
Оценка за ответ: 5

Комментарий к оценке: отличная идея, но вопрос ниже

Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 26 апреля 2007, 16:01; участников в обсуждении: 2.
Phoenix

Phoenix (статус: Посетитель), 25 апреля 2007, 15:03 [#1]:

а как, к примеру тогда можно связать ValueListEditor с TStringList?
min@y™

min@y™ (статус: Доктор наук), 26 апреля 2007, 08:09 [#2]:

ValueListEditor я никогда не использовал (правда, знаю, что это такое), так что извини. Включи мозг, читай хэлп, смотри примеры.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Phoenix

Phoenix (статус: Посетитель), 26 апреля 2007, 16:01 [#3]:

спасибо! разобрался во всем!

31 января 2011, 19:26: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:02
Выполнено за 0.03 сек.