Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Сокровищница
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  10:33[Войти] | [Зарегистрироваться]

Компонент TComboBox с пошаговым поиском в списке

Роман Журавлев
дата публикации 07-12-2001 18:44

Компонент TComboBox с пошаговым поиском в списке

Мне понадобился компонент TComboBox с пошаговым поиском в списке.
Несколько модифицированный стандартный TComboBox компонент с возможностью инкрементального поиска нашел на lithops.mastak.com. Для Borland C++ Builder.
Переписал его на Delphi, может кому пригодится. Всю критику по коду приму по мылу.
unit ComboBoxInc;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
  StdCtrls;

type
  TComboBoxInc = class(TComboBox)
private
    FTagString:AnsiString;
    FIncSearch:boolean;
    Findex:longint;
    Findex_prev:longint;
    FText_prev:string;
    FSelStart_prev:longint;
protected
    procedure KeyUp(var Key:word;  Shift:TShiftState);override;
    procedure KeyDown(var Key:word;  Shift:TShiftState);override;
public
    constructor Create (Owner:TComponent);override;
published
    property IncSearch:boolean read FIncSearch write FIncSearch default
true;
    property TagString:AnsiString read FTagString write FTagString;
end;

procedure Register;

implementation

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

procedure TComboBoxInc.KeyUp(var Key : word; Shift:TShiftState );
var
  start :integer;
  s:string;

begin
if (Key = 13)
then begin
          start := 0;
          Findex_prev:=-1;
          Findex := SendMessage(Handle, CB_FINDSTRING, Findex-1, LongInt(PChar(Text)));
          FText_prev:='';
          if (Findex <> -1)
          then
              SendMessage(Handle, CB_SETCURSEL, Findex, 0);
          SelStart := start;
          SelLength := GetTextLen()-start;
          Findex:=-1;
          inherited;
end
else
begin
     if (FIncSearch)
     then begin
          if (key=8) then SelStart:=FSelStart_prev;
          start := SelStart;
          if (key <> 8) then Findex_prev:=Findex;
          Findex := SendMessage(Handle, CB_FINDSTRING, Findex-1,LongInt(PChar(Text)));
          FText_prev:=Text;
          if ((Findex <> -1)and not((Key = VK_DELETE)))
          then
              SendMessage(Handle, CB_SETCURSEL, Findex, 0);
          SelStart := start;
          SelLength := GetTextLen()-start;
     end;
end;
end;
procedure TComboBoxInc.KeyDown(var Key : word; Shift:TShiftState );
begin
 if (Key=8)
    then begin
         SetLength(FText_prev,length(FText_prev)-1);
         Findex:=Findex_prev;
         Text:=FText_prev;
    end
 else
    FSelStart_prev:=SelStart;
end;
constructor TComboBoxInc.Create (Owner:TComponent);
begin
    FIncSearch := true;
    FTagString := '';
    inherited;
end;
end.




Смотрите также материалы по темам:
[TComponent] [TComboBox] [Поиск и сортировка] [Отображение списков, сеток]

 Обсуждение материала [ 21-05-2009 03:39 ] 1 сообщение
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования