Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.01.2016, 18:31
xardasdan xardasdan вне форума
Прохожий
 
Регистрация: 29.01.2016
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Нестандартный переводчик\кодировщик

здравствуйте. есть скажем 2 кодировки. как сделать переброс из одной в другую? чтоб в левом окне программы я писал одно а в правом выходило на выбранной кодировке. и обратно. кодировка нестандартная...
в общем что то типа ввожу в левое окно
АБВГД а в правом 12345 выводится. чтоб самому можно было настроить таблицы кодировки, то есть самому выбирать какой символ к какому привязывается
Ответить с цитированием
  #2  
Старый 29.01.2016, 18:50
Delphinaut Delphinaut вне форума
Прохожий
 
Регистрация: 28.01.2016
Сообщения: 11
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Самый очевидный способ - задать таблицу соответствия:

Код:
type TCode = record
     decodeChar, encodeChar: Char;
end;

const MAX_SYMBOLS = 27;

var codeTable: array[0..MAX_SYMBOLS - 1] of TCode;

и заполнить её:

Код:
codeTable[0].decodeChar := 'A';
codeTable[0].encodeChar := '1';

codeTable[1].decodeChar := 'B';
codeTable[1].encodeChar := '2';

и т.д.

Останется организовать перехват ввода в левое окно по ивенту onKeyUp.

Последний раз редактировалось Delphinaut, 29.01.2016 в 19:00.
Ответить с цитированием
  #3  
Старый 29.01.2016, 19:00
xardasdan xardasdan вне форума
Прохожий
 
Регистрация: 29.01.2016
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

