Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.29;
Скачать: CL | DM;

Вниз

Замена двух, трёх символов на один   Найти похожие ветки 

 
mobwar   (2009-01-30 11:46) [0]

Добрый вам день.
Застрял на самом интересном месте.
Имею проблему с русской раскладкой и давно написал программу по типу транслита ру (на ней я и набираю в данный момент текст). Проблема в том что я использовал функцию OnKeyUp и StringReplace.
В данном случае, сделав опечатку я не имею возможности корректировать слово не стерев его, ибо при отпускании кнопки, каретка уходит в конец слова.
Сейчас заменил на такую функцию:
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if key="G"then key:="Г";
end;

Всё супер, но как сделать замену двух или трёх символов типа ja=я ju=ю,
на  лету и при этом не гнать каретку в конец написанного.
Зарание спасибо за варианты.


 
Anatoly Podgoretsky ©   (2009-01-30 11:51) [1]

> mobwar  (30.01.2009 11:46:00)  [0]

Delete/Insert


 
mobwar   (2009-01-30 11:51) [2]

Ах да, забыл вам изначальный вариант показать, может кто посоветует...

procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if GetKeyState(VK_SHIFT) < 0 then
 Memo1.Text:= StringReplace(Memo1.Text, "ЙО", "Ё",
                        [rfReplaceAll, rfIgnoreCase])
                        else
Memo1.Text:= StringReplace(Memo1.Text, "jo", "ё",
                        [rfReplaceAll, rfIgnoreCase]);
memo1.SelStart:=length(memo1.Text);
memo1.SetFocus;
end;


 
clickmaker ©   (2009-01-30 12:52) [3]

> memo1.SelStart:=length(memo1.Text);

PrevSelStart := memo1.SelStart;
...
memo1.SelStart:=PrevSelStart + корректировка на длину замененного текста


 
KSergey ©   (2009-01-30 13:08) [4]

Вообще-то по классике для подмены символов надо обрабатывать TWinControl.OnKeyPress.

Но раз стоит задача подменять не по одному символу, т.е. придется и длину строки и положение каретки корректировать, то лично я бы, чтобы ничего не напортачить и не искать обходные пути, сделал бы так: в OnKeyPress слал сам себе юзерской сообщение через PostMessage, а уже в нем фактически имея уже готовый полностью текст для подмен смотрел на положение каретки (SelStart) и левее нее любым желаемым образом менял символы в Memo. Во всяком случае тут уже руки будут полностью развязаны, в отличии от обработки стандартных сообщений, на которые система иногда затачивается реагировать определенным образом.


 
mobwar   (2009-01-30 14:23) [5]

третий день уже не слезаю с компа :)
Мыслю уже плоско, может можно отследить предыдущую букву и нажимая следующую просто заменить?
Например если стоит буква й нажимая на а просто менялось на я...
Брр.. во всяком случае спасибо, есть информация к размышлению..


 
Anatoly Podgoretsky ©   (2009-01-30 14:31) [6]

> mobwar  (30.01.2009 14:23:05)  [5]

KeyUp не возвращает символов (букв)



Страницы: 1 вся ветка

Текущий архив: 2009.03.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
15-1232751624
Четыре
2009-01-24 02:00
2009.03.29
Компонент добавляющий в заголовок окна кнопку справа Помогите


2-1233786331
Drowsy
2009-02-05 01:25
2009.03.29
Библиотеки на С++ для Дельфи.


2-1233870991
НосокСудьбы
2009-02-06 00:56
2009.03.29
Как правильно реализовать...


15-1232736848
Petr V. Abramov
2009-01-23 21:54
2009.03.29
МИЗЕР :)


15-1232623498
дед Маздай
2009-01-22 14:24
2009.03.29
Подскажите способ реализации