Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.062 c
2-1233348637
Тимоха
2009-01-30 23:50
2009.03.29
класс TThread и api


4-1207145739
kolj
2008-04-02 18:15
2009.03.29
Tapi -> lineanswer


4-1207309857
DiamondShark
2008-04-04 15:50
2009.03.29
Как узнать, что приложение запущено в терминальной сессии?


1-1208419242
312kbps
2008-04-17 12:00
2009.03.29
Событие смена активного окна в винде


15-1232174993
Tirael
2009-01-17 09:49
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский