Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Вниз

Где взять combobox c историей 


AlexR_R   (2002-01-22 17:53) [0]

Нужен такой же контрол, как Address в IE.
Народ посоветуйте, где такое поискать.



AlexR_R   (2002-01-22 17:57) [1]

Sorry, описался.
Не с историей, а с быстрым поиском, чтоб на нажатие нескольких букв были только те items, которые с них начинаются



Феликс   (2002-01-22 18:07) [2]

Возможно, я не прав, но в IE стандартный combobox! Если искать, то только в самом comboboxe! А если нет, и это какой-то спец. космический компонент,то можно использовать listbox, в него записывать все адреса, потом осуществлять в листбох поиск и кидать параметры в комбобох. Метод фашисткий, но действенный.



AlexR_R   (2002-01-22 18:19) [3]

Во-первых он не стандартный. Если начинаешь что-то писать, то снизу появляется список, который включает только те адреса, которые начинаются с введенных букв. То что выпадает, даче не часть comboboxa. По-крайней мере ее можно уменьшить/увеличить
за правый нижний угол.

А во- вторых меня устроил бы и стандартный, только как сделать
чтоб в списке были только отфильтрованные items.

Я сейчас попробовал на OnChange заполнять список по новому, получается жутко криво.

Код примерно такой



procedure TFrame3.ResetHist;
var i : integer;
s : String;
begin
ComboBox1.Items.BeginUpdate;
try
s := ComboBox1.Text;
ComboBox1.Items.Clear;
for i := 0 to Items.Count - 1 do //Items -- это список всех строк
if Pos(s, Items.Strings[i]) = 1 then
ComboBox1.Items.Add(Items.Strings[i]);
finally
ComboBox1.Items.EndUpdate;
ComboBox1.DroppedDown := True;
end;
end;


Кривизна в том, что исчезает мышь!
И еще OnChange возникает когда что-то выбрали,
соответственно после этого список выпадает только
с одним итемом. Но это наверно еще как-то можно побороть.



Dimka Maslov   (2002-01-22 18:46) [4]

Для бысрого поиска в ComboBox подходит такой код:

procedure TForm1.ComboBox1Change(Sender: TObject);
var
i: Integer;
S: String;
begin
S:=ComboBox1.Text;
if FLastLength<Length(S) then for i:=0 to ComboBox1.Items.Count - 1 do begin
if AnsiSameText(S, Copy(hcbRecipients.Items[i], 1, Length(S))) then begin //или AnsiSameStr (сравнение с учётом регистра)
ComboBox1.Text:=ComboBox1.Items[i];
ComboBox1.SelStart:=Length(S);
ComboBox1.SelLength:=Length(ComboBox1.Text)-Length(S);
Break;
end;
end;
FLastLength:=Length(ComboBox1.Text);
end;



AlexR_R   (2002-01-22 18:50) [5]

Спасиб, в принципе уже что-то, а вот как сделать удаление не нужных?



MBo   (2002-01-23 09:07) [6]

можно хранить в списке, и выбирать нужные
посмотри еще
http://www.lmc-mediaagentur.de/dpool/vcl11.htm

procedure TForm1.FormCreate(Sender: TObject);
begin
sl:=tstringlist.create;
sl.loadfromfile("e:\qqq.txt")
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
var s:string;
i:integer;
begin
s:=combobox1.Text;
combobox1.Items.Clear;
for i:=0 to sl.count-1 do begin
if pos(s,sl[i])>0 then combobox1.items.add(sl[i]);//нужное условие
end;
combobox1.DroppedDown:=true;
end;



nikkie   (2002-01-23 09:19) [7]

http://www.euromind.com/iedelphi/ieaddress.htm



AlexR_R   (2002-01-23 16:02) [8]

Спасибо всем ответившим.
Более менее разобрался.
Есть куча комбобоксов, которые реализуют AvtoCompletion
примерно в том же стиле, как предложил Dimka Maslov

2 nikkie это как раз то о чем я говорил, правда пока не удалось его заставить работать со своими строками. Все лезет в regestry.
Даже не знаю, может все-таки получится. Ты не в курсе?
Т.е. items в сам комбобокс уже не добавляет, а когда начинает искать в своих дебрях по введенной строке, то ищет по истории IE.

2MBo Спасибо за ссылку, а код по моему не сильно отличается от того, что я написал несколько сообщений назад. На фрейме это работает очень криво. Может у тебя на форме работало?

Thanks



nikkie   (2002-01-25 09:17) [9]

поток информации явно превышает мою способность ее переваривать :(

вчера совершенно случайно наткнулся на такой текст в своем загашнике. источник не помню - какая-то рассылка.

How do I add the autocomplete feature I"ve seen in IE text fields?

There is a little known function called SHAutoComplete that resides in
the shwlapi.dll. Calling this function with the handle of an edit field and
the appropriate flags enables the IE autocomplete feature.

One important thing to keep in mind is that this function works only after
you call the ole-related CoInitialize (or CoInitializeEx) function.
This task is accomplished by the initialization section of the ComObj unit.

Here is a sample unit that shows how to use such feature:

unit AutoCompleteUnit;

interface

uses Windows, StdCtrls, ComObj;

Const
SHACF_DEFAULT = $0;
SHACF_FILESYSTEM = $1;
SHACF_URLHISTORY = $2;
SHACF_URLMRU = $4;
SHACF_URLALL = (SHACF_URLHISTORY Or SHACF_URLMRU);
SHACF_AUTOSUGGEST_FORCE_ON = $10000000;
SHACF_AUTOSUGGEST_FORCE_OFF = $20000000;
SHACF_AUTOAPPEND_FORCE_ON = $40000000;
SHACF_AUTOAPPEND_FORCE_OFF = $80000000;

function AutoComplete(editField: TEdit; dwFlags: DWORD): Boolean;

implementation

function SHAutoComplete(hwndEdit: HWND; dwFlags: dWord): LongInt;
&nbsёТKХnbsp; stdcall; external "shlwapi.dll";

function AutoComplete(editField: TEdit; dwFlags: DWORD): Boolean;
begin
Result := (SHAutoComplete(editField.Handle, dwFlags) = 0);
end;

end.



MBo   (2002-01-25 13:08) [10]

ну сюда-то загляни
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1011711180&n=0




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.023 c
3-18711           Mr.Hunter             2002-01-09 12:14  2002.02.07  
Как определить БД зная только название поля


1-18923           LamerMen              2002-01-24 09:56  2002.02.07  
Что использовать TMemo TR..Edit?


3-18784           Стас                  2002-01-14 13:54  2002.02.07  
Чирканите подсказку


4-19039           Snake2000             2001-12-10 13:33  2002.02.07  
Как програмно инвертировать движение курсора?


4-19030           Hair_Fly              2001-12-11 17:55  2002.02.07  
Как мне запустить из своего сервиса некоторое приложение ?