еще подсказали такое
Код:
Arr [0..5] of char = ('А', 'Б', 'В', 'Г', 'Д');
//и второй массив, или строки
s1: string = ('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШ');
s2: string = ('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
...
//обработчик первого TMemo
begin
i:= Pos(Key, s1);
if i>0 then
Memo2.Text := Memo2.Text + s2[i];
end;
Админ: пользуемся тегами для оформления кода!

но. я еле еле в делфи... если вас не затруднит вы не могли бы дать полный текст...
форма, на ней 2 мемо...

Последний раз редактировалось Admin, 29.01.2016 в 19:08.
Ответить с цитированием
  #4  
Старый 29.01.2016, 22:13
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Развлекайтесь:
Код:
unit Unit8;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm8 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    CodeTable: TRadioGroup;
    procedure Memo1Change(Sender: TObject);
    procedure CodeTableClick(Sender: TObject);
  private

  public
    { Public declarations }
  end;

const
  ACodeTable: Array[0..1,1..33,1..2] of String = ((('а','a'),('б','b'),('в','v'),('г','g'),('д','d'),('е','e'),('ё','jo'),('ж','zh'),
                                                  ('з','z'),('и','i'),('й','j'),('к','k'),('л','l'),('м','m'),('н','n'),
                                                  ('о','o'),('п','p'),('р','r'),('с','s'),('т','t'),('у','uh'),('ф','f'),
                                                  ('х','h'),('ц','ch'),('ч','ch'),('ш','sh'),('щ','shh'),('ъ','#'),('ы','y'),
                                                  ('ь',''''),('э','je'),('ю','ju'),('я','ja')),
                                                 (('а','ka'),('б','zu'),('в','ru'),('г','ji'),('д','te'),('е','ku'),('ё','ku'),('ж','su'),
                                                  ('з','z'),('и','ki'),('й','ki'),('к','me'),('л','ta'),('м','rin'),('н','to'),
                                                  ('о','mo'),('п','no'),('р','shi'),('с','ari'),('т','chi'),('у','do'),('ф','lu'),
                                                  ('х','ri'),('ц','mi'),('ч','ke'),('ш','hi'),('щ','hi'),('ъ',''),('ы',''),
                                                  ('ь','zuk'),('э','mei'),('ю','fu'),('я','na')));

var
  Form8: TForm8;

implementation

{$R *.dfm}

procedure TForm8.CodeTableClick(Sender: TObject);
begin
 Memo1Change(Memo1)
end;

procedure TForm8.Memo1Change(Sender: TObject);
Var i,j: Integer;
    EncodeText: String;
    Skipped: Boolean;
begin
 if Sender = Memo1
 then begin
      EncodeText := '';
      for i := 1 to Length(Memo1.Text)
      do begin
         Skipped := True;
         for j := 1 to Length(ACodeTable[CodeTable.ItemIndex])
         do if Memo1.Text[i] = ACodeTable[CodeTable.ItemIndex,j, 1]
            then begin
                 EncodeText := EncodeText + ACodeTable[CodeTable.ItemIndex, j, 2];
                 Skipped := False;
                 Break;
                 end;
         if Skipped
         then EncodeText := EncodeText + Memo1.Text[i];
         end;
      Memo2.Text := EncodeText;
      end
 else begin

      end;
end;

end.
Код:
object Form8: TForm8
  Left = 0
  Top = 0
  Caption = 'Form8'
  ClientHeight = 339
  ClientWidth = 584
  Color = clBtnFace
  DoubleBuffered = True
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Memo1: TMemo
    Left = 8
    Top = 47
    Width = 568
    Height = 138
    TabOrder = 0
    OnChange = Memo1Change
  end
  object Memo2: TMemo
    Left = 8
    Top = 191
    Width = 568
    Height = 138
    Lines.Strings = (
      '')
    TabOrder = 1
  end
  object CodeTable: TRadioGroup
    Left = 8
    Top = 0
    Width = 153
    Height = 41
    Caption = #1042#1099#1073#1086#1088' '#1082#1086#1076#1080#1088#1086#1074#1082#1080
    Columns = 2
    ItemIndex = 0
    Items.Strings = (
      'Translit'
      #1071#1087#1086#1085#1089#1082#1080#1081)
    TabOrder = 2
    OnClick = CodeTableClick
  end
end
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 30.01.2016, 05:28
xardasdan xardasdan вне форума
Прохожий
 
Регистрация: 29.01.2016
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

спасибо... а как сделать чтоб пробелы еще делались? а то в одном окне делаешь пробел во втором не делается... и копирование вставка тоже не работает
Ответить с цитированием
  #6  
Старый 31.01.2016, 12:00
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Видимо скопировали что-то с ошибками. У меня пробелы и любые символы нормально добавляются, как собственно и вставка из буфера.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 01.02.2016, 12:35
xardasdan xardasdan вне форума
Прохожий
 
Регистрация: 29.01.2016
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

вы не могли бы свой проект скинуть... ничего не выходит...
Ответить с цитированием
  #8  
Старый 01.02.2016, 12:45
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Вот пожалуйста.
Вложения
Тип файла: rar Projects.rar (1.4 Кбайт, 3 просмотров)
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
xardasdan (01.02.2016)
  #9  
Старый 01.02.2016, 13:44
xardasdan xardasdan вне форума
Прохожий
 
Регистрация: 29.01.2016
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

не запускается. ошибка [Error] Project7.dpr(11): Undeclared identifier: 'MainFormOnTaskbar'
Ответить с цитированием
  #10  
Старый 01.02.2016, 13:52
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

удали эту строчку
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
xardasdan (01.02.2016)
  #11  
Старый 14.02.2016, 17:18
xardasdan xardasdan вне форума
Прохожий
 
Регистрация: 29.01.2016
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

в обще пытался в вашем коде разобраться... заменил знаки на свои. и все. не срабатывает.... то есть в одну сторону работает в другую нет. и как изменить выбор с радиогруп на мемо? чтоб при печатании в мемо1 перевод в мемо2 а в мемо2 печатать наоборот в мемо1 перевод был обратный

Последний раз редактировалось xardasdan, 14.02.2016 в 17:36.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:30.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter