Author: Jorge Abel Ayala Marentes
Microsoft´s AutoComplete can be used in a Delphi Application in a Friendly way with
the following component
Answer:
1
2 // Implements a TCustomEdit with AutoComplete Capabilities
3 // Author: Jorge Abel Ayala Marentes
4 // Created: 15/Oct/2000
5 // Last Modification: 21/Nov/2000
6
7 unit U_AutoCompleteEdit;
8
9 interface
10
11 uses
12 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
13 StdCtrls, StrTools, ShlIntf, ActiveX, ComObj;
14
15 type
16 TSearchListChangeEvent = procedure of object;
17
18 TAutoCompleteEdit = class(TCustomEdit)
19 private
20 FSearchListChange: TSearchListChangeEvent;
21 FAutoComplete: IAutoComplete2;
22 FStrings: IUnknown;
23 FStringList: TStrings;
24 procedure SetFStringList(const Value: TStrings);
25 protected
26 procedure SearchListChange;
27 public
28 constructor Create(AOwner: TComponent); override;
29
30 //Needed to init AutoComplete when the component is first Loaded
31 procedure Loaded; override;
32 destructor Destroy; override;
33 procedure SetAutoComplete;
34 published
35 property AutoSelect;
36 property AutoSize;
37 property BorderStyle;
38 property CharCase;
39 property HideSelection;
40 property MaxLength;
41 property ParentColor;
42 property Text;
43 property OnChange;
44 property SearchList: TStrings read FStringList write SetFStringList;
45 property OnSearchListChange: TSearchListChangeEvent read FSearchListChange
46 write FSearchListChange;
47 end;
48
49 procedure register;
50
51 implementation
52
53 procedure register;
54 begin
55 RegisterComponents('Sitio Web', [TAutoCompleteEdit]);
56 end; //end of Register
57
58 { TAutoCompleteEdit }
59
60 constructor TAutoCompleteEdit.Create(AOwner: TComponent);
61 begin
62 inherited Create(AOwner);
63 Parent := TWinControl(AOwner);
64 FStringList := TStringList.Create;
65 SearchListChange;
66 end; //end of TAutoCompleteEdit.Create
67
68 destructor TAutoCompleteEdit.Destroy;
69 begin
70 FStringList.Free;
71 inherited;
72 end; //end of TAutoCompleteEdit.Destroy
73
74 //Updated: Last version didt´nt work because the searchlist wasn´t
75 //initializaed when the component was loaded :)
76
77 procedure TAutoCompleteEdit.Loaded;
78 begin
79 inherited;
80 if FStringList.Count > 0 then
81 SetAutoComplete;
82 end; //end of TAutoCompleteEdit.Loaded
83
84 procedure TAutoCompleteEdit.SearchListChange;
85 begin
86 if Assigned(FSearchListChange) then
87 FSearchListChange;
88 end; //end of TAutoCompleteEdit.SearchListChange
89
90 procedure TAutoCompleteEdit.SetAutoComplete;
91 begin
92 FAutoComplete := CreateComObject(CLSID_AutoComplete) as IAutoComplete2;
93
94 FStrings := TEnumString.Create(FStringList) as IUnknown;
95 OleCheck(FAutoComplete.SetOptions(ACO_AUTOSUGGEST
96 or ACO_AUTOAPPEND or ACO_UPDOWNKEYDROPSLIST or ACO_USETAB));
97 OleCheck(FAutoComplete.Init(Self.Handle, FStrings, nil, nil));
98 end; //end of TAutoCompleteEdit.SetAutoComplete
99
100 procedure TAutoCompleteEdit.SetFStringList(const Value: TStrings);
101 begin
102 SearchList.Assign(Value);
103 SetAutoComplete;
104 SearchListChange;
105 end; //end of TAutoCompleteEdit.SetFStringList
106
107 end.
You can download the complete component.
Please note that AutoComplete can only be used if you have Sell32.dll verson 4.7 or
above, I think that if you install IE 5.0 or above you won´t have any troble, there
are still some improvements I can think of, but please any feedback will be
apreciated, let me kwnow your ideas.
Component Download: http://www.baltsoft.com/files/dkb/attachment/AutoCompleteEdit.zip
|