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

Вниз

ComboBox   Найти похожие ветки 

 
Globoor   (2004-06-10 10:17) [0]

Уважаемые эксперты.
Дано: Delphi5; Combobox, в который занесены фамилии людей.
Каким образом реализуется алгоритм, когда пользователь с клавиатуры начинает вводить первые буквы фамилии и если эта фамилия, которая начинается с этих букв, имеется в списке Combobox, то она тут же появляется в поле ввода.


 
Clickmaker ©   (2004-06-10 10:56) [1]

Дарю!

unit ComboBoxInc;

interface

uses Windows, Messages, StdCtrls, Classes;

type
 TComboBoxInc = class(TComboBox)
 private
   FTagString: string;
   FIncSearch: boolean;
   Findex: LongInt;
 protected
   FKeyPressEnter: TNotifyEvent;
   procedure KeyUp(var Key: Word; Shift: TShiftState); override;
 public
   constructor Create(AOwner: TComponent); override;
 published
   property IncSearch: boolean read FIncSearch write FIncSearch default true;
   property TagString: string read FTagString write FTagString;
   property OnKeyPressEnter: TNotifyEvent read FKeyPressEnter write FKeyPressEnter;
end;

procedure Register;

implementation

procedure TComboBoxInc.KeyUp(var Key: Word; Shift: TShiftState);
var
 start: integer;
begin
 if (Key = 13) then begin

   if Assigned(OnKeyPressEnter) then OnKeyPressEnter(Self);
 end else begin
   if FIncSearch then begin

     start := SelStart;
     Findex := SendMessage(Handle, CB_FINDSTRING, Findex-1, Integer(PChar(Text)));
     if ((Findex <> -1) and not ((Key = VK_DELETE) or (Key = 8))) then
       SendMessage(Handle, CB_SETCURSEL, Findex, 0);
     if (Findex = -1) then Findex := 0;
     SelStart := start;
     SelLength := GetTextLen - start;
   end;
   inherited KeyUp(Key, Shift);
 end;
end;

constructor TComboBoxInc.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FIncSearch := true;
 FTagString := "";
 Findex := 0;
end;

procedure Register;
begin
 RegisterComponents("Samples", [TComboBoxInc]);
end;

end.


 
Ломброзо ©   (2004-06-10 11:04) [2]

CB_FINDSTRING шибко медленно работает, на .NET вообще просто умирает, ибо поиск осуществляется линейно, последовательно с нулевого элемента. Я бы рекомендовал чуток переделать алгоритм: список фамилий сперва сортировать, а потом искать нужную запись алгоритмом деления пополам.


 
BFG9k   (2004-06-10 11:35) [3]

Хватит изобредать велосипед. Дано: Delphi7 - такой алгоритм в ComboBox там реализуется по умолчанию.


 
Globoor   (2004-06-10 12:19) [4]

Благодарю всех, кто ответил.


 
Globoor   (2004-06-10 12:34) [5]

2 Clickmaker
Очень изящно придумано.



Страницы: 1 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.055 c
14-1086193467
ilnarab
2004-06-02 20:24
2004.06.27
Как открыть exe файл с помощью Delphi?


8-1080731765
Новик
2004-03-31 15:16
2004.06.27
3d график


1-1086859760
1008
2004-06-10 13:29
2004.06.27
Работа с динамическими массивами.


14-1086463065
тихий вовочка
2004-06-05 23:17
2004.06.27
Что почитать?


3-1085927949
ertong
2004-05-30 18:39
2004.06.27
Popup in Popup