Форум: "KOL";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
ВнизЗавершение строки в Editbox е Найти похожие ветки
← →
Kirill (2002-09-04 12:14) [0]Хочу реализовать сабж в KOL.
есть editbox, StrLst типа PStrLst, в котором хранятся слова.
Позьзователь вбивает в editbox начало какого-то слова и надо, чтобы автоматически добавлялось до завершения слова. Причем оставшаяся часть (созданная автоматически) была выделена.
Такая реализация у строки url в IE, но только там еще список выпадает, а мне список не надо.
← →
BorisMor (2002-09-04 13:02) [1]Не понятна в чем проблема.
Обрабатывать OnChange для editbox.
В обработке идет поиск введенного текста в StrLst обычным циклом
и функцию Pos
← →
Kirill (2002-09-04 13:21) [2]Ну находить у меня он находит, а как реализовать добавление, как я описал?
← →
Gandalf (2002-09-04 15:21) [3]EditBox1.Focused:=True;
EditBox1.SelStart:=1;
EditBox1.SelLength:=3;
← →
Kirill (2002-09-04 15:26) [4]Приведу код. Он находится в событии OnChar
edTemp{переменная}:=edBox{editbox}.Text+Key{var переменная в событии};
indx:=0;{переменная}
edSoft:="";{переменная}
while indx<StrIni{переменная PStrLst}.Count do begin
if Pos(edTemp,StrIni.Items[indx])=1 then
edSoft:=StrIni.Items[indx];
if Trim(edSoft)<>"" then break;
inc(indx);
end;
if Trim(edSoft)<>"" then begin
edBox.Text:=edSoft;
edBox.SelStart:=Length(edTemp);
edBox.SelLength:=Length(edSoft)-Length(edTemp);
end;
Так вот он не хочет правильно работать.
← →
Gandalf (2002-09-04 18:13) [5]Старые грабли... KOL тут не причем.
Вот смотри нажал клавишу, пошел OnChar.
Но сам Key еще не добавился к EditBox1.Text!
Ты меняешь текст, на EditBox1.Text+Key+Tail и его выделяешь.
Потом символ доходит. Добавляется к EditBox и ты получаешь,
EditBox1.Text+key+Tail+Key и выделение сбрасывается.
Разве у тебя не то получается? Что делаешь то и получаешь.
Надо либо OnChar+OnChange, либо Onkey* обрабатывать.
Только не в коем случаи не делай в OnChange editBox1.Text:=...;
Это бессконечный цикл!
Можно где-то так.
OnChar:
...
FindWordFromList
EditBox1.Text:=MySuperWord;
Char:=#0;
...
+
OnChange
...
FindWordFromList;
SetSel;
...
Только еще придется курсор помещать на место...
← →
Vladimir Kladov (2002-09-05 08:26) [6]Надо запоминать SelStart и после модификации восстанавливать, и
если управлять SelLength, то получается очень красиво: если
пользователь не заметил (смотрел только на клавиатуру), то все равно будет введено правильно. Да, еще надо отдельно реагировать на Backspace и Delete, иначе нельзя будет ввести A, если в словаре уже есть AB.
← →
BorisMor (2002-09-05 08:31) [7]program Project2;
uses
windows,messages,kol;
{$R *.RES}
var
form,ed:pControl;
i,j:integer;
b:boolean;
function GetEndText(text:string):string;
begin
// ну тут по идеи поиск text в PStrList
if text="12" then result:="34";
if text="12345" then result:="67";
end;
Procedure edChen(Dummy : Pointer; Sender: PControl);
var
s:string;
begin
s:=GetEndText(ed.Text); // текст который должен быть добавлен к основному
if b and (s<>"") then
begin
i:=Length(ed.Text);
j:=Length(s);
b:=false;
ed.Text := ed.Text+s;
end;
if (i<>0) and (j<>0) then
begin
ed.SelStart:=i;
ed.SelLength :=j;
end;
b:=true;
i:=0;
j:=0;
end;
begin
form := NewForm(Applet,"123");
ed:=NewEditBox(form,[]);
ed.OnChange := TOnEvent(MakeMethod(nil,@edChen));
b:=true;
run(form);
end.
---------------------------------------
Ну и как сказал Vladimir Kladov Backspace и Delete надо тоже обрабатывать. Я про это не подумал :)
← →
Kirill (2002-09-05 14:11) [8]
> Ну и как сказал Vladimir Kladov Backspace и Delete надо
> тоже обрабатывать. Я про это не подумал :)
Блин, не получается обработать ни Backspace, ни Delete
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c