|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Нестандартный переводчик\кодировщик
здравствуйте. есть скажем 2 кодировки. как сделать переброс из одной в другую? чтоб в левом окне программы я писал одно а в правом выходило на выбранной кодировке. и обратно. кодировка нестандартная...
в общем что то типа ввожу в левое окно АБВГД а в правом 12345 выводится. чтоб самому можно было настроить таблицы кодировки, то есть самому выбирать какой символ к какому привязывается |
#2
|
|||
|
|||
Самый очевидный способ - задать таблицу соответствия:
Код:
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
|
|||
|
|||
еще подсказали такое
Код:
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
|
||||
|
||||
Развлекайтесь:
Код:
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
|
|||
|
|||
спасибо... а как сделать чтоб пробелы еще делались? а то в одном окне делаешь пробел во втором не делается... и копирование вставка тоже не работает
|
#6
|
||||
|
||||
Видимо скопировали что-то с ошибками. У меня пробелы и любые символы нормально добавляются, как собственно и вставка из буфера.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
|||
|
|||
вы не могли бы свой проект скинуть... ничего не выходит...
|
#8
|
||||
|
||||
Вот пожалуйста.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
xardasdan (01.02.2016)
|
#9
|
|||
|
|||
не запускается. ошибка [Error] Project7.dpr(11): Undeclared identifier: 'MainFormOnTaskbar'
|
#10
|
||||
|
||||
удали эту строчку
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
xardasdan (01.02.2016)
|
#11
|
|||
|
|||
в обще пытался в вашем коде разобраться... заменил знаки на свои. и все. не срабатывает.... то есть в одну сторону работает в другую нет. и как изменить выбор с радиогруп на мемо? чтоб при печатании в мемо1 перевод в мемо2 а в мемо2 печатать наоборот в мемо1 перевод был обратный
Последний раз редактировалось xardasdan, 14.02.2016 в 17:36. |