Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.01 c
7-3190
Jel
2003-04-02 12:28
2003.06.02
Повторный вызов RASDial


7-3193
Aleksandr
2003-04-01 11:56
2003.06.02
А надо ли как-то убивать Мьютекс по завершении работы?


1-2900
ikis
2003-05-22 13:42
2003.06.02
ActionMainMenuBar - построить на лету!


14-3054
Вася*
2003-05-15 22:20
2003.06.02
Помогите найти компоненту часиков.


1-3000
Dimich1978
2003-05-21 17:38
2003.06.02
Метод Монте-Карло





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский