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

Вниз

Завершение строки в 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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.02 c
14-3172
Soft
2003-05-15 12:35
2003.06.02
Microsoft и Linux


14-3130
RIMMER
2003-05-15 00:11
2003.06.02
www.win-x.net.ru


14-3107
SKing
2003-05-14 10:54
2003.06.02
Изменение DBCheckBox по двойному клику?


1-2962
Dracula2000
2003-05-21 10:01
2003.06.02
Главное окно...


1-2934
Polar
2003-05-20 19:06
2003.06.02
Как сделать округление чисел? Уже достало 1.234567890Е0002!!!