![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема! курсор прыгает в начало. [D7, NT4]
mobwar © (2006-01-05 23:18:00)
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
Memo1.Text:= StringReplace(Memo1.Text, 'ja', 'h',
[rfReplaceAll, rfIgnoreCase]);
Принцип простой, автоматически при написании текста, сочетание
ja меняется на h. Всё работает :) но как всегда есть но.
После изменения, курсор прыгает в начало строки и если писать дальше то буква остаётся с правой стороны курсора. Как предотвратить перескок курсора. Надо чтобы писалось как будто ничего и не происходило. Просто менялись буквы. Спасибо!
Fay (2006-01-06 11:44:00) [1]2 jack128 © (06.01.06 11:33) [9]
2 TStas © (06.01.06 1:35) [4]
Так, меня уже колбасит. Забудем про [5] и [10] - я как-то по диагонали посты читаю, видимо.
З.Ы.
Я, правда, не понял, каким боком всплыл OnKeyUp?
Fay (2006-01-06 11:39:00) [2]2 jack128 © (06.01.06 11:33) [9]
[2] не читал?
jack128 (2006-01-06 11:33:00) [3]jack128 © (06.01.06 11:32) [8]
Ты попробуй его изменить,
Имеется в виду тот Key, который в OnKeyUP передается..
jack128 (2006-01-06 11:32:00) [4]Fay © (06.01.06 1:53) [5]
Серьёзно? Круто! А как тогда объяснить то, что Key передаётся как var?
И что? Ты попробуй его изменить, от этого что, содержимое мемо изменится? ;)
mobwar (2006-01-06 10:47:00) [5]Текс... обманул всётаки программу, профи скажут что грубо но работает. Вот что получилось:
procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Memo1.Text:= StringReplace(Memo1.Text, 'ja', 'h',
[rfReplaceAll, rfIgnoreCase]);
Memo1.SelStart:=+2;
Memo1.SelStart:=-2;
end;
Спасибо за поддержку:)
Может кому пригодится.
mobwar (2006-01-06 10:24:00) [6]Ух спасибо, хоть есть информация к размышлению :)
По началу совсем скис.. теперь будем думать.
Fay (2006-01-06 01:53:00) [7]2 TStas © (06.01.06 1:35) [4]
Серьёзно? Круто! А как тогда объяснить то, что Key передаётся как var?
TStas (2006-01-06 01:35:00) [8]>procedure TForm1.Memo1KeyPress
, а надо бы в TForm1.Memo1KeyUp. Событие OnKeyPress происходит ДО того, как символ нарисовался в меме, а OnKeyUp - после
Fay (2006-01-06 00:01:00) [9]Проверку на SelStart=0 забыл. Но это же не мои проблемы, верно? 8)
Fay (2006-01-05 23:50:00) [10]2 mobwar (05.01.06 23:18)
Грубовато, конечно, зато бесплатно 8)
procedure TForm1.Memo1KeyPress(Sender : TObject; var Key : Char);
begin
if (Sender is TMemo) then
with TMemo(Sender) do
if (SelLength = 0) and (Key in ['a', 'A']) and (Text[SelStart] in ['j', 'J']) then
begin
Perform(WM_CHAR, VK_BACK, 0);
Key := 'h';
end;
end;
GanibalLector (2006-01-05 23:42:00) [11]Memo1.SelStart ???