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

Вниз

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

 
Стрельников ©   (2006-11-28 21:33) [0]

Народ! Подскажите как сделать быстрый поиск по базе данных, какой-то колонки. Например: В Explorer в окне "адрес" начинаем вводить сайт, а там в низу предлагает сайты которые у него есть в базе данных! Спасибо!


 
Desdechado ©   (2006-11-28 21:53) [1]

1. считать в комбо список поиска
2. установить ему Sorted:=True
3. призвать пользователя вводить


 
Mike Kouzmine ©   (2006-11-28 23:02) [2]

на изменение строки поиска делаешь setrange


 
Max Zyuzin ©   (2006-11-29 11:22) [3]

>Стрельников ©   (28.11.06 21:33)  
Как вариант воспользоваться библиотекой EhLib. Там реализован быстрый поиск приямо в DBGridEh


 
Цитатник ©   (2006-11-29 16:32) [4]

Прошу прощения, если мой код будет не в тему.
Фрагменты кодов из книги "Delphi6 и COM" (точное название не помню).
Описывают метод прикручивания списка от Explorer к своей программе.
страница 404
function TEnumString.Next(celt: ULONG; rgelt: PPWideChar;
 pceltFetched: PLongWord): HRESULT;
var
 I: Cardinal;
 Len: Integer;
 S: String;
begin
 Result := S_OK;
 I := 0;
 with FHistory do begin
   while (FEnumPosition < Count) and (I < celt) do begin
     S := FHistory[FEnumPosition];
     Len := MultiByteToWideChar(CP_ACP, 0,
       PChar(S), -1,  rgelt^,
       0) * SizeOf(WideChar);
     rgelt^ := CoTaskMemAlloc(Len);
     MultiByteToWideChar(CP_ACP, 0, PChar(S),
        -1, rgelt^, Len);
     Inc(rgelt);
     Inc(I);
     Inc(FEnumPosition);
   end;
 end;
 if I <> celt then
   Result := S_FALSE;
 if Assigned(pceltFetched) then
   pceltFetched^ := I;
end;


стр.406

type
 TOnAcCreateEnumerator = procedure (
  var Enumerator: IEnumString)  of object;

TCustomAcEdit = class(TCustomEdit)
private
 FACOptions: DWORD;
 FAcFailed: Boolean;
 FAutoComplete: IAutoComplete2;
 FAcEnabled: Boolean;
 FOnAcCreateEnumerator: TOnAcCreateEnumerator;
 FAcLimit: Integer;
 FAcHistory: TStrings;
 FAcSource: TAutoCompleteSource;
 procedure SetAcEnabled(const Value: Boolean);
 function GetAcOptions: TAutoCompleteOptions;
 procedure SetAcHistory(const Value: TStrings);
 procedure SetAcLimit(const Value: Integer);
 procedure SetAcOptions(const Value:
   TAutoCompleteOptions);
 procedure CheckAcLimit;
 procedure InitAutoComplete;
 procedure DoneAutoComplete;
 procedure SetAcSource(const Value: TAutoCompleteSource);
protected
 procedure CreateWnd; override;
 procedure DestroyWnd; override;
 function AcCreateEnumerator: IEnumString; virtual;
 property AcOptions: TAutoCompleteOptions
   read GetAcOptions write SetAcOptions;
 property AcLimit: Integer
   read FAcLimit write SetAcLimit;
 property AcHistory: TStrings
   read FAcHistory write SetAcHistory;
 property AcEnabled: Boolean
   read FAcEnabled write SetAcEnabled;
 property AcSource: TAutoCompleteSource
   read FAcSource  write SetAcSource;
 property OnAcCreateEnumerator:
   TOnAcCreateEnumerator read OnAcCreateEnumerator
   write FOnAcCreateEnumerator;
public
 procedure AcAddToHistory(const S: String);
 procedure AcRemoveFromHistory(const S: String);
 constructor Create(AOwner: TComponent); override;
 destructor Destroy; override;
end;


стр.410
function TCustomAcEdit.AcCreateEnumerator: IEnumString;
begin
 Result := nil;
 case FAcSource of
 acsAcHistory:
   Result := TEnumString.Create(FAcHistory)
   as IEnumString;
 acsShellNamespace:
   Result := CreateComObject(CLSID_ACListISF)
   as IEnumString;
 acsMRU:
   Result := CreateComObject(CLSID_ACLMRU)
   as IEnumString;
 acsIEHistory:
   Result := CreateComObject(CLSID_ACLHistory)
   as IEnumString;
 acsCustom: ;
 end;
 if Assigned(FOnAcCreateEnumerator) then
   OnAcCreateEnumerator(Result);
end;


стр.411
procedure TForm1.AcEdit1AcCreateEnumerator(
  var Enumerator: IEnumString);
var
 Malloc: IMalloc;
 PIDL: PItemIDList;
begin
 if AcEdit1.AcSource = acsShellNamespace then begin
   if Assigned(Enumerator) then begin
     PIDL := nil;
     OleCheck(SHGetMalloc(MAlloc));
     try
       OleCheck(SHGetSpecialFolderLocation(Handle,
       CSIDL_PERSONAL, PIDL));
       OleCheck((Enumerator
     as PersistFolder).Initialize(PIDL));
     finally
       Malloc.Free(PIDL);
       Malloc := nil;
     end;
   end;
 end;
end;



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

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

Наверх




Память: 0.49 MB
Время: 0.033 c
15-1164793452
skiner
2006-11-29 12:44
2006.12.17
Конфликт с Антивирусом


15-1164556645
Antoha111
2006-11-26 18:57
2006.12.17
векторная графика


11-1140304918
z007
2006-02-19 02:21
2006.12.17
DB компоненты


15-1164713419
sergey888
2006-11-28 14:30
2006.12.17
Скончалась Любовь Полищук


2-1164782214
Unknowing
2006-11-29 09:36
2006.12.17
Логика работы программы