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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2008, 14:22   #11
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию

Цитата:
Вместо F7 нажми F4 на строке, где хочешь остановиться
Спасибо за помощь alexBlack ,
Тоже не получается, там остановка не в одном месте, при пошаговой компиляции сразу появляются молули этих компонентов. Может прикрепить мне эту прогу ,может поможет мне)
Gauss вне форума Ответить с цитированием
Старый 04.03.2008, 14:25   #12
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию

Цитата:
то есть коды в строке memo1 не входят в указанный в case диапазон.
Если так, то почему это срабатывает

Цитата:
Код:
procedure TMainForm.Button1Click(Sender: TObject);   
begin   
memo2.Text:=dm.sr(#81)+dm.sr(#87)+dm.sr(#69)+dm.sr(#82)+dm.sr(#84)+dm.sr(#89)+dm.sr(#85)+dm.sr(#73)+dm.sr(#79)+dm.sr(#80)+dm.sr(#219)+dm.sr(#221)+dm.sr(#65)+dm.sr(#83)+dm.sr(#68)+dm.sr(#70);   
end;
Вроде, так он коды верно читает.
Gauss вне форума Ответить с цитированием
Старый 04.03.2008, 14:28   #13
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Gauss Посмотреть сообщение
Тоже не получается, там остановка не в одном месте, при пошаговой компиляции сразу появляются молули этих компонентов. Может прикрепить мне эту прогу ,может поможет мне)
У меня нет TNT -компонентов. Давай лучше подскажу как пройти пошагово.

После компиляции ставишь курсор на case и нажимаешь F4 (выполнить до строки курсора). Появится форма. На ней нажимаешь button. Как только будет вызвана функ-я SR программа остановится. Дальше используешь F7 / F8 как обычно.

Второй вариант - поставить точку прерывания.
alexBlack вне форума Ответить с цитированием
Старый 04.03.2008, 14:33   #14
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Gauss Посмотреть сообщение
Если так, то почему это срабатывает

memo2.Text:=dm.sr(#81)+dm.sr(#87)+d m.sr(#69)+dm.sr(#82)+dm.sr(#84)+dm. sr(#89)+dm.sr(#85)+dm.sr(#73)+dm.sr (#79)+dm.sr(#80)+dm.sr(#219)+dm.sr( #221)+dm.sr(#65)+dm.sr(#83)+dm.sr(# 68)+dm.sr(#70);
end;

Вроде, так он коды верно читает.
Здесь ты указываешь коды сам. Вовсе не факт, что TTNTMemo хранит именно в этом виде. Я думаю, что все-таки там используется unicode кодировка, поэтому если посмотреть строку

temp := memo1.text,

то скорее всего в temp будет что-то вроде

#0142#0243#0243 ....

то-есть два байта на символ. Какие придется выяснять отдельно.
Если не получается с пошаговым прохождением, можно даже так:


после temp := memo1.text пишем

ShowMessage( intToStr(ORD(temp[1]) );
ShowMessage( intToStr(ORD(temp[2]) );

Потом набираем в memo1 один символ и смотрим какой будет код и так для всех символов.
alexBlack вне форума Ответить с цитированием
Старый 04.03.2008, 14:41   #15
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию

ShowMessage( intToStr(ORD(temp[1]) );
ShowMessage( intToStr(ORD(temp[2]) );

Спасибо, эти сделал, код выдает другой, например пишу в мемо1 буквы
"q" для него дает 113
"ь" для него дает 117

То есть не соответствует тем что я написал, значит мне поменять коды клавиш в case нужно, под эти?
Gauss вне форума Ответить с цитированием
Старый 04.03.2008, 14:44   #16
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Да, пройтись по всему алфавиту и поставить нужные коды.
alexBlack вне форума Ответить с цитированием
Старый 04.03.2008, 14:48   #17
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию

Огромное спасибо alexBlack ! Очень признателен, я неделю мучался над этой проблемой. Теперь хоть знаю уже в чем проблема, буду заменять в Case коды символов на те, которые мне показывают
ShowMessage( intToStr(ORD(temp[1]) );
...
Очень благодарен!
Gauss вне форума Ответить с цитированием
Старый 04.03.2008, 15:24   #18
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию

А нельзя устранить такую проблему, которая вышла только что

Для двух разных азерб-их симолов выходят два одинаковых кода, например код 117 встретился дважды, потом 103, 63 и некторые другие. А в Case повторяющиеся коды не получается же.
Gauss вне форума Ответить с цитированием
Старый 04.03.2008, 15:31   #19
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Может все-таки все сложнее и символ задается двумя байтами ?

Самый простой способ определить:

пишем:

ShowMessage( intToStr( length(temp) ));
ShowMessage( intToStr( ord(temp[1]) ));
if length(temp) > 1 then ShowMessage( intToStr( ord(temp[2]) ));

В memo1 вводим только 1 символ и смотрим сколько символов получилось и какие коды.

Если есть двухбайтовые символы, функ-ю sr() придется переделать.
alexBlack вне форума Ответить с цитированием
Старый 04.03.2008, 15:46   #20
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Нашел в инете описание TTNTMemo.

Код:
property Text: WideString;
То есть нужно делать так:

Код:
temp : wideString;   !!!!
чтобы посмотреть код символа:

Код:
ShowMessage( IntToStr( word(temp[1]) ));
и функцию sr() переделать:

Код:
function sr(C:WideChar):Strirng;
begin
    case word(C) of 
       ....
    else 
            sr := s
    end;
end;
alexBlack вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить ошибку в задаче Vladislav_87 Паскаль, Turbo Pascal, PascalABC.NET 4 04.07.2008 12:27
Помогите исправить ошибку в задаче VANOLORD Паскаль, Turbo Pascal, PascalABC.NET 9 19.05.2008 22:16
Помогите исправить ошибку в коде... prizrak1390 Общие вопросы Delphi 4 26.04.2008 13:19
Помогите исправить ошибку Булат Общие вопросы Delphi 3 25.04.2008 10:01
помогите исправить ошибку. alen666 Паскаль, Turbo Pascal, PascalABC.NET 11 08.03.2008 16:43