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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2008, 13:04   #1
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию Помогите исправить ошибку пожал-та. Что то вроде транслитератора.

Здравствуйте, у меня проблема возникла с кодом ,если кто может помогите или подскажите как мне сделать. Мне надо в мемо1 писать текст на юникоде азербайджанскими буквами (их аскии коды я в тесте кода привел) и чтоб при нажатии на бутон в мемо2 было соответсвие с русскими буквами. (для ввода азерб-их букв под юникод в дельфи я использую Тнт-юникод компоненты, это думаю не имеет существенного влияния). Код вроде верный, да вот почему то не срабатывает
Код:
unit DMUnit;

interface

uses
  SysUtils, Classes, Dialogs;

type
  TDM = class(TDataModule)
  private
    { Private declarations }
  public
    { Public declarations }
     function sr(s:Char): string;
     procedure reader;
  end;

var
  DM: TDM;

implementation

uses MainUnit;

{$R *.dfm}

function TDM.sr(s:Char): string;
begin
  case s of
#81: sr:='й';
#87: sr:='ц';
#69: sr:='у';
#82: sr:='к';
#84: sr:='е';
#89: sr:='н';
#85: sr:='г';
#73: sr:='ш';
#79: sr:='щ';
#80: sr:='з';
#219: sr:='х';
#221: sr:='ъ';
#65: sr:='ф';
#83: sr:='ы';
#68: sr:='в';
#70: sr:='а';
#71: sr:='п';
#72: sr:='р';
#74: sr:='о';
#75: sr:='л';
#76: sr:='д';
#186: sr:='ж';
#192: sr:='э';
#90: sr:='я';
#88: sr:='ч';
#67: sr:='с';
#86: sr:='м';
#66: sr:='и';
#78: sr:='т';
#77: sr:='ь';
#188: sr:='б';
#190: sr:='ю';
#191: sr:='.';
  end;
end;

procedure TDM.reader;
var
 temp: string;
    i: byte;
begin
    temp := MainForm.memo1.Text;
  for i:=1 to length(temp) do
    begin
    MainForm.Memo2.Text := MainForm.Memo2.Text + sr(temp[i]);
        end;
end;

end.
Gauss вне форума Ответить с цитированием
Старый 04.03.2008, 13:32   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Gauss Посмотреть сообщение
Мне надо в мемо1 писать текст на юникоде азербайджанскими буквами (их аскии коды я в тесте кода привел)
Если Unicode, то символу соответствует 2 байта.

Для начала нужно посмотреть, а что в MainForm.memo1.Text;
Можно, например, забить один азерб. символ и посмотреть чему =
MainForm.memo1.Text.

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

alexBlack, извиняюсь если я не правильно выразился.
Дело в том, что я сам записываю в мемо1 на азерб-ом текст ,затем нажимаю на бутон и в мемо2 должен отобразится текст русскими буквами, который я сопостваил в Case посимвольно. Вот это не получается, я ваще не могу вникнуть, так как нуль реакции при нажатии.
А проверку для 1-го символа я делал! срабатывает! Точнее не так срабатывает.
Я уже в самом оклике бутона пишу первод кода для 1-го символа и он мне его русский вариант пишет, например это он нормально выводит =>

Код:
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 в 13:53.
Gauss вне форума Ответить с цитированием
Старый 04.03.2008, 13:52   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Нуль в смысле в memo2 вообще ничего непоявляется ?
тогда в sr пропущено

else
sr := s

в memo1 текст на азерб. как ? меняя charSet шрифта ? Тогда он просто отображается в другом виде, а код символа как был так и есть.

Попробуй пройти в пошаговом режиме процедуру sr. Попадаешь в нее вообще ? Какой код передается в параметре ? Если он в case ?
alexBlack вне форума Ответить с цитированием
Старый 04.03.2008, 14:00   #5
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
Нуль в смысле в memo2 вообще ничего непоявляется ?
тогда в sr пропущено

else
sr := s

в memo1 текст на азерб. как ? меняя charSet шрифта ? Тогда он просто отображается в другом виде, а код символа как был так и есть.

Попробуй пройти в пошаговом режиме процедуру sr. Попадаешь в нее вообще ? Какой код передается в параметре ? Если он в case ?
Да, в мемо2 ваще не появляется ничего.
В мемо1 я пишу текст на азерб-ом, просто меняю раскладку клавиатуры на азерб-ий и всё. А обычный мемо (дельфийский) не поддерживает юникод для азерб-их букв, я использую Тнт-компоненты (TntMemo1,Tntmemo2,...)
Я ТОЖЕ ХОЧУ пошагово проверить, вот это меня и бесит что не получается этого сделать из-за Тнт-компонентов, как нжимаю Ф7 сразу идет проверка кодов самих Тнт-компонетнов которые у меня на форме. открываются их модули, может можно их как то миновать я незнаю.
Gauss вне форума Ответить с цитированием
Старый 04.03.2008, 14:01   #6
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Gauss Посмотреть сообщение
например это он нормально выводит =>

Код:
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;
Если это работает, остается проверить как в memo1 хранится азерб. текст.

Поставиь прерывание на temp := MainForm.memo1.Text;
и посмотри ORD(temp[1])

Цитата:
Я ТОЖЕ ХОЧУ пошагово проверить, вот это меня и бесит что не получается этого сделать из-за Тнт-компонентов, как нжимаю Ф7 сразу идет проверка кодов самих Тнт-компонетнов которые у меня на форме. открываются их модули, может можно их как то миновать я незнаю.
Вместо F7 нажми F4 на строке, где хочешь остановиться

а else все-таки пропущено. Если поставишь текст появится

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

Цитата:
Вместо F7 нажми F4 на строке, где хочешь остановиться

а else все-таки пропущено. Если поставишь текст появится
Ок, это сделаю щас.
А else где мне надо поставить?
Gauss вне форума Ответить с цитированием
Старый 04.03.2008, 14:10   #8
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Gauss Посмотреть сообщение
А else где мне надо поставить?
Код:
case s of  
 ...
#191: sr:='.';   
 else 
      sr := s
  end;
alexBlack вне форума Ответить с цитированием
Старый 04.03.2008, 14:14   #9
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию

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

то есть коды в строке memo1 не входят в указанный в case диапазон.

А что с пошаговым прохождением ? какие коды передаются в sr ?
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