Главная страница
    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.46 MB
Время: 0.034 c
15-1232187769
dmk
2009-01-17 13:22
2009.03.29
Что Вы используете для создания резервной копии HDD?


2-1234257405
Scot Storch
2009-02-10 12:16
2009.03.29
службы (сервисы)


15-1232302539
ocean
2009-01-18 21:15
2009.03.29
Вербер "Имрерия ангелов"


4-1205434654
Blacksus
2008-03-13 21:57
2009.03.29
Программное управление проводником Windows


15-1232476490
Putnik
2009-01-20 21:34
2009.03.29
Какие у Вас критерии на вопрос в форуме, на который Вы ответите?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский