Главная страница
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.014 c
3-2813
victorbur
2003-05-15 12:43
2003.06.02
Как закачать в blob-поле jpg, tiff - файлы


1-3006
nesterovsky
2003-05-21 12:53
2003.06.02
Как перересовать одну запись в TListView и TTreeView


14-3091
Aferist
2003-05-13 18:32
2003.06.02
Катриджи от canon


1-2909
bloodman
2003-05-18 20:59
2003.06.02
Материал про


4-3204
Manix
2003-04-03 20:07
2003.06.02
SendInput и Delphi ???