1 | {*******************************************************}
|
---|
2 | { IEAddress Component }
|
---|
3 | { STAGE 3 }
|
---|
4 | { For Delphi 5, 6, 7, 2005, 2006 }
|
---|
5 | { Freeware Component }
|
---|
6 | { }
|
---|
7 | { CONTRIBUTORS: }
|
---|
8 | { Eran Bodankin (bsalsa) bsalsa@gmail.com }
|
---|
9 | { Per Lindsø Larsen }
|
---|
10 | { Peter Morris (Pete@StuckIndoors.com) }
|
---|
11 | { Thomas Stutz (aka smot) }
|
---|
12 | { }
|
---|
13 | { Enjoy! }
|
---|
14 | { UPDATES: }
|
---|
15 | { http://www.bsalsa.com }
|
---|
16 | {*******************************************************************************}
|
---|
17 | {LICENSE:
|
---|
18 | THIS SOFTWARE IS PROVIDED TO YOU "AS IS" WITHOUT WARRANTY OF ANY KIND,
|
---|
19 | EITHER EXPRESSED OR IMPLIED INCLUDING BUT NOT LIMITED TO THE APPLIED
|
---|
20 | WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
|
---|
21 | YOU ASSUME THE ENTIRE RISK AS TO THE ACCURACY AND THE USE OF THE SOFTWARE
|
---|
22 | AND ALL OTHER RISK ARISING OUT OF THE USE OR PERFORMANCE OF THIS SOFTWARE
|
---|
23 | AND DOCUMENTATION. BSALSA PRODUCTIONS DOES NOT WARRANT THAT THE SOFTWARE IS ERROR-FREE
|
---|
24 | OR WILL OPERATE WITHOUT INTERRUPTION. THE SOFTWARE IS NOT DESIGNED, INTENDED
|
---|
25 | OR LICENSED FOR USE IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE CONTROLS,
|
---|
26 | INCLUDING WITHOUT LIMITATION, THE DESIGN, CONSTRUCTION, MAINTENANCE OR
|
---|
27 | OPERATION OF NUCLEAR FACILITIES, AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS,
|
---|
28 | AIR TRAFFIC CONTROL, AND LIFE SUPPORT OR WEAPONS SYSTEMS. BSALSA PRODUCTIONS SPECIFICALLY
|
---|
29 | DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR SUCH PURPOSE.
|
---|
30 |
|
---|
31 | You may use, change or modify the component under 4 conditions:
|
---|
32 | 1. In your website, add a link to "http://www.bsalsa.com"
|
---|
33 | 2. In your application, add credits to "Embedded Web Browser"
|
---|
34 | 3. Mail me (bsalsa@gmail.com) any code change in the unit
|
---|
35 | for the benefit of the other users.
|
---|
36 | 4. Please consider donation in our web site!
|
---|
37 | {*******************************************************************************}
|
---|
38 | //$Id: IEAddress.pas,v 1.6 2006/12/07 11:27:31 bsalsa Exp $
|
---|
39 |
|
---|
40 | { Remove the dot from the define below to enable support for TFlatComboBox.
|
---|
41 | (FlatStyle Components, All Components look like MS Money und MS Encarta)
|
---|
42 | http://www.torry.net/vcl/packs/interfacemiddle/flatstyl.zip}
|
---|
43 |
|
---|
44 | {.$DEFINE USE_TFlatComboBox}
|
---|
45 |
|
---|
46 | unit IEAddress;
|
---|
47 |
|
---|
48 | interface
|
---|
49 |
|
---|
50 | {$I EWB.inc}
|
---|
51 | {$I EWB.inc}
|
---|
52 |
|
---|
53 | uses
|
---|
54 | ActiveX, ComCtrls, ShlObj, Windows, Messages, Classes, Controls, StdCtrls,
|
---|
55 | Graphics, EmbeddedWB, Dialogs{$IFDEF USE_TFlatComboBox}, TFlatComboBoxUnit{$ENDIF}; //By Smot
|
---|
56 |
|
---|
57 | type
|
---|
58 | IObjMgr = interface(IUnknown)
|
---|
59 | ['{00BB2761-6A77-11D0-A535-00C04FD7D062}']
|
---|
60 | function Append(punk: IUnknown): HResult; stdcall;
|
---|
61 | function Remove(punk: IUnknown): HResult; stdcall;
|
---|
62 | end;
|
---|
63 |
|
---|
64 | IACList = interface(IUnknown)
|
---|
65 | ['{77A130B0-94FD-11D0-A544-00C04FD7d062}']
|
---|
66 | function Expand(pszExpand: POLESTR): HResult; stdcall;
|
---|
67 | end;
|
---|
68 |
|
---|
69 | IACList2 = interface(IACList)
|
---|
70 | ['{470141a0-5186-11d2-bbb6-0060977b464c}']
|
---|
71 | function SetOptions(dwFlag: DWORD): HResult; stdcall;
|
---|
72 | function GetOptions(var pdwFlag: DWORD): HResult; stdcall;
|
---|
73 | end;
|
---|
74 | IAutoComplete = interface(IUnknown)
|
---|
75 | ['{00bb2762-6a77-11d0-a535-00c04fd7d062}']
|
---|
76 | function Init(hwndEdit: HWND; const punkACL: IUnknown; pwszRegKeyPath,
|
---|
77 | pwszQuickComplete: POLESTR): HResult; stdcall;
|
---|
78 | function Enable(fEnable: BOOL): HResult; stdcall;
|
---|
79 | end;
|
---|
80 | type
|
---|
81 | IAutoComplete2 = interface(IAutoComplete)
|
---|
82 | ['{EAC04BC0-3791-11d2-BB95-0060977B464C}']
|
---|
83 | function SetOptions(dwFlag: DWORD): HResult; stdcall;
|
---|
84 | function GetOptions(out pdwFlag: DWORD): HResult; stdcall;
|
---|
85 | end;
|
---|
86 |
|
---|
87 | TEnumString = class(TInterfacedObject, IEnumString)
|
---|
88 | private
|
---|
89 | FStrings: TStringList;
|
---|
90 | FCurrIndex: integer;
|
---|
91 | public
|
---|
92 | {IEnumString}
|
---|
93 | function Next(celt: Longint; out elt; pceltFetched: PLongint): HResult; stdcall;
|
---|
94 | function Skip(celt: Longint): HResult; stdcall;
|
---|
95 | function Reset: HResult; stdcall;
|
---|
96 | function Clone(out enm: IEnumString): HResult; stdcall;
|
---|
97 | {VCL}
|
---|
98 | constructor Create;
|
---|
99 | destructor Destroy; override;
|
---|
100 | end;
|
---|
101 |
|
---|
102 | TAutoComplete2Option = (acoNone, acoAutoSuggest, acoAutoAppend, acoSearch, acoFilterPrefix,
|
---|
103 | acoUseTab, acoUpDownKeyDropList, acoRtlReading, acoWordFilter,
|
---|
104 | acoNoPrefixFiltering);
|
---|
105 | TAutoComplete2Options = set of TAutoComplete2Option;
|
---|
106 | TACSource = (acsList, acsHistory, acsMRU, acsShell);
|
---|
107 | TAutoComplete2Source = set of TACSource;
|
---|
108 | TAComp = (AutoComplete1, AutoComplete2);
|
---|
109 | TAutoCompleteOption = (acAutoSuggest, acAutoAppend, acFileSystem, acUrlHistory,
|
---|
110 | acUrlMRU, acUrlAll, acUseTab);
|
---|
111 | TAutoCompleteOptions = set of TAutoCompleteOption;
|
---|
112 | TIEAddressState = set of (csButtonPressed, csMouseCaptured);
|
---|
113 | TThemes = (tmNone, tmXP, tmSilver, tmSoil);
|
---|
114 | TGUI = (gsCombobox, gsThemes);
|
---|
115 | TTypedUrlsMethod = (tuCommon, tuExtended);
|
---|
116 | TTextAfterNav = (anLocationUrl, anLocationName);
|
---|
117 | TTextOnLoad = (tlIELastVisited, tlIEHomePage, tlBlank, tlUserDefine);
|
---|
118 | TOnUrlSelectedEvent = procedure(Sender: TObject; Url: WideString; var Cancel: boolean) of object;
|
---|
119 | TOnGetFaviconEvent = procedure(Sender: TObject; Favicon, SiteUrl: WideString; var Cancel: boolean; Icon: TIcon) of object;
|
---|
120 | TOnGetAppIconEvent = procedure(Sender: TObject; var Cancel: boolean; Icon: TIcon) of object;
|
---|
121 | TOnGetIconEvent = procedure(Sender: TObject; Ext: string; hIco: hIcon) of object;
|
---|
122 | TOnUpdateRegistryEvent = procedure(Sender: TObject; Url: WideString; var Cancel: boolean) of object;
|
---|
123 | TOnUpdateTextEvent = procedure(Sender: TObject; OldUrl, NewUrl: WideString; var Cancel: boolean) of object;
|
---|
124 | TOnPaintEvent = procedure(Sender: TObject; var Continue: boolean) of object;
|
---|
125 |
|
---|
126 | type
|
---|
127 | {$IFDEF USE_TFlatComboBox} //By Smot
|
---|
128 | TComboBoxType = TFlatComboBox;
|
---|
129 | {$ELSE}
|
---|
130 | TComboBoxType = TCustomComboBox;
|
---|
131 | {$ENDIF}
|
---|
132 |
|
---|
133 | type
|
---|
134 | TCustomIEAddress = class(TComboBoxType)
|
---|
135 | private
|
---|
136 | dllVer: Extended;
|
---|
137 | FAbout: string;
|
---|
138 | FArrowColor: TColor;
|
---|
139 | FBorderColor: TColor;
|
---|
140 | FButtonColor: TColor;
|
---|
141 | FButtonPressedColor: TColor;
|
---|
142 | FButtonWidth: Integer;
|
---|
143 | FCanvas: TControlCanvas;
|
---|
144 | FCustomProperty: string;
|
---|
145 | FEditState: TIEAddressState;
|
---|
146 | FEmbeddedWB: TEmbeddedWB;
|
---|
147 | FFlat: Boolean;
|
---|
148 | FGUI: TGUI;
|
---|
149 | FHasBorder: Boolean;
|
---|
150 | FHasDropDown: Boolean;
|
---|
151 | FHintColor: TColor;
|
---|
152 | FIconLeft: Integer;
|
---|
153 | FIconTop: Integer;
|
---|
154 | FImageIndex: Integer;
|
---|
155 | FImageList: TImageList;
|
---|
156 | FImageSize: Integer;
|
---|
157 | FModified: Boolean;
|
---|
158 | FMouseActive: Boolean;
|
---|
159 | FNavOnDblClk: Boolean;
|
---|
160 | FNavOnEnterKey: Boolean;
|
---|
161 | FNavOnLoad: Boolean;
|
---|
162 | FNavOnSelected: Boolean;
|
---|
163 | FOldBGColor: TColor;
|
---|
164 | FOldHintColor: TColor;
|
---|
165 | FOnGetAppIcon: TOnGetAppIconEvent;
|
---|
166 | FOnGetFavicon: TOnGetFaviconEvent;
|
---|
167 | FOnGetIcon: TOnGetIconEvent;
|
---|
168 | FOnPaint: TOnPaintEvent;
|
---|
169 | FOnUpdateRegistry: TOnUpdateRegistryEvent;
|
---|
170 | FOnUpdateText: TOnUpdateTextEvent;
|
---|
171 | FOnUrlSelected: TOnUrlSelectedEvent;
|
---|
172 | FSecureSiteBG: TColor;
|
---|
173 | FSelImageIndex: Integer;
|
---|
174 | FShowFavicons: Boolean;
|
---|
175 | FShowSiteHint: Boolean;
|
---|
176 | FTextAfterNav: TTextAfterNav;
|
---|
177 | FTextOnLoad: TTextOnLoad;
|
---|
178 | FTextOnShow: WideString;
|
---|
179 | FThemes: TThemes;
|
---|
180 | FTypedUrlsMethod: TTypedUrlsMethod;
|
---|
181 | FUAfterNav: Boolean;
|
---|
182 | FUpdateRegistry: Boolean;
|
---|
183 | FUseAppIcon: Boolean;
|
---|
184 | FUseSecureSiteBGColor: Boolean;
|
---|
185 | FAutoComplete2Source: TAutoComplete2Source;
|
---|
186 | FAutoComplete: IAutoComplete;
|
---|
187 | FAutoCompleteOptions: TAutoCompleteOptions;
|
---|
188 | FAutoComplete2Options: TAutoComplete2Options;
|
---|
189 | FAComp: TAComp;
|
---|
190 | function AddFaviconToImageList: integer;
|
---|
191 | function GetImageIndex(aUrl: string; IntoLV: Boolean): Integer;
|
---|
192 | function GrabFavicon(URL: string; dest: string): Boolean;
|
---|
193 | function RemovePrefix(UrlIn, Prefix: WideString): WideString;
|
---|
194 | function FixUrl(Url: string): string;
|
---|
195 | function GetModified: Boolean;
|
---|
196 | procedure SetModified(Value: Boolean);
|
---|
197 | procedure GetTypedURLs;
|
---|
198 | procedure InsertTextToList;
|
---|
199 | procedure RegistryUpdate;
|
---|
200 | procedure RepaintIEAddress(MouseActive: Boolean);
|
---|
201 | procedure SetAbout(Value: string);
|
---|
202 | procedure SetDropDown(const Value: Boolean);
|
---|
203 | procedure SetTextPosition;
|
---|
204 | procedure SetFlat(const Value: Boolean);
|
---|
205 | procedure SetHasBorder(const Value: Boolean);
|
---|
206 | procedure SetSiteHint;
|
---|
207 | procedure SetTextOnLd;
|
---|
208 | procedure SetTheme;
|
---|
209 | procedure SetAutoCompleteOptions(const Value: TAutoCompleteOptions);
|
---|
210 | procedure SetAutoComplete2Source(const Value: TAutoComplete2Source);
|
---|
211 | procedure SetACOptions(const Value: TAutoComplete2Options);
|
---|
212 | procedure TextUpdate;
|
---|
213 | procedure UpdateIAutoComplete2;
|
---|
214 | procedure UpdateAutoComplete;
|
---|
215 | protected
|
---|
216 | procedure CalculateRGN;
|
---|
217 | procedure Change; override;
|
---|
218 | procedure CheckButtonState(X, Y: Integer);
|
---|
219 | procedure Click; override;
|
---|
220 | procedure CreateParams(var Params: TCreateParams); override;
|
---|
221 | procedure CreateWindowHandle(const Params: TCreateParams); override;
|
---|
222 | procedure CreateWnd; override;
|
---|
223 | procedure DblClick; override;
|
---|
224 | procedure DestroyWnd; override;
|
---|
225 | procedure DrawIEAddress(MouseInControl, DroppedDown: boolean);
|
---|
226 | procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;
|
---|
227 | procedure KeyDown(var Key: Word; Shift: TShiftState); override;
|
---|
228 | procedure Loaded; override;
|
---|
229 | procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
|
---|
230 | procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
|
---|
231 | procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
|
---|
232 | procedure WndProc(var Message: TMessage); override;
|
---|
233 | public
|
---|
234 | constructor Create(AOwner: TComponent); override;
|
---|
235 | destructor Destroy; override;
|
---|
236 | function IsValidURL(const URL: WideString): Boolean;
|
---|
237 | function GetDllVersion(const ADll: string): Extended;
|
---|
238 | procedure DragOver(Source: TObject; X, Y: Integer;
|
---|
239 | State: TDragState; var Accept: Boolean); override;
|
---|
240 | procedure DragDrop(Source: TObject; X, Y: Integer); override;
|
---|
241 | procedure CheckSecureSite;
|
---|
242 | procedure ClearList;
|
---|
243 | procedure AddToList;
|
---|
244 | {$IFDEF DELPHI6_UP}
|
---|
245 | procedure DeleteSelected; override;
|
---|
246 | {$ENDIF}
|
---|
247 | procedure LoadFromFile(FileName: WideString);
|
---|
248 | procedure SaveToFile(FileName: WideString);
|
---|
249 | procedure SetBounds(Left, Top, Width, Height: Integer); override;
|
---|
250 | {published}
|
---|
251 | property AutoCompleteVersion: TAComp read FAComp write FAComp default AutoComplete2;
|
---|
252 | property AutoComplete2Source: TAutoComplete2Source read FAutoComplete2Source
|
---|
253 | write SetAutoComplete2Source default [acsList, acsHistory, acsMRU, acsShell];
|
---|
254 | property AutoComplete2Options: TAutoComplete2Options read FAutoComplete2Options
|
---|
255 | write FAutoComplete2Options default [acoAutoSuggest, acoAutoAppend, acoSearch];
|
---|
256 | property AutoCompleteOptions: TAutoCompleteOptions read FAutoCompleteOptions
|
---|
257 | write SetAutoCompleteOptions default [acAutoAppend, acUrlHistory];
|
---|
258 | property About: string read FAbout write SetAbout;
|
---|
259 | property ArrowColor: Tcolor read FArrowColor write FArrowColor default clblack;
|
---|
260 | property AutoNavigateOnDblClk: Boolean read FNavOnDblClk write FNavOnDblClk default True;
|
---|
261 | property AutoNavigateOnEnterKey: Boolean read FNavOnEnterKey write FNavOnEnterKey default True;
|
---|
262 | property AutoNavigateOnLoad: Boolean read FNavOnLoad write FNavOnLoad default True;
|
---|
263 | property AutoNavigateOnSelected: Boolean read FNavOnSelected write FNavOnSelected default True;
|
---|
264 | property BorderColor: Tcolor read FBorderColor write FBorderColor default clblack;
|
---|
265 | property ButtonColor: Tcolor read FButtonColor write FButtonColor default clBtnFace;
|
---|
266 | property ButtonPressedColor: Tcolor read FButtonPressedColor write FButtonPressedColor default clBtnFace;
|
---|
267 | property ButtonWidth: integer read FButtonWidth;
|
---|
268 | property DropDownCount;
|
---|
269 | property EmbeddedWB: TEmbeddedWB read FEmbeddedWB write FEmbeddedWB;
|
---|
270 | property Flat: Boolean read FFlat write SetFlat default False;
|
---|
271 | property GUI: TGUI read FGUI write FGUI default gsThemes;
|
---|
272 | property HasBorder: Boolean read FHasBorder write SetHasBorder default True;
|
---|
273 | property HasDropDown: Boolean read FHasDropDown write SetDropDown default True;
|
---|
274 | property HintColor: Tcolor read FHintColor write FHintColor default clInfoBK;
|
---|
275 | property IconLeft: Integer read FIconLeft write FIconLeft;
|
---|
276 | property IconTop: Integer read FIconTop write FIconTop;
|
---|
277 | property Modified: Boolean read GetModified write SetModified;
|
---|
278 | property OnGetAppIcon: TOnGetAppIconEvent read FOnGetAppIcon write FOnGetAppIcon;
|
---|
279 | property OnGetFavicon: TOnGetFaviconEvent read FOnGetFavicon write FOnGetFavicon;
|
---|
280 | property OnGetIcon: TOnGetIconEvent read FOnGetIcon write FOnGetIcon;
|
---|
281 | property OnUpdateRegistry: TOnUpdateRegistryEvent read FOnUpdateRegistry write FOnUpdateRegistry;
|
---|
282 | property OnUpdateText: TOnUpdateTextEvent read FOnUpdateText write FOnUpdateText;
|
---|
283 | property OnUrlSelected: TOnUrlSelectedEvent read FOnUrlSelected write FOnUrlSelected;
|
---|
284 | property SecureSiteBG: TColor read FSecureSiteBG write FSecureSiteBG default clInfobk;
|
---|
285 | property ShowFavicon: Boolean read FShowFavicons write FShowFavicons default False;
|
---|
286 | property ShowSiteToolTip: Boolean read FShowSiteHint write FShowSiteHint default True;
|
---|
287 | property TextAfterNav: TTextAfterNav read FTextAfterNav write FTextAfterNav default anLocationUrl;
|
---|
288 | property TextOnLoad: TTextOnLoad read FTextOnLoad write FTextOnLoad default tlIEHomepage;
|
---|
289 | property TextOnShow: WideString read FTextOnShow write FTextOnShow;
|
---|
290 | property Themes: TThemes read FThemes write FThemes default tmNone;
|
---|
291 | property UpdateItemsToRegistry: Boolean read FUpdateRegistry write FUpdateRegistry default True;
|
---|
292 | property UpdateTextAfterNav: Boolean read FUAfterNav write FUAfterNav default True;
|
---|
293 | property UseAppIcon: Boolean read FUseAppIcon write FUseAppIcon default False;
|
---|
294 | property UseSecureSiteBGColor: Boolean read FUseSecureSiteBGColor write FUseSecureSiteBGColor default True;
|
---|
295 | end;
|
---|
296 |
|
---|
297 | TIEAddress = class(TCustomIEAddress)
|
---|
298 | published
|
---|
299 | property Style; //Apparently this must be published first (see VCL);
|
---|
300 | //New stuff-----------------------------------------------------------------
|
---|
301 | property AutoComplete2Source default [acsList, acsHistory, acsMRU, acsShell];
|
---|
302 | property AutoComplete2Options default [acoAutoSuggest, acoAutoAppend, acoSearch];
|
---|
303 | property AutoCompleteOptions default [acAutoAppend, acUrlHistory];
|
---|
304 | property AutoNavigateOnDblClk default True;
|
---|
305 | property AutoNavigateOnEnterKey default True;
|
---|
306 | property AutoNavigateOnLoad default True;
|
---|
307 | property AutoNavigateOnSelected default True;
|
---|
308 | property AutoCompleteVersion default AutoComplete2;
|
---|
309 | property About;
|
---|
310 | property Align;
|
---|
311 | property Anchors;
|
---|
312 | property ArrowColor;
|
---|
313 | property BiDiMode;
|
---|
314 | property BorderColor;
|
---|
315 | property ButtonColor;
|
---|
316 | property ButtonPressedColor;
|
---|
317 | property Color;
|
---|
318 | property Constraints;
|
---|
319 | property Cursor;
|
---|
320 | property DragCursor;
|
---|
321 | property DragKind;
|
---|
322 | property DragMode;
|
---|
323 | property DropDownCount;
|
---|
324 | property EmbeddedWB;
|
---|
325 | property Enabled;
|
---|
326 | property Flat;
|
---|
327 | property Font;
|
---|
328 | property GUI;
|
---|
329 | property HasBorder;
|
---|
330 | property HasDropDown;
|
---|
331 | property HelpContext;
|
---|
332 | property Hint;
|
---|
333 | property HintColor;
|
---|
334 | property IconLeft;
|
---|
335 | property IconTop;
|
---|
336 | property ImeMode;
|
---|
337 | property ImeName;
|
---|
338 | property ItemHeight;
|
---|
339 | property MaxLength;
|
---|
340 | property OnChange;
|
---|
341 | property OnClick;
|
---|
342 | property OnContextPopup;
|
---|
343 | property OnDblClick;
|
---|
344 | property OnDragDrop;
|
---|
345 | property OnDragOver;
|
---|
346 | property OnDrawItem;
|
---|
347 | property OnDropDown;
|
---|
348 | property OnEndDock;
|
---|
349 | property OnEndDrag;
|
---|
350 | property OnEnter;
|
---|
351 | property OnExit;
|
---|
352 | property OnGetAppIcon;
|
---|
353 | property OnGetFavicon;
|
---|
354 | property OnGetIcon;
|
---|
355 | property OnKeyDown;
|
---|
356 | property OnKeyPress;
|
---|
357 | property OnKeyUp;
|
---|
358 | property OnMeasureItem;
|
---|
359 | property OnStartDock;
|
---|
360 | property OnStartDrag;
|
---|
361 | property OnUpdateRegistry;
|
---|
362 | property OnUpdateText;
|
---|
363 | property OnUrlSelected;
|
---|
364 | property ParentBiDiMode default False;
|
---|
365 | property ParentColor;
|
---|
366 | property ParentFont;
|
---|
367 | property ParentShowHint default False;
|
---|
368 | property PopupMenu;
|
---|
369 | property SecureSiteBG;
|
---|
370 | property ShowFavicon;
|
---|
371 | property ShowHint default True;
|
---|
372 | property ShowSiteToolTip;
|
---|
373 | property Sorted;
|
---|
374 | property TabOrder;
|
---|
375 | property TabStop;
|
---|
376 | property Text;
|
---|
377 | property TextAfterNav;
|
---|
378 | property TextOnLoad;
|
---|
379 | property TextOnShow;
|
---|
380 | property Themes;
|
---|
381 | property UpdateTextAfterNav default True;
|
---|
382 | property UseAppIcon;
|
---|
383 | property UseSecureSiteBGColor;
|
---|
384 | property Visible;
|
---|
385 | property Items; //And this must be published last
|
---|
386 | end;
|
---|
387 |
|
---|
388 | implementation
|
---|
389 |
|
---|
390 | uses
|
---|
391 | ComObj, UrlMon, ImgList, ShellAPI, Forms, SysUtils, Registry, IEConst, EwbCoreTools;
|
---|
392 |
|
---|
393 | function TEnumString.Clone(out enm: IEnumString): HResult;
|
---|
394 | begin
|
---|
395 | Result := E_NOTIMPL;
|
---|
396 | pointer(enm) := nil;
|
---|
397 | end;
|
---|
398 |
|
---|
399 | constructor TEnumString.Create;
|
---|
400 | begin
|
---|
401 | inherited Create;
|
---|
402 | FStrings := TStringList.Create;
|
---|
403 | FCurrIndex := 0;
|
---|
404 | end;
|
---|
405 |
|
---|
406 | destructor TEnumString.Destroy;
|
---|
407 | begin
|
---|
408 | FStrings.Free;
|
---|
409 | inherited;
|
---|
410 | end;
|
---|
411 |
|
---|
412 | function TEnumString.Next(celt: Integer; out elt; pceltFetched: PLongint): HResult;
|
---|
413 | var
|
---|
414 | I: Integer;
|
---|
415 | wStr: WideString;
|
---|
416 | begin
|
---|
417 | I := 0;
|
---|
418 | while (I < celt) and (FCurrIndex < FStrings.Count) do
|
---|
419 | begin
|
---|
420 | wStr := FStrings[FCurrIndex];
|
---|
421 | TPointerList(elt)[I] := PWideChar(WideString(wStr));
|
---|
422 | /// TPointerList(elt)[I] := CoTaskMemAlloc(2 * (Length(wStr) + 1));
|
---|
423 | StringToWideChar(wStr, TPointerList(elt)[I], 2 * (Length(wStr) + 1));
|
---|
424 | Inc(I);
|
---|
425 | Inc(FCurrIndex);
|
---|
426 | end;
|
---|
427 | if pceltFetched <> nil then
|
---|
428 | pceltFetched^ := I;
|
---|
429 | if I = celt then
|
---|
430 | Result := S_OK
|
---|
431 | else
|
---|
432 | Result := S_FALSE;
|
---|
433 | end;
|
---|
434 |
|
---|
435 | function TEnumString.Reset: HResult;
|
---|
436 | begin
|
---|
437 | FCurrIndex := 0;
|
---|
438 | Result := S_OK;
|
---|
439 | end;
|
---|
440 |
|
---|
441 | function TEnumString.Skip(celt: Integer): HResult;
|
---|
442 | begin
|
---|
443 | if (FCurrIndex + celt) <= FStrings.Count then
|
---|
444 | begin
|
---|
445 | Inc(FCurrIndex, celt);
|
---|
446 | Result := S_OK;
|
---|
447 | end
|
---|
448 | else
|
---|
449 | begin
|
---|
450 | FCurrIndex := FStrings.Count;
|
---|
451 | Result := S_FALSE;
|
---|
452 | end;
|
---|
453 | end;
|
---|
454 |
|
---|
455 | //Accesories--------------------------------------------------------------------
|
---|
456 |
|
---|
457 | function SHAutoComplete(hwndEdit: HWND; dwFlags: DWORD): HRESULT; stdcall; external 'shlwapi.dll';
|
---|
458 | {$R-}
|
---|
459 |
|
---|
460 | function GetExtension(Url: WideString): string;
|
---|
461 | var
|
---|
462 | st: string;
|
---|
463 | begin
|
---|
464 | st := LowerCase(Trim(ExtractFileExt(Url)));
|
---|
465 | if (AnsiPos('.xml', st) <> 0) or (AnsiPos('.txt', st) <> 0) or (AnsiPos('.doc', st) <> 0)
|
---|
466 | or (AnsiPos('.bmp', st) <> 0) or (AnsiPos('.zip', st) <> 0) or (AnsiPos('.rar', st) <> 0)
|
---|
467 | or (AnsiPos('.jpg', st) <> 0) or (AnsiPos('.gif', st) <> 0) or (AnsiPos('.jpeg', st) <> 0) then
|
---|
468 | Result := st
|
---|
469 | else
|
---|
470 | Result := '*.htm';
|
---|
471 | end;
|
---|
472 |
|
---|
473 | function GetCacheFolder: WideString;
|
---|
474 | var
|
---|
475 | Reg: TRegistry;
|
---|
476 | begin
|
---|
477 | Result := '';
|
---|
478 | Reg := TRegistry.Create;
|
---|
479 | with Reg do
|
---|
480 | try
|
---|
481 | begin
|
---|
482 | RootKey := HKEY_CURRENT_USER;
|
---|
483 | if OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', False) then
|
---|
484 | Result := ReadString('Cache') + '\';
|
---|
485 | end;
|
---|
486 | finally
|
---|
487 | CloseKey;
|
---|
488 | Free;
|
---|
489 | end;
|
---|
490 | end;
|
---|
491 |
|
---|
492 | function StrToCase(StringOf: string; CasesList: array of string): Integer;
|
---|
493 | var
|
---|
494 | Idx: integer;
|
---|
495 | begin
|
---|
496 | Result := -1;
|
---|
497 | for Idx := 0 to Length(CasesList) - 1 do
|
---|
498 | begin
|
---|
499 | if CompareText(StringOf, CasesList[Idx]) = 0 then
|
---|
500 | begin
|
---|
501 | Result := Idx;
|
---|
502 | Break;
|
---|
503 | end;
|
---|
504 | end;
|
---|
505 | end;
|
---|
506 |
|
---|
507 | function GetSpecialFolderNo(bUrl: WideString): Cardinal;
|
---|
508 | var
|
---|
509 | Url: string;
|
---|
510 | begin
|
---|
511 | Result := 3000;
|
---|
512 | Url := AnsiUpperCase(Trim(bUrl));
|
---|
513 | case StrToCase(Url, ['DESKTOP', 'INTERNET', 'PROGRAMS', 'CONTROL PANEL', 'PRINTERS',
|
---|
514 | 'MY DOCUMENTS', 'FAVORITES', 'STARTUP', 'RECENT', 'SENDTO',
|
---|
515 | 'RECYCLE BIN', 'STARTMENU', 'DESKTOP DIRECTORY', 'MY COMPUTER',
|
---|
516 | 'NETWORK NEIGHBORHOOD', 'NETHOOD', 'FONTS', 'TEMPLATES', 'START MENU',
|
---|
517 | 'COMMON PROGRAMS', 'COMMON STARTUP', 'COMMON DESKTOP', 'APPDATA',
|
---|
518 | 'PRINTHOOD', 'APPLICATION DATA', 'TEMPORARY INTERNET FILES',
|
---|
519 | 'COOKIES', 'HISTORY', 'USERPROFILE', 'DIAL UP CONNECTIONS',
|
---|
520 | 'MY MUSIC', 'MY PICTURES', 'MY VIDEO', 'CD BURNING',
|
---|
521 | 'COMPUTERS NEAR ME', 'PROFILES']) of
|
---|
522 | 0: Result := CSIDL_DESKTOP;
|
---|
523 | 1: Result := CSIDL_INTERNET;
|
---|
524 | 2: Result := CSIDL_PROGRAMS;
|
---|
525 | 3: Result := CSIDL_CONTROLS;
|
---|
526 | 4: Result := CSIDL_PRINTERS;
|
---|
527 | 5: Result := CSIDL_PERSONAL;
|
---|
528 | 6: Result := CSIDL_FAVORITES;
|
---|
529 | 7: Result := CSIDL_STARTUP;
|
---|
530 | 8: Result := CSIDL_RECENT;
|
---|
531 | 9: Result := CSIDL_SENDTO;
|
---|
532 | 10: Result := CSIDL_BITBUCKET;
|
---|
533 | 11: Result := CSIDL_STARTMENU;
|
---|
534 | 12: Result := CSIDL_DESKTOPDIRECTORY;
|
---|
535 | 13: Result := CSIDL_DRIVES;
|
---|
536 | 14: Result := CSIDL_NETWORK;
|
---|
537 | 15: Result := CSIDL_NETHOOD;
|
---|
538 | 16: Result := CSIDL_FONTS;
|
---|
539 | 17: Result := CSIDL_TEMPLATES;
|
---|
540 | 18: Result := CSIDL_COMMON_STARTMENU;
|
---|
541 | 19: Result := CSIDL_COMMON_PROGRAMS;
|
---|
542 | 20: Result := CSIDL_COMMON_STARTUP;
|
---|
543 | 21: Result := CSIDL_COMMON_DESKTOPDIRECTORY;
|
---|
544 | 22: Result := CSIDL_APPDATA;
|
---|
545 | 23: Result := CSIDL_PRINTHOOD;
|
---|
546 | {$IFDEF DELPHI9_UP}
|
---|
547 | 24: Result := CSIDL_LOCAL_APPDATA;
|
---|
548 | 25: Result := CSIDL_INTERNET_CACHE;
|
---|
549 | 26: Result := CSIDL_COOKIES;
|
---|
550 | 27: Result := CSIDL_HISTORY;
|
---|
551 | 28: Result := CSIDL_PROFILE;
|
---|
552 | 29: Result := CSIDL_CONNECTIONS;
|
---|
553 | 30: Result := CSIDL_COMMON_MUSIC;
|
---|
554 | 31: Result := CSIDL_COMMON_PICTURES;
|
---|
555 | 32: Result := CSIDL_COMMON_VIDEO;
|
---|
556 | 33: Result := CSIDL_CDBURN_AREA;
|
---|
557 | 34: Result := CSIDL_COMPUTERSNEARME;
|
---|
558 | 35: Result := CSIDL_PROFILES
|
---|
559 | {$ENDIF}
|
---|
560 | end;
|
---|
561 | end;
|
---|
562 |
|
---|
563 | function TCustomIEAddress.GetDllVersion(const ADll: string): Extended;
|
---|
564 | type //by Fabio Lucarelli
|
---|
565 | DLLVERSIONINFO = packed record
|
---|
566 | cbSize: DWORD;
|
---|
567 | dwMajorVersion: DWORD;
|
---|
568 | dwMinorVersion: DWORD;
|
---|
569 | dwBuildNumber: DWORD;
|
---|
570 | dwPlatformID: DWORD;
|
---|
571 | end;
|
---|
572 | DLLGETVERSIONPROC = function(var pdvi: DLLVERSIONINFO): HRESULT; stdcall;
|
---|
573 | var
|
---|
574 | hinstDll: THANDLE;
|
---|
575 | pBuffer: POINTER;
|
---|
576 | dvi: DLLVERSIONINFO;
|
---|
577 | pDllGetVersion: DLLGETVERSIONPROC;
|
---|
578 | begin
|
---|
579 | hinstDll := LoadLibrary(PChar(ADll));
|
---|
580 | if hinstDll = 0 then
|
---|
581 | Result := 0
|
---|
582 | else
|
---|
583 | try
|
---|
584 | pBuffer := GetProcAddress(hinstDll, 'DllGetVersion');
|
---|
585 | if Assigned(pBuffer) then
|
---|
586 | begin
|
---|
587 | ZeroMemory(@dvi, SizeOf(dvi));
|
---|
588 | dvi.cbSize := SizeOf(dvi);
|
---|
589 | pDllGetVersion := DLLGETVERSIONPROC(pBuffer);
|
---|
590 | if pDllGetVersion(dvi) = NOERROR then
|
---|
591 | begin
|
---|
592 | Result := (dvi.dwMajorVersion + dvi.dwMinorVersion);
|
---|
593 | end
|
---|
594 | else
|
---|
595 | Result := 0;
|
---|
596 | end
|
---|
597 | else
|
---|
598 | Result := 0;
|
---|
599 | finally
|
---|
600 | FreeLibrary(hinstDll);
|
---|
601 | end;
|
---|
602 | end;
|
---|
603 |
|
---|
604 | function TCustomIEAddress.GetModified: Boolean;
|
---|
605 | begin
|
---|
606 | Result := FModified;
|
---|
607 | if HandleAllocated then
|
---|
608 | Result := SendMessage(EditHandle, EM_GETMODIFY, 0, 0) <> 0;
|
---|
609 | end;
|
---|
610 |
|
---|
611 | function TCustomIEAddress.IsValidURL(const URL: WideString): Boolean;
|
---|
612 | begin
|
---|
613 | if UrlMon.IsValidURL(nil, PWideChar(URL), 0) = S_OK then
|
---|
614 | Result := True
|
---|
615 | else
|
---|
616 | Result := False;
|
---|
617 | end;
|
---|
618 |
|
---|
619 | function TCustomIEAddress.RemovePrefix(UrlIn, Prefix: WideString): WideString;
|
---|
620 | var
|
---|
621 | i, j: integer;
|
---|
622 | begin
|
---|
623 | i := Length(Prefix);
|
---|
624 | j := AnsiPos(Prefix, UPPERCASE(URLIn));
|
---|
625 | if j <> 0 then
|
---|
626 | System.delete(UrlIn, j, i);
|
---|
627 | Result := UrlIn;
|
---|
628 | end;
|
---|
629 |
|
---|
630 | procedure TCustomIEAddress.ClearList;
|
---|
631 | begin
|
---|
632 | Items.Clear;
|
---|
633 | end;
|
---|
634 |
|
---|
635 | {$IFDEF DELPHI6_UP}
|
---|
636 |
|
---|
637 | procedure TCustomIEAddress.DeleteSelected;
|
---|
638 | begin
|
---|
639 | if ItemIndex <> -1 then
|
---|
640 | Items.Delete(ItemIndex);
|
---|
641 | end;
|
---|
642 | {$ENDIF}
|
---|
643 |
|
---|
644 | procedure TCustomIEAddress.AddToList;
|
---|
645 | begin
|
---|
646 | if not (csDesigning in ComponentState) then
|
---|
647 | begin
|
---|
648 | Text := FixUrl(Text);
|
---|
649 | RegistryUpdate;
|
---|
650 | CheckSecureSite;
|
---|
651 | TextUpdate;
|
---|
652 | InsertTextToList;
|
---|
653 | SetSiteHint;
|
---|
654 | AddFaviconToImageList;
|
---|
655 | end;
|
---|
656 | end;
|
---|
657 |
|
---|
658 | procedure TCustomIEAddress.CheckButtonState(X, Y: Integer);
|
---|
659 | var
|
---|
660 | ARect: TRect;
|
---|
661 | begin
|
---|
662 | SetRect(ARect, ClientWidth - FButtonWidth, 0, ClientWidth, ClientHeight);
|
---|
663 | if (csButtonPressed in FEditState) and not PtInRect(ARect, Point(X, Y)) then
|
---|
664 | begin
|
---|
665 | Exclude(FEditState, csButtonPressed);
|
---|
666 | RepaintIEAddress(True);
|
---|
667 | end;
|
---|
668 | end;
|
---|
669 |
|
---|
670 | function TCustomIEAddress.FixUrl(Url: string): string;
|
---|
671 |
|
---|
672 |
|
---|
673 | function AnsiEndsStr(const ASubText, AText: string): Boolean;
|
---|
674 | var
|
---|
675 | SubTextLocation: Integer;
|
---|
676 | begin
|
---|
677 | SubTextLocation := Length(AText) - Length(ASubText) + 1;
|
---|
678 | if (SubTextLocation > 0) and (ASubText <> '') and
|
---|
679 | (ByteType(AText, SubTextLocation) <> mbTrailByte) then
|
---|
680 | Result := AnsiStrComp((PChar(ASubText)), Pointer(@AText[SubTextLocation])) = 0
|
---|
681 | else
|
---|
682 | Result := False;
|
---|
683 | end;
|
---|
684 |
|
---|
685 | var
|
---|
686 | DotPos, ipos: Integer;
|
---|
687 | begin
|
---|
688 | Result := Url;
|
---|
689 | if not AnsiEndsStr('/', Url) then
|
---|
690 | begin
|
---|
691 | ipos := LastDelimiter('/', Url);
|
---|
692 | DotPos := LastDelimiter('.', Url);
|
---|
693 | if DotPos < ipos then
|
---|
694 | Result := Url + '/';
|
---|
695 | end;
|
---|
696 | end;
|
---|
697 |
|
---|
698 | procedure TCustomIEAddress.InsertTextToList;
|
---|
699 | var
|
---|
700 | i: integer;
|
---|
701 | Found: boolean;
|
---|
702 | begin
|
---|
703 | Found := False;
|
---|
704 | for i := 0 to Items.Count do
|
---|
705 | begin
|
---|
706 | if Text = Items.Strings[i] then
|
---|
707 | Found := True;
|
---|
708 | end;
|
---|
709 | if Items.Count = 0 then
|
---|
710 | Found := False;
|
---|
711 | if not Found then
|
---|
712 | Items.Insert(0, Text);
|
---|
713 | end;
|
---|
714 |
|
---|
715 | procedure TCustomIEAddress.CheckSecureSite;
|
---|
716 |
|
---|
717 | function AnsiStartsStr(const ASubText, AText: WideString): Boolean;
|
---|
718 | begin
|
---|
719 | Result := AnsiSameStr(ASubText, Copy(AText, 1, Length(ASubText)));
|
---|
720 | end;
|
---|
721 | begin
|
---|
722 | if FUseSecureSiteBGColor then
|
---|
723 | begin
|
---|
724 | if AnsiStartsStr('https', Text) then
|
---|
725 | Color := FSecureSiteBG
|
---|
726 | else
|
---|
727 | Color := FOldBGColor;
|
---|
728 | end;
|
---|
729 | end;
|
---|
730 |
|
---|
731 | procedure TCustomIEAddress.LoadFromFile(FileName: WideString);
|
---|
732 | begin
|
---|
733 | Clear;
|
---|
734 | try
|
---|
735 | Items.LoadFromFile(FileName);
|
---|
736 | finally
|
---|
737 | end;
|
---|
738 | end;
|
---|
739 |
|
---|
740 | procedure TCustomIEAddress.SaveToFile(FileName: WideString);
|
---|
741 | begin
|
---|
742 | try
|
---|
743 | Items.SaveToFile(FileName);
|
---|
744 | finally
|
---|
745 | end;
|
---|
746 | end;
|
---|
747 |
|
---|
748 | procedure TCustomIEAddress.TextUpdate;
|
---|
749 | var
|
---|
750 | st: WideString;
|
---|
751 | bCancel: Boolean;
|
---|
752 | begin
|
---|
753 | if Assigned(FEmbeddedWB) then
|
---|
754 | begin
|
---|
755 | st := Text;
|
---|
756 | bCancel := False;
|
---|
757 | if FUAfterNav then
|
---|
758 | begin
|
---|
759 | try
|
---|
760 | if FEmbeddedWB.HandleAllocated then
|
---|
761 | while (FEmbeddedWB.ReadyState <> READYSTATE_COMPLETE) do
|
---|
762 | begin
|
---|
763 | Forms.Application.ProcessMessages;
|
---|
764 | end;
|
---|
765 | case FTextAfterNav of
|
---|
766 | anLocationUrl: st := FEmbeddedWB.LocationURL;
|
---|
767 | anLocationName: st := FEmbeddedWB.LocationName;
|
---|
768 | end;
|
---|
769 | if Assigned(FOnUpdateText) then
|
---|
770 | FOnUpdateText(Self, Text, st, bCancel);
|
---|
771 | if not bCancel then
|
---|
772 | Text := st;
|
---|
773 | except
|
---|
774 | end;
|
---|
775 | end;
|
---|
776 | end;
|
---|
777 | end;
|
---|
778 |
|
---|
779 | //End of Accesories-------------------------------------------------------------
|
---|
780 |
|
---|
781 | //Graphical interface----------------------------------------------------------
|
---|
782 |
|
---|
783 | procedure TCustomIEAddress.DrawIEAddress(MouseInControl, DroppedDown: boolean);
|
---|
784 | var
|
---|
785 | CanvasCtrl: TControlCanvas;
|
---|
786 | Rect: TRect;
|
---|
787 | Position, RectT: integer;
|
---|
788 | begin
|
---|
789 | case FGUI of
|
---|
790 | gsThemes:
|
---|
791 | begin
|
---|
792 | CanvasCtrl := TControlCanvas.Create;
|
---|
793 | try
|
---|
794 | CanvasCtrl.Control := Self;
|
---|
795 | Rect := ClientRect;
|
---|
796 | CanvasCtrl.Brush.Style := bsClear; //bsSolid;
|
---|
797 | with CanvasCtrl do
|
---|
798 | begin
|
---|
799 | if BorderColor <> clNone then
|
---|
800 | begin
|
---|
801 | Brush.Color := BorderColor;
|
---|
802 | if FHasBorder then
|
---|
803 | begin
|
---|
804 | FrameRect(Rect);
|
---|
805 | end;
|
---|
806 | end
|
---|
807 | else
|
---|
808 | begin
|
---|
809 | Brush.Color := Color;
|
---|
810 | if FHasBorder then
|
---|
811 | begin
|
---|
812 | FrameRect(Rect);
|
---|
813 | end;
|
---|
814 | end;
|
---|
815 | end;
|
---|
816 | Rect.Left := Rect.Right - GetSystemMetrics(SM_CXHTHUMB) - 3;
|
---|
817 | Dec(Rect.Right);
|
---|
818 | InflateRect(Rect, 0, -1);
|
---|
819 | if DroppedDown then
|
---|
820 | with CanvasCtrl do
|
---|
821 | begin
|
---|
822 | Brush.Color := FButtonPressedColor;
|
---|
823 | FillRect(Rect);
|
---|
824 | Rect.Right := Rect.Left + 6;
|
---|
825 | Brush.Color := Color;
|
---|
826 | FillRect(Rect);
|
---|
827 | end
|
---|
828 | else
|
---|
829 | with CanvasCtrl do
|
---|
830 | begin
|
---|
831 | Brush.Color := ButtonColor;
|
---|
832 | FillRect(Rect);
|
---|
833 | Rect.Right := Rect.Left + 6;
|
---|
834 | Brush.Color := Color;
|
---|
835 | FillRect(Rect);
|
---|
836 | end;
|
---|
837 | if BorderColor <> clNone then
|
---|
838 | begin
|
---|
839 | Dec(Rect.Right);
|
---|
840 | with CanvasCtrl do
|
---|
841 | begin
|
---|
842 | Pen.Color := BorderColor;
|
---|
843 | MoveTo(Rect.Right, Rect.Top);
|
---|
844 | LineTo(Rect.Right, Rect.Bottom);
|
---|
845 | end;
|
---|
846 | end;
|
---|
847 | CanvasCtrl.Pen.Color := ArrowColor;
|
---|
848 | Rect := ClientRect;
|
---|
849 | Position := Rect.Right - 10;
|
---|
850 | RectT := Rect.Top;
|
---|
851 | with CanvasCtrl do
|
---|
852 | begin
|
---|
853 | Moveto(Position + 0, RectT + 10);
|
---|
854 | LineTo(Position + 5, RectT + 10);
|
---|
855 | MoveTo(Position + 1, RectT + 11);
|
---|
856 | LineTo(Position + 4, RectT + 11);
|
---|
857 | MoveTo(Position + 2, RectT + 12);
|
---|
858 | LineTo(Position + 3, RectT + 12);
|
---|
859 | end;
|
---|
860 | finally
|
---|
861 | CanvasCtrl.Free;
|
---|
862 | end;
|
---|
863 | end;
|
---|
864 | end;
|
---|
865 | end;
|
---|
866 |
|
---|
867 | procedure TCustomIEAddress.RepaintIEAddress(MouseActive: Boolean);
|
---|
868 | var
|
---|
869 | Bool: boolean;
|
---|
870 | begin
|
---|
871 | Bool := True;
|
---|
872 | if Assigned(FonPaint) then
|
---|
873 | FOnPaint(Self, Bool);
|
---|
874 | try
|
---|
875 | if not Bool then
|
---|
876 | begin
|
---|
877 | ValidateRect(EditHandle, nil);
|
---|
878 | Refresh;
|
---|
879 | Exit;
|
---|
880 | end;
|
---|
881 | if not (csDesigning in ComponentState) then
|
---|
882 | DrawIEAddress(FMouseActive, DroppedDown);
|
---|
883 | finally
|
---|
884 | end;
|
---|
885 | end;
|
---|
886 |
|
---|
887 | procedure TCustomIEAddress.CalculateRGN;
|
---|
888 | var
|
---|
889 | BorderRGN, DropDownRGN: HRGN;
|
---|
890 | BorderWidth, W: Integer;
|
---|
891 | begin
|
---|
892 | if Parent = nil then
|
---|
893 | Exit;
|
---|
894 | BorderRGN := CreateRectRGN(0, 0, Width, Height);
|
---|
895 | BorderWidth := GetSystemMetrics(SM_CXDLGFRAME);
|
---|
896 | if not FHasDropDown and not (Style in [csSimple]) then
|
---|
897 | begin
|
---|
898 | W := GetSystemMetrics(SM_CXVSCROLL);
|
---|
899 | Invalidate;
|
---|
900 | DropDownRGN := CreateRectRGN(Width - W - BorderWidth, 0, Width, Height);
|
---|
901 | CombineRgn(BorderRGN, BorderRGN, DropDownRGN, RGN_XOR);
|
---|
902 | DeleteObject(DropDownRGN);
|
---|
903 | end;
|
---|
904 | SetWindowRGN(Handle, BorderRGN, True);
|
---|
905 | end;
|
---|
906 |
|
---|
907 | procedure TCustomIEAddress.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState);
|
---|
908 | var
|
---|
909 | ImageIndex: Integer;
|
---|
910 | Bitmap: TBitmap;
|
---|
911 | Offset: Integer;
|
---|
912 | begin
|
---|
913 | Offset := 16;
|
---|
914 | if not (csDesigning in ComponentState) and DroppedDown then
|
---|
915 | begin
|
---|
916 | ImageIndex := GetImageIndex(Items[Index], True); //ListV
|
---|
917 | if (odSelected in State) then
|
---|
918 | FImageIndex := ImageIndex;
|
---|
919 | Bitmap := TBitMap.Create();
|
---|
920 | with Canvas do
|
---|
921 | begin
|
---|
922 | FillRect(Rect);
|
---|
923 | if Index < Items.Count then
|
---|
924 | begin
|
---|
925 | FImageList.GetBitmap(ImageIndex, Bitmap);
|
---|
926 | if Assigned(Bitmap) then
|
---|
927 | begin
|
---|
928 | Bitmap.Canvas.Brush.Style := bsClear;
|
---|
929 | BrushCopy(Bounds(Rect.Left + 4, (Rect.Top + Rect.Bottom - Bitmap.Height) div 2,
|
---|
930 | Bitmap.Width, Bitmap.Height), Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height),
|
---|
931 | Bitmap.Canvas.Pixels[0, Bitmap.Height - 1]);
|
---|
932 | Offset := Bitmap.Width + 6;
|
---|
933 | end;
|
---|
934 | TextOut(Rect.Left + OffSet, Rect.Top, Items[Index]);
|
---|
935 | end;
|
---|
936 | end;
|
---|
937 | BitMap.free;
|
---|
938 | end;
|
---|
939 | end;
|
---|
940 | //End of Graphical interface----------------------------------------------------
|
---|
941 |
|
---|
942 | //Icons Section-----------------------------------------------------------------
|
---|
943 |
|
---|
944 | function TCustomIEAddress.GetImageIndex(aUrl: string; IntoLV: Boolean): Integer;
|
---|
945 | var
|
---|
946 | Malloc: Imalloc;
|
---|
947 | SpecialFolder: Cardinal;
|
---|
948 | sfi: TShFileInfo;
|
---|
949 | pidl: PItemIDList;
|
---|
950 | ImgIdx: integer;
|
---|
951 | Ext: string;
|
---|
952 | bCancel: Boolean;
|
---|
953 | Icon: TIcon;
|
---|
954 | begin
|
---|
955 | Result := -1;
|
---|
956 | try
|
---|
957 | ShGetMalloc(Malloc);
|
---|
958 | //If its a MS special folder
|
---|
959 | SpecialFolder := GetSpecialFolderNo(aUrl);
|
---|
960 | if (SUCCEEDED(SHGetSpecialFolderLocation(Handle, SpecialFolder, Pidl))) then
|
---|
961 | begin
|
---|
962 | ShGetFileInfo(PChar(pidl), 0, sfi, sizeof(sfi), SHGFI_ICON or SHGFI_PIDL);
|
---|
963 | Result := sfi.iIcon;
|
---|
964 | end
|
---|
965 | else
|
---|
966 | begin //If its a local file
|
---|
967 | if FileExists(aUrl) or (AnsiCompareText(Copy(aURL, 1, 7), 'file://') = 0) then
|
---|
968 | begin
|
---|
969 | ShGetFileInfo(PChar(aUrl), FILE_ATTRIBUTE_NORMAL, sfi, sizeOf(sfi),
|
---|
970 | SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_SMALLICON);
|
---|
971 | Result := sfi.iIcon;
|
---|
972 | end
|
---|
973 | // If its a folder
|
---|
974 | else
|
---|
975 | if DirectoryExists(aUrl) then
|
---|
976 | begin
|
---|
977 | ShGetFileInfo(PChar(aUrl), FILE_ATTRIBUTE_DIRECTORY, sfi, SHGFI_EXETYPE,
|
---|
978 | SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_SMALLICON);
|
---|
979 | Result := sfi.iIcon;
|
---|
980 | end
|
---|
981 | // if its a a url (File/internet Address or Shortcut). so, lets start ;)
|
---|
982 | else
|
---|
983 | if aURL <> '' then
|
---|
984 | begin
|
---|
985 | Ext := GetExtension(aUrl);
|
---|
986 | if Ext = '*.htm' then
|
---|
987 | begin
|
---|
988 | if (not (DroppedDown)) and FShowFavicons then
|
---|
989 | begin //Get Favicon
|
---|
990 | ImgIdx := AddFaviconToImageList;
|
---|
991 | if ImgIdx > -1 then
|
---|
992 | begin
|
---|
993 | sfi.iIcon := AddFaviconToImageList;
|
---|
994 | Result := sfi.iIcon;
|
---|
995 | DestroyIcon(sfi.iIcon);
|
---|
996 | Malloc.Free(pidl);
|
---|
997 | Exit;
|
---|
998 | end;
|
---|
999 | end;
|
---|
1000 | if FUseAppIcon then
|
---|
1001 | begin //Get app icon
|
---|
1002 | icon := Forms.Application.Icon;
|
---|
1003 | if Assigned(FOnGetAppIcon) then
|
---|
1004 | FOnGetAppIcon(Self, bCancel, Icon);
|
---|
1005 | if not bCancel then
|
---|
1006 | begin
|
---|
1007 | ImgIdx := FImageList.AddIcon(Icon);
|
---|
1008 | sfi.iIcon := ImgIdx;
|
---|
1009 | Result := sfi.iIcon;
|
---|
1010 | end;
|
---|
1011 | end
|
---|
1012 | else
|
---|
1013 | begin //Get icon for internet shortcuts and addresses
|
---|
1014 | ShGetFileInfo('*.htm', FILE_ATTRIBUTE_NORMAL, sfi, sizeOf(sfi),
|
---|
1015 | SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_SMALLICON);
|
---|
1016 | if Assigned(FOnGetIcon) then
|
---|
1017 | FOnGetIcon(Self, 'htm', sfi.hIcon);
|
---|
1018 | Result := sfi.iIcon;
|
---|
1019 | end
|
---|
1020 | end
|
---|
1021 | else
|
---|
1022 | begin //Get all the rest system icons
|
---|
1023 | ShGetFileInfo(Pchar(Ext), FILE_ATTRIBUTE_NORMAL, sfi, sizeOf(sfi),
|
---|
1024 | SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_SMALLICON);
|
---|
1025 | Result := sfi.iIcon;
|
---|
1026 | end;
|
---|
1027 | end;
|
---|
1028 | end;
|
---|
1029 | finally
|
---|
1030 | try
|
---|
1031 | if Result <> -1 then
|
---|
1032 | DestroyIcon(sfi.iIcon)
|
---|
1033 | else
|
---|
1034 | Result := 0;
|
---|
1035 | finally
|
---|
1036 | end;
|
---|
1037 | Malloc.Free(pidl);
|
---|
1038 | end;
|
---|
1039 | end;
|
---|
1040 |
|
---|
1041 | function TCustomIEAddress.GrabFavicon(URL: string; dest: string): Boolean;
|
---|
1042 | var
|
---|
1043 | i: Integer;
|
---|
1044 | St: string;
|
---|
1045 | bCancel: Boolean;
|
---|
1046 | begin
|
---|
1047 | Result := False;
|
---|
1048 | try
|
---|
1049 | bCancel := False;
|
---|
1050 | St := RemovePrefix(URL, 'HTTP://');
|
---|
1051 | I := AnsiPos('/', RemovePrefix(St, 'HTTP://'));
|
---|
1052 | if I > 0 then
|
---|
1053 | St := 'http://' + System.Copy(St, 1, I);
|
---|
1054 | if Assigned(FOnGetFavicon) then
|
---|
1055 | FOnGetFavicon(Self, (GetCacheFolder + 'favicon.ico'), Text, bCancel, nil);
|
---|
1056 | if not bCancel then
|
---|
1057 | try
|
---|
1058 | Result := UrlDownloadToFile(nil, PChar(St + 'favicon.ico'), PChar(dest), 0, nil) = 0;
|
---|
1059 | except
|
---|
1060 | Result := False;
|
---|
1061 | end;
|
---|
1062 | finally
|
---|
1063 | end;
|
---|
1064 | end;
|
---|
1065 |
|
---|
1066 | function TCustomIEAddress.AddFaviconToImageList: integer;
|
---|
1067 | var
|
---|
1068 | ImgIdx: integer;
|
---|
1069 | Icon: TIcon;
|
---|
1070 | bCancel: Boolean;
|
---|
1071 | st: WideString;
|
---|
1072 | begin
|
---|
1073 | Result := -1;
|
---|
1074 | bCancel := False;
|
---|
1075 | if FShowFavicons and (not DroppedDown) and IsValidURL(Text) and
|
---|
1076 | (not (csDesigning in ComponentState)) then
|
---|
1077 | begin
|
---|
1078 | st := GetCacheFolder + 'favicon.ico';
|
---|
1079 | if GrabFavIcon(Text, st) then
|
---|
1080 | begin
|
---|
1081 | ImgIdx := -1;
|
---|
1082 | Icon := TIcon.Create();
|
---|
1083 | try
|
---|
1084 | Icon.LoadFromFile(st);
|
---|
1085 | except
|
---|
1086 | end;
|
---|
1087 | {$IFDEF DELPHI10_UP}
|
---|
1088 | Icon.SetSize(16, 16);
|
---|
1089 | {$ELSE}
|
---|
1090 | Icon.Height := 16;
|
---|
1091 | Icon.Width := 16;
|
---|
1092 | {$ENDIF}
|
---|
1093 | if Assigned(FOnGetFavicon) then
|
---|
1094 | FOnGetFavicon(Self, st, Text, bCancel, Icon);
|
---|
1095 | if not bCancel then
|
---|
1096 | try
|
---|
1097 | ImgIdx := FImageList.AddIcon(Icon)
|
---|
1098 | except
|
---|
1099 | end;
|
---|
1100 | if ImgIdx > 0 then
|
---|
1101 | begin
|
---|
1102 | Result := ImgIdx;
|
---|
1103 | if not bCancel then
|
---|
1104 | FImageList.Draw(FCanvas, IconLeft, IConTop, ImgIdx, True);
|
---|
1105 | end;
|
---|
1106 | Icon.Free;
|
---|
1107 | end;
|
---|
1108 | end;
|
---|
1109 | end;
|
---|
1110 |
|
---|
1111 | //End of Icons section----------------------------------------------------------
|
---|
1112 |
|
---|
1113 | // Registry Section ------------------------------------------------------------
|
---|
1114 |
|
---|
1115 | procedure TCustomIEAddress.GetTypedURLs;
|
---|
1116 | var
|
---|
1117 | Counter: Integer;
|
---|
1118 | S: WideString;
|
---|
1119 | GetTextTmp: PChar;
|
---|
1120 | begin
|
---|
1121 | Items.Clear;
|
---|
1122 | with TRegistry.Create do
|
---|
1123 | try
|
---|
1124 | RootKey := HKEY_CURRENT_USER;
|
---|
1125 | if FTypedUrlsMethod = tuCommon then
|
---|
1126 | begin
|
---|
1127 | if OpenKey('Software\Microsoft\Internet Explorer\TypedURLs', False) then
|
---|
1128 | begin
|
---|
1129 | for Counter := 1 to 25 do
|
---|
1130 | begin
|
---|
1131 | if ValueExists('Url' + IntToStr(Counter)) then
|
---|
1132 | begin
|
---|
1133 | S := ReadString('Url' + IntToStr(Counter));
|
---|
1134 | GetTextTmp := Items.GetText;
|
---|
1135 | if (AnsiPos(S, GetTextTmp) = 0) and (Trim(S) <> '') then
|
---|
1136 | Items.Add(Trim(S));
|
---|
1137 | StrDispose(GetTextTmp);
|
---|
1138 | end;
|
---|
1139 | end;
|
---|
1140 | CloseKey;
|
---|
1141 | end;
|
---|
1142 | end;
|
---|
1143 | if FTypedUrlsMethod = tuExtended then
|
---|
1144 | begin
|
---|
1145 | if OpenKey('Software\Microsoft\Internet Explorer\TypedAddress', False) then
|
---|
1146 | begin
|
---|
1147 | for Counter := 1 to 25 do
|
---|
1148 | begin
|
---|
1149 | if ValueExists('Url' + IntToStr(Counter)) then
|
---|
1150 | begin
|
---|
1151 | S := ReadString('Url' + IntToStr(Counter));
|
---|
1152 | GetTextTmp := Items.GetText;
|
---|
1153 | if (Ansipos(S, GetTextTmp) = 0) and (Trim(S) <> '') then
|
---|
1154 | Items.Add(S);
|
---|
1155 | StrDispose(GetTextTmp);
|
---|
1156 | end;
|
---|
1157 | end;
|
---|
1158 | CloseKey;
|
---|
1159 | end;
|
---|
1160 | end;
|
---|
1161 | finally
|
---|
1162 | Free;
|
---|
1163 | end;
|
---|
1164 | if not Assigned(FEmbeddedWB) and (TextOnLoad <> tlUserDefine) then
|
---|
1165 | if Items.Count <> 0 then
|
---|
1166 | Text := Trim(Items[0])
|
---|
1167 | else
|
---|
1168 | Text := '';
|
---|
1169 | end;
|
---|
1170 |
|
---|
1171 | procedure TCustomIEAddress.RegistryUpdate;
|
---|
1172 | var
|
---|
1173 | MaxItems, Counter: Integer;
|
---|
1174 | Name, SName: WideString;
|
---|
1175 | Reg: TRegistry;
|
---|
1176 | bCancel: Boolean;
|
---|
1177 | begin
|
---|
1178 | if (Trim(Text) <> '') and FUpdateRegistry then
|
---|
1179 | begin
|
---|
1180 | Reg := TRegistry.Create;
|
---|
1181 | bCancel := False;
|
---|
1182 | try
|
---|
1183 | with Reg do
|
---|
1184 | begin
|
---|
1185 | if Assigned(FOnUpdateRegistry) then
|
---|
1186 | FOnUpdateRegistry(Self, Text, bCancel);
|
---|
1187 | if not bCancel then
|
---|
1188 | begin
|
---|
1189 | RootKey := HKEY_CURRENT_USER;
|
---|
1190 | if FTypedUrlsMethod = tuCommon then
|
---|
1191 | begin
|
---|
1192 | if OpenKey('Software\Microsoft\Internet Explorer\TypedURLs', True) then
|
---|
1193 | begin
|
---|
1194 | if Items.Count < 24 then
|
---|
1195 | MaxItems := Items.Count + 1
|
---|
1196 | else
|
---|
1197 | MaxItems := 25;
|
---|
1198 | for Counter := 0 to MaxItems - 1 do
|
---|
1199 | begin
|
---|
1200 | Name := 'Url' + IntToStr(Counter);
|
---|
1201 | if items[Counter - 1] <> '' then
|
---|
1202 | WriteString(Name, items[Counter - 1]);
|
---|
1203 | end;
|
---|
1204 | end;
|
---|
1205 | CloseKey;
|
---|
1206 | end;
|
---|
1207 | if FTypedUrlsMethod = tuExtended then
|
---|
1208 | begin
|
---|
1209 | if OpenKey('Software\Microsoft\Internet Explorer\TypedAddress', True) then
|
---|
1210 | begin
|
---|
1211 | if Items.Count < 24 then
|
---|
1212 | MaxItems := Items.Count + 1
|
---|
1213 | else
|
---|
1214 | MaxItems := 25;
|
---|
1215 | for Counter := 0 to MaxItems - 1 do
|
---|
1216 | begin
|
---|
1217 | Name := 'Url' + IntToStr(Counter);
|
---|
1218 | if items[Counter - 1] <> '' then
|
---|
1219 | begin
|
---|
1220 | if Assigned(FEmbeddedWB) then
|
---|
1221 | begin
|
---|
1222 | FEmbeddedWB.Wait;
|
---|
1223 | SName := items[Counter - 1] + ' SiteName:' +
|
---|
1224 | FEmbeddedWB.LocationName;
|
---|
1225 | WriteString(Name, SName);
|
---|
1226 | end;
|
---|
1227 | end;
|
---|
1228 | end;
|
---|
1229 | end;
|
---|
1230 | end;
|
---|
1231 | CloseKey;
|
---|
1232 | end;
|
---|
1233 | end;
|
---|
1234 | finally
|
---|
1235 | Reg.Free;
|
---|
1236 | end;
|
---|
1237 | end;
|
---|
1238 | end;
|
---|
1239 | // End of Registry Section -----------------------------------------------------
|
---|
1240 |
|
---|
1241 | // Set--------------------------------------------------------------------------
|
---|
1242 |
|
---|
1243 | procedure TCustomIEAddress.SetAbout(Value: string);
|
---|
1244 | begin
|
---|
1245 | Exit;
|
---|
1246 | end;
|
---|
1247 |
|
---|
1248 | procedure TCustomIEAddress.SetBounds(Left, Top, Width, Height: Integer);
|
---|
1249 | begin
|
---|
1250 | inherited SetBounds(Left, Top, Width, Height);
|
---|
1251 | SetTextPosition;
|
---|
1252 | CalculateRGN;
|
---|
1253 | end;
|
---|
1254 |
|
---|
1255 | procedure TCustomIEAddress.SetDropDown(const Value: Boolean);
|
---|
1256 | begin
|
---|
1257 | FHasDropDown := Value;
|
---|
1258 | CalculateRGN;
|
---|
1259 | end;
|
---|
1260 |
|
---|
1261 | procedure TCustomIEAddress.SetFlat(const Value: Boolean);
|
---|
1262 | begin
|
---|
1263 | if Value <> FFlat then
|
---|
1264 | begin
|
---|
1265 | FFlat := Value;
|
---|
1266 | Ctl3D := not Value;
|
---|
1267 | FHasBorder := False;
|
---|
1268 | Invalidate;
|
---|
1269 | end;
|
---|
1270 | end;
|
---|
1271 |
|
---|
1272 | procedure TCustomIEAddress.SetTextPosition;
|
---|
1273 | begin
|
---|
1274 | SetWindowPos(EditHandle, 0, FImageSize + 7, 5, Width - 46, Height - 7, 0);
|
---|
1275 | end;
|
---|
1276 |
|
---|
1277 | procedure TCustomIEAddress.SetHasBorder(const Value: Boolean);
|
---|
1278 | begin
|
---|
1279 | FHasBorder := Value;
|
---|
1280 | Invalidate;
|
---|
1281 | CalculateRGN;
|
---|
1282 | DrawIEAddress(FMouseActive, DroppedDown);
|
---|
1283 | end;
|
---|
1284 |
|
---|
1285 | procedure TCustomIEAddress.SetSiteHint;
|
---|
1286 | begin
|
---|
1287 | if Assigned(FEmbeddedWB) and FShowSiteHint then
|
---|
1288 | begin
|
---|
1289 | if FEmbeddedWB.HandleAllocated then
|
---|
1290 | while (FEmbeddedWB.ReadyState <> READYSTATE_COMPLETE) do
|
---|
1291 | Forms.Application.ProcessMessages;
|
---|
1292 | ShowHint := True;
|
---|
1293 | Application.HintColor := FHintColor;
|
---|
1294 | if FEmbeddedWB.LocationUrl = Text then
|
---|
1295 | Hint := FEmbeddedWB.LocationName;
|
---|
1296 | end;
|
---|
1297 | end;
|
---|
1298 |
|
---|
1299 | procedure TCustomIEAddress.SetTheme;
|
---|
1300 | begin
|
---|
1301 | case FGUI of
|
---|
1302 | gsThemes:
|
---|
1303 | begin
|
---|
1304 | case FThemes of
|
---|
1305 | tmNone:
|
---|
1306 | begin
|
---|
1307 | FBorderColor := clblack;
|
---|
1308 | FArrowColor := clblack;
|
---|
1309 | FButtonPressedColor := clBtnShadow;
|
---|
1310 | FButtonColor := clBtnFace;
|
---|
1311 | end;
|
---|
1312 | tmXP:
|
---|
1313 | begin
|
---|
1314 | FBorderColor := clInactiveCaptionText;
|
---|
1315 | FArrowColor := clNavy;
|
---|
1316 | FButtonColor := $F0CAA6;
|
---|
1317 | FButtonPressedColor := clInactiveCaptionText;
|
---|
1318 | end;
|
---|
1319 | tmSilver:
|
---|
1320 | begin
|
---|
1321 | FBorderColor := clGray;
|
---|
1322 | FArrowColor := cl3DDKShadow;
|
---|
1323 | FButtonColor := clSilver;
|
---|
1324 | FButtonPressedColor := clActiveBorder;
|
---|
1325 | end;
|
---|
1326 | tmSoil:
|
---|
1327 | begin
|
---|
1328 | FBorderColor := clMaroon;
|
---|
1329 | FArrowColor := clMaroon;
|
---|
1330 | FButtonColor := clInfoBk;
|
---|
1331 | FButtonPressedColor := cl3DLight;
|
---|
1332 | end;
|
---|
1333 | end;
|
---|
1334 | RepaintIEAddress(True);
|
---|
1335 | end;
|
---|
1336 | end;
|
---|
1337 | end;
|
---|
1338 |
|
---|
1339 | procedure TCustomIEAddress.SetTextOnLd();
|
---|
1340 | begin
|
---|
1341 | if Assigned(FEmbeddedWB) then
|
---|
1342 | begin
|
---|
1343 | case FTextOnLoad of
|
---|
1344 | tlIELastVisited: ;
|
---|
1345 | tlIEHomePage: Text := FEmbeddedWB.GetIEHomePage;
|
---|
1346 | tlBlank: FEmbeddedWB.AssignEmptyDocument;
|
---|
1347 | tlUserDefine: Text := FTextOnShow;
|
---|
1348 | end;
|
---|
1349 | if FNavOnLoad then
|
---|
1350 | FEmbeddedWB.Go(Text);
|
---|
1351 | end;
|
---|
1352 | end;
|
---|
1353 |
|
---|
1354 | procedure TCustomIEAddress.SetModified(Value: Boolean);
|
---|
1355 | begin
|
---|
1356 | if HandleAllocated then
|
---|
1357 | PostMessage(EditHandle, EM_SETMODIFY, Byte(Value), 0)
|
---|
1358 | else
|
---|
1359 | FModified := Value;
|
---|
1360 | end;
|
---|
1361 |
|
---|
1362 | procedure TCustomIEAddress.SetAutoCompleteOptions(const Value: TAutoCompleteOptions);
|
---|
1363 | begin
|
---|
1364 | if FAutoCompleteOptions <> Value then
|
---|
1365 | begin
|
---|
1366 | FAutoCompleteOptions := Value;
|
---|
1367 | case FAComp of
|
---|
1368 | AutoComplete1: UpdateAutoComplete;
|
---|
1369 | AutoComplete2: Exit;
|
---|
1370 | end;
|
---|
1371 |
|
---|
1372 | end;
|
---|
1373 | end;
|
---|
1374 |
|
---|
1375 | procedure TCustomIEAddress.SetACOptions(const Value: TAutoComplete2Options);
|
---|
1376 | const
|
---|
1377 | IID_IAutoComplete2: TGUID = '{EAC04BC0-3791-11d2-BB95-0060977B464C}';
|
---|
1378 | Options: array[TAutoComplete2Option] of integer =
|
---|
1379 | ($0000, $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080, $0100);
|
---|
1380 | var
|
---|
1381 | Option: TAutoComplete2Option;
|
---|
1382 | Opt: DWORD;
|
---|
1383 | AC2: IAutoComplete2;
|
---|
1384 | begin
|
---|
1385 | if (FAutoComplete <> nil) then
|
---|
1386 | begin
|
---|
1387 | if S_OK = FAutoComplete.QueryInterface(IID_IAutoComplete2, AC2) then
|
---|
1388 | begin
|
---|
1389 | Opt := ACO_NONE;
|
---|
1390 | for Option := Low(Options) to High(Options) do
|
---|
1391 | begin
|
---|
1392 | if (Option in FAutoComplete2Options) then
|
---|
1393 | Opt := Opt or DWORD(Options[Option]);
|
---|
1394 | end;
|
---|
1395 | AC2.SetOptions(Opt);
|
---|
1396 | end;
|
---|
1397 | end;
|
---|
1398 | FAutoComplete2Options := Value;
|
---|
1399 | end;
|
---|
1400 |
|
---|
1401 | procedure TCustomIEAddress.SetAutoComplete2Source(const Value: TAutoComplete2Source);
|
---|
1402 | begin
|
---|
1403 | if FAutoComplete2Source <> Value then
|
---|
1404 | begin
|
---|
1405 | FAutoComplete2Source := Value;
|
---|
1406 | RecreateWnd;
|
---|
1407 | end;
|
---|
1408 | end;
|
---|
1409 |
|
---|
1410 | // End of Set-------------------------------------------------------------------
|
---|
1411 |
|
---|
1412 | //events------------------------------------------------------------------
|
---|
1413 |
|
---|
1414 | constructor TCustomIEAddress.Create(AOwner: TComponent);
|
---|
1415 | var
|
---|
1416 | sfi: TShFileInfo;
|
---|
1417 | aHandle: Cardinal;
|
---|
1418 | begin
|
---|
1419 | inherited Create(AOwner);
|
---|
1420 | ControlStyle := ControlStyle + [csOpaque] - [csSetCaption];
|
---|
1421 | DoubleBuffered := True;
|
---|
1422 | FAbout := 'TIEAddress. ' + WEB_SITE;
|
---|
1423 | FButtonWidth := GetSystemMetrics(SM_CXVSCROLL);
|
---|
1424 | FButtonColor := clBtnFace;
|
---|
1425 | FButtonPressedColor := clBtnFace;
|
---|
1426 | AutoComplete2Options := [acoAutoSuggest, acoAutoAppend, acoSearch];
|
---|
1427 | AutoComplete2Source := [acsList, acsHistory, acsMRU, acsShell];
|
---|
1428 | AutoCompleteOptions := [acAutoAppend, acUrlHistory];
|
---|
1429 | AutoCompleteVersion := AutoComplete2;
|
---|
1430 | AutoNavigateOnDblClk := True;
|
---|
1431 | AutoNavigateOnEnterKey := True;
|
---|
1432 | AutoNavigateOnLoad := True;
|
---|
1433 | AutoNavigateOnSelected := True;
|
---|
1434 | FCustomProperty := '';
|
---|
1435 | FGUI := gsThemes;
|
---|
1436 | FHasBorder := True;
|
---|
1437 | FHasDropDown := True;
|
---|
1438 | FHintColor := clInfoBK;
|
---|
1439 | FImageIndex := -1;
|
---|
1440 | FImageSize := 16;
|
---|
1441 | FMouseActive := False;
|
---|
1442 | ShowHint := True;
|
---|
1443 | FSecureSiteBG := clInfobk;
|
---|
1444 | FSelImageIndex := -1;
|
---|
1445 | FShowFavicons := False;
|
---|
1446 | FShowSiteHint := True;
|
---|
1447 | FTextOnLoad := tlIEHomePage;
|
---|
1448 | FTypedUrlsMethod := tuCommon;
|
---|
1449 | FUAfterNav := True;
|
---|
1450 | FUpdateRegistry := True;
|
---|
1451 | FUseAppIcon := False;
|
---|
1452 | FUseSecureSiteBGColor := True;
|
---|
1453 | Height := 22;
|
---|
1454 | IconLeft := 4;
|
---|
1455 | IconTop := 3;
|
---|
1456 | ItemHeight := 16;
|
---|
1457 | Sorted := False;
|
---|
1458 | Style := csDropDown;
|
---|
1459 | TabOrder := 0;
|
---|
1460 | Width := 145;
|
---|
1461 | FImageList := TImageList.Create(self);
|
---|
1462 | FImageList.DrawingStyle := dsNormal;
|
---|
1463 | FImageList.ShareImages := True;
|
---|
1464 | FImageList.Height := 16;
|
---|
1465 | FImageList.Width := 16;
|
---|
1466 | FCanvas := TControlCanvas.Create;
|
---|
1467 | FCanvas.Control := Self;
|
---|
1468 | FCanvas.Brush.Style := bsClear;
|
---|
1469 | FCanvas.Handle := EditHandle;
|
---|
1470 | dllVer := GetDllVersion('Shlwapi.dll');
|
---|
1471 | aHandle := ShGetFileInfo('', 0, sfi, sizeOf(sfi), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
|
---|
1472 | if (aHandle <> 0) then
|
---|
1473 | FImageList.Handle := aHandle;
|
---|
1474 | end;
|
---|
1475 |
|
---|
1476 | destructor TCustomIEAddress.Destroy;
|
---|
1477 | begin
|
---|
1478 | Application.HintColor := FOldHintColor;
|
---|
1479 | Color := FOldBGColor;
|
---|
1480 | FImageList.free;
|
---|
1481 | FCanvas.free; //Ray
|
---|
1482 | inherited Destroy;
|
---|
1483 | end;
|
---|
1484 |
|
---|
1485 | procedure TCustomIEAddress.Loaded;
|
---|
1486 | begin
|
---|
1487 | inherited;
|
---|
1488 | FOldBGColor := Self.Color;
|
---|
1489 | FOldHintColor := Application.HintColor;
|
---|
1490 | DoubleBuffered := True;
|
---|
1491 | Modified := False;
|
---|
1492 | if not (csDesigning in ComponentState) then
|
---|
1493 | begin
|
---|
1494 | case FGUI of
|
---|
1495 | gsThemes:
|
---|
1496 | begin
|
---|
1497 | BevelEdges := [];
|
---|
1498 | BevelInner := bvnone;
|
---|
1499 | BevelKind := bkFlat;
|
---|
1500 | BevelOuter := BVNone;
|
---|
1501 | BiDiMode := bdLeftToRight;
|
---|
1502 | Ctl3D := False;
|
---|
1503 | ParentBiDiMode := False;
|
---|
1504 | ParentCtl3D := False;
|
---|
1505 | ImeMode := imDontCare;
|
---|
1506 | ImeName := '';
|
---|
1507 | SetTheme;
|
---|
1508 | end;
|
---|
1509 | end;
|
---|
1510 | CalculateRGN;
|
---|
1511 | GetTypedURLs;
|
---|
1512 | Text := FixUrl(Text);
|
---|
1513 | CheckSecureSite;
|
---|
1514 | TextUpdate;
|
---|
1515 | SetSiteHint;
|
---|
1516 | AddFaviconToImageList;
|
---|
1517 | SetTextOnLd();
|
---|
1518 | end;
|
---|
1519 | end;
|
---|
1520 |
|
---|
1521 | procedure TCustomIEAddress.CreateParams(var Params: TCreateParams);
|
---|
1522 | begin
|
---|
1523 | inherited CreateParams(Params);
|
---|
1524 | Params.Style := Params.Style or cbs_OwnerDrawFixed or ES_MULTILINE;
|
---|
1525 | end;
|
---|
1526 |
|
---|
1527 | procedure TCustomIEAddress.CreateWindowHandle(const Params: TCreateParams);
|
---|
1528 | begin
|
---|
1529 | inherited CreateWindowHandle(Params);
|
---|
1530 | SetTextPosition;
|
---|
1531 | end;
|
---|
1532 |
|
---|
1533 | procedure TCustomIEAddress.CreateWnd;
|
---|
1534 | begin
|
---|
1535 | inherited CreateWnd;
|
---|
1536 | case FAComp of
|
---|
1537 | AutoComplete1: UpdateAutoComplete;
|
---|
1538 | AutoComplete2:
|
---|
1539 | if (GetDllVersion('Shlwapi.dll') > 4.72) then
|
---|
1540 | UpdateIAutoComplete2
|
---|
1541 | else
|
---|
1542 | UpdateAutoComplete;
|
---|
1543 | end;
|
---|
1544 | end;
|
---|
1545 |
|
---|
1546 | procedure TCustomIEAddress.UpdateAutoComplete;
|
---|
1547 | var
|
---|
1548 | SelOptions: DWORD;
|
---|
1549 | begin
|
---|
1550 | SelOptions := 0;
|
---|
1551 | if acAutoSuggest in FAutoCompleteOptions then
|
---|
1552 | SelOptions := SelOptions or SHACF_AUTOSUGGEST_FORCE_ON
|
---|
1553 | else
|
---|
1554 | SelOptions := SelOptions or SHACF_AUTOSUGGEST_FORCE_OFF;
|
---|
1555 | if acAutoAppend in FAutoCompleteOptions then
|
---|
1556 | SelOptions := SelOptions or SHACF_AUTOAPPEND_FORCE_ON
|
---|
1557 | else
|
---|
1558 | SelOptions := SelOptions or SHACF_AUTOAPPEND_FORCE_OFF;
|
---|
1559 | if acFileSystem in FAutoCompleteOptions then
|
---|
1560 | SelOptions := SelOptions or SHACF_FILESYSTEM
|
---|
1561 | else
|
---|
1562 | SelOptions := SelOptions or SHACF_FILESYSTEM;
|
---|
1563 | if acUrlHistory in FAutoCompleteOptions then
|
---|
1564 | SelOptions := SelOptions or SHACF_URLHISTORY
|
---|
1565 | else
|
---|
1566 | SelOptions := SelOptions or SHACF_URLHISTORY;
|
---|
1567 | if acUrlMRU in FAutoCompleteOptions then
|
---|
1568 | SelOptions := SelOptions or SHACF_URLMRU
|
---|
1569 | else
|
---|
1570 | SelOptions := SelOptions or SHACF_URLMRU;
|
---|
1571 | if acUrlAll in FAutoCompleteOptions then
|
---|
1572 | SelOptions := SelOptions or SHACF_URLALL
|
---|
1573 | else
|
---|
1574 | SelOptions := SelOptions or SHACF_URLALL;
|
---|
1575 | if acUseTab in FAutoCompleteOptions then
|
---|
1576 | SelOptions := SelOptions or SHACF_USETAB
|
---|
1577 | else
|
---|
1578 | SelOptions := SelOptions or SHACF_USETAB;
|
---|
1579 | SHAutoComplete(EditHandle, SelOptions);
|
---|
1580 | end;
|
---|
1581 |
|
---|
1582 | procedure TCustomIEAddress.UpdateIAutoComplete2;
|
---|
1583 | const
|
---|
1584 | IID_IAutoComplete: TGUID = '{00bb2762-6a77-11d0-a535-00c04fd7d062}';
|
---|
1585 | CLSID_IAutoComplete: TGUID = '{00BB2763-6A77-11D0-A535-00C04FD7D062}';
|
---|
1586 | CLSID_ACLHistory: TGUID = (D1: $00BB2764; D2: $6A77; D3: $11D0; D4: ($A5, $35, $00, $C0, $4F, $D7, $D0, $62));
|
---|
1587 | CLSID_ACListISF: TGUID = (D1: $03C036F1; D2: $A186; D3: $11D0; D4: ($82, $4A, $00, $AA, $00, $5B, $43, $83));
|
---|
1588 | CLSID_ACLMRU: TGUID = (D1: $6756A641; D2: $DE71; D3: $11D0; D4: ($83, $1B, $00, $AA, $00, $5B, $43, $83));
|
---|
1589 | var
|
---|
1590 | Uk: IUnknown;
|
---|
1591 | ACInterface: IEnumString;
|
---|
1592 | begin
|
---|
1593 | try
|
---|
1594 | Uk := CreateComObject(CLSID_IAutoComplete);
|
---|
1595 | if (Uk <> nil) and (Uk.QueryInterface(IID_IAutoComplete, FAutoComplete) = S_OK) then
|
---|
1596 | begin
|
---|
1597 | if acsHistory in FAutoComplete2Source then
|
---|
1598 | ACInterface := CreateComObject(CLSID_ACLHistory) as IEnumString
|
---|
1599 | else
|
---|
1600 | if acsMRU in FAutoComplete2Source then
|
---|
1601 | ACInterface := CreateComObject(CLSID_ACLMRU) as IEnumString
|
---|
1602 | else
|
---|
1603 | if acsShell in FAutoComplete2Source then
|
---|
1604 | ACInterface := CreateComObject(CLSID_ACListISF) as IEnumString;
|
---|
1605 | ACInterface := CreateComObject(CLSID_ACLHistory) as IEnumString;
|
---|
1606 | SetACOptions(FAutoComplete2Options);
|
---|
1607 | FAutoComplete.Init(Edithandle, ACInterface, nil, nil)
|
---|
1608 | end;
|
---|
1609 | except
|
---|
1610 | end;
|
---|
1611 | end;
|
---|
1612 |
|
---|
1613 | procedure TCustomIEAddress.DestroyWnd;
|
---|
1614 | begin
|
---|
1615 | FModified := Modified;
|
---|
1616 | inherited DestroyWnd;
|
---|
1617 | end;
|
---|
1618 |
|
---|
1619 | procedure TCustomIEAddress.WndProc(var Message: TMessage);
|
---|
1620 | begin
|
---|
1621 | inherited;
|
---|
1622 | case Message.Msg of
|
---|
1623 | CBN_DropDown or CB_ShowDropDown: SetTextPosition;
|
---|
1624 | CM_MouseEnter: RepaintIEAddress(True);
|
---|
1625 |
|
---|
1626 | WM_MOUSEACTIVATE:
|
---|
1627 | begin
|
---|
1628 | if not DroppedDown then
|
---|
1629 | Exit;
|
---|
1630 | Message.Result := MA_NOACTIVATE;
|
---|
1631 | SetWindowPos(Parent.Handle, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
|
---|
1632 | if (GetActiveWindow <> Parent.Handle) then
|
---|
1633 | SetActiveWindow(Parent.Handle);
|
---|
1634 | end;
|
---|
1635 |
|
---|
1636 | WM_Paint:
|
---|
1637 | begin
|
---|
1638 | if not (csReading in ComponentState) then
|
---|
1639 | begin
|
---|
1640 | ControlStyle := ControlStyle + [csOpaque];
|
---|
1641 | RepaintIEAddress(False);
|
---|
1642 | SetTextPosition;
|
---|
1643 | FImageList.Draw(FCanvas, IconLeft, IconTop,
|
---|
1644 | GetImageIndex(Text, False), True);
|
---|
1645 | end;
|
---|
1646 | end;
|
---|
1647 | end;
|
---|
1648 | end;
|
---|
1649 |
|
---|
1650 | procedure TCustomIEAddress.MouseMove(Shift: TShiftState; X, Y: Integer);
|
---|
1651 | begin
|
---|
1652 | CheckButtonState(-1, -1);
|
---|
1653 | inherited;
|
---|
1654 | end;
|
---|
1655 |
|
---|
1656 | procedure TCustomIEAddress.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
---|
1657 | begin
|
---|
1658 | if DroppedDown then
|
---|
1659 | begin
|
---|
1660 | Include(FEditState, csButtonPressed);
|
---|
1661 | Include(FEditState, csMouseCaptured);
|
---|
1662 | end;
|
---|
1663 | inherited;
|
---|
1664 | end;
|
---|
1665 |
|
---|
1666 | procedure TCustomIEAddress.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
---|
1667 | begin
|
---|
1668 | CheckButtonState(-1, -1);
|
---|
1669 | inherited;
|
---|
1670 | end;
|
---|
1671 |
|
---|
1672 | procedure TCustomIEAddress.Change;
|
---|
1673 | // var
|
---|
1674 | // Key: Word;
|
---|
1675 | begin
|
---|
1676 | PostMessage(Handle, CB_SHOWDROPDOWN, 0, 0);
|
---|
1677 | FImageList.Draw(FCanvas, IconLeft, IconTop, GetImageIndex(Text, False), True);
|
---|
1678 | // key := VK_RETURN;
|
---|
1679 | // KeyDown(key, []);
|
---|
1680 | end;
|
---|
1681 |
|
---|
1682 | procedure TCustomIEAddress.Click;
|
---|
1683 | var
|
---|
1684 | Rec: TRect;
|
---|
1685 | pt: TPoint;
|
---|
1686 | bCancel: Boolean;
|
---|
1687 | begin
|
---|
1688 | inherited;
|
---|
1689 | if not (csDesigning in ComponentState) then
|
---|
1690 | begin
|
---|
1691 | bCancel := False;
|
---|
1692 | GetCursorPos(pt);
|
---|
1693 | PostMessage(Handle, CB_GETDROPPEDCONTROLRECT, 0, longint(@rec));
|
---|
1694 | if ((pt.x >= Rec.Left) and (pt.x <= Rec.Right)
|
---|
1695 | and (pt.y >= Rec.Top) and (pt.y <= Rec.Bottom)) then
|
---|
1696 | begin
|
---|
1697 | if Assigned(FOnUrlSelected) then
|
---|
1698 | FOnUrlSelected(Self, Text, bCancel);
|
---|
1699 | if not bCancel then
|
---|
1700 | begin
|
---|
1701 | FSelImageIndex := FImageIndex;
|
---|
1702 | FImageList.Draw(FCanvas, 4, 3, FSelImageIndex, True);
|
---|
1703 | if FNavOnSelected and Assigned(FEmbeddedWB) then
|
---|
1704 | FEmbeddedWB.Go(Text);
|
---|
1705 | AddToList;
|
---|
1706 | end;
|
---|
1707 | end;
|
---|
1708 | // PostMessage(EditHandle, EM_SETREADONLY, 0, 0);
|
---|
1709 | // PostMessage(EditHandle, EM_SETSEL, 0, -1);
|
---|
1710 | end;
|
---|
1711 | end;
|
---|
1712 |
|
---|
1713 | procedure TCustomIEAddress.DblClick;
|
---|
1714 | var
|
---|
1715 | Rec: TRect;
|
---|
1716 | pt: TPoint;
|
---|
1717 | begin
|
---|
1718 | inherited;
|
---|
1719 | GetCursorPos(pt);
|
---|
1720 | PostMessage(Handle, CB_GETDROPPEDCONTROLRECT, 0, longint(@rec));
|
---|
1721 | if ((pt.x >= Rec.Left) and (pt.x <= Rec.Right)
|
---|
1722 | and (pt.y >= Rec.Top) and (pt.y <= Rec.Bottom)) then
|
---|
1723 | begin
|
---|
1724 | fSelImageIndex := FImageIndex;
|
---|
1725 | fImageList.Draw(FCanvas, 4, 3, fSelImageIndex, True);
|
---|
1726 | AddToList;
|
---|
1727 | if FNavOnDblClk and Assigned(FEmbeddedWB) then
|
---|
1728 | FEmbeddedWB.Go(Text);
|
---|
1729 | end;
|
---|
1730 | PostMessage(EditHandle, EM_SETREADONLY, 0, 0);
|
---|
1731 | PostMessage(EditHandle, EM_SETSEL, 0, -1);
|
---|
1732 | end;
|
---|
1733 |
|
---|
1734 | procedure TCustomIEAddress.KeyDown(var Key: Word; Shift: TShiftState);
|
---|
1735 | var
|
---|
1736 | FListIndex: integer;
|
---|
1737 | bCancel: Boolean;
|
---|
1738 | begin
|
---|
1739 | inherited;
|
---|
1740 | bCancel := False;
|
---|
1741 | if (DroppedDown) then
|
---|
1742 | begin
|
---|
1743 | if (Key = VK_RETURN) then
|
---|
1744 | begin
|
---|
1745 | if Assigned(FOnUrlSelected) then
|
---|
1746 | FOnUrlSelected(Self, Text, bCancel);
|
---|
1747 | if not bCancel then
|
---|
1748 | begin
|
---|
1749 | Key := VK_CLEAR;
|
---|
1750 | FListIndex := SendMessage(Handle, CB_GETCURSEL, 0, 0);
|
---|
1751 | if FListIndex > 0 then
|
---|
1752 | Items.Move(FListIndex, 0);
|
---|
1753 | Text := Items[0];
|
---|
1754 | PostMessage(Handle, CB_SHOWDROPDOWN, 0, 0);
|
---|
1755 | PostMessage(handle, CB_SETCURSEL, 0, 0);
|
---|
1756 | PostMessage(EditHandle, EM_SETREADONLY, 0, 0);
|
---|
1757 | PostMessage(EditHandle, EM_SETSEL, 0, -1);
|
---|
1758 | AddToList;
|
---|
1759 | if Assigned(FEmbeddedWB) then
|
---|
1760 | begin
|
---|
1761 | if FNavOnEnterKey then
|
---|
1762 | FEmbeddedWB.Go(Text);
|
---|
1763 | if FNavOnSelected then
|
---|
1764 | FEmbeddedWB.Go(Text);
|
---|
1765 | end;
|
---|
1766 | FSelImageIndex := FImageIndex;
|
---|
1767 | if Modified then
|
---|
1768 | FImageList.Draw(FCanvas, 4, 3, FSelImageIndex, True);
|
---|
1769 | end;
|
---|
1770 | end
|
---|
1771 | else
|
---|
1772 | if ((ssAlt in Shift) and ((Key = VK_DOWN) or (Key = VK_UP))) or
|
---|
1773 | (Key = VK_ESCAPE) then
|
---|
1774 | begin
|
---|
1775 | Key := VK_CLEAR;
|
---|
1776 | PostMessage(Handle, CB_SHOWDROPDOWN, 0, 0);
|
---|
1777 | PostMessage(EditHandle, EM_SETREADONLY, 0, 0);
|
---|
1778 | PostMessage(EditHandle, EM_SETSEL, 0, -1);
|
---|
1779 | end
|
---|
1780 | else
|
---|
1781 | if (not (ssAlt in Shift)) and (Key = VK_DOWN) then
|
---|
1782 | begin
|
---|
1783 | Key := VK_CLEAR;
|
---|
1784 | FListIndex := SendMessage(Handle, CB_GETCURSEL, 0, 0);
|
---|
1785 | if FListIndex >= 24 then
|
---|
1786 | Exit;
|
---|
1787 | PostMessage(Handle, CB_SETCURSEL, (FListIndex + 1), 0);
|
---|
1788 | PostMessage(EditHandle, EM_SETSEL, -1, 0);
|
---|
1789 | FSelImageIndex := FImageIndex;
|
---|
1790 | FImageList.Draw(FCanvas, 4, 3, FSelImageIndex, True);
|
---|
1791 | if FNavOnSelected and Assigned(FEmbeddedWB) then
|
---|
1792 | FEmbeddedWB.Go(Text);
|
---|
1793 | end
|
---|
1794 | else
|
---|
1795 | if (not (ssAlt in Shift)) and (Key = VK_UP) then
|
---|
1796 | begin
|
---|
1797 | Key := VK_CLEAR;
|
---|
1798 | FListIndex := SendMessage(Handle, CB_GETCURSEL, 0, 0);
|
---|
1799 | if FListIndex <= 0 then
|
---|
1800 | Exit;
|
---|
1801 | PostMessage(Handle, CB_SETCURSEL, (FListIndex - 1), 0);
|
---|
1802 | PostMessage(EditHandle, EM_SETSEL, -1, 0);
|
---|
1803 | FSelImageIndex := FImageIndex;
|
---|
1804 | FImageList.Draw(FCanvas, 4, 3, FSelImageIndex, True);
|
---|
1805 | if Assigned(FEmbeddedWB) and FNavOnSelected then
|
---|
1806 | FEmbeddedWB.Go(Text);
|
---|
1807 | end;
|
---|
1808 | end
|
---|
1809 | else //Not Droped Down
|
---|
1810 | begin
|
---|
1811 | if (Key = VK_RETURN) then
|
---|
1812 | begin
|
---|
1813 | if Text <> '' then
|
---|
1814 | begin
|
---|
1815 | if Assigned(FOnUrlSelected) then
|
---|
1816 | FOnUrlSelected(Self, Text, bCancel);
|
---|
1817 | if not BCancel then
|
---|
1818 | begin
|
---|
1819 | if FNavOnEnterKey and Assigned(FEmbeddedWB) then
|
---|
1820 | FEmbeddedWB.Go(Text);
|
---|
1821 | AddToList;
|
---|
1822 | end;
|
---|
1823 | end;
|
---|
1824 | end
|
---|
1825 | else
|
---|
1826 | if (Key = VK_DOWN) or ((ssAlt in Shift) and (Key = VK_DOWN)) then
|
---|
1827 | begin
|
---|
1828 | Key := VK_CLEAR;
|
---|
1829 | PostMessage(Handle, CB_GETCURSEL, 0, 0);
|
---|
1830 | // PostMessage(EditHandle, EM_SETREADONLY, 1, 0);
|
---|
1831 | PostMessage(EditHandle, EM_SETSEL, -1, 0);
|
---|
1832 | PostMessage(Handle, CB_SHOWDROPDOWN, 1, 0);
|
---|
1833 | if FNavOnSelected and Assigned(FEmbeddedWB) then
|
---|
1834 | FEmbeddedWB.Go(Text);
|
---|
1835 | end
|
---|
1836 | else
|
---|
1837 | if (Key = VK_UP) then
|
---|
1838 | begin
|
---|
1839 | Key := VK_CLEAR;
|
---|
1840 | Exit;
|
---|
1841 | end
|
---|
1842 | end
|
---|
1843 | end;
|
---|
1844 |
|
---|
1845 | procedure TCustomIEAddress.DragDrop(Source: TObject; X, Y: Integer);
|
---|
1846 | begin
|
---|
1847 | inherited;
|
---|
1848 | end;
|
---|
1849 |
|
---|
1850 | procedure TCustomIEAddress.DragOver(Source: TObject; X, Y: Integer;
|
---|
1851 | State: TDragState; var Accept: Boolean);
|
---|
1852 | begin
|
---|
1853 | inherited;
|
---|
1854 | end;
|
---|
1855 |
|
---|
1856 | initialization //Must have for ShGetFileInfo
|
---|
1857 | OleInitialize(nil);
|
---|
1858 |
|
---|
1859 | finalization
|
---|
1860 | OleUninitialize;
|
---|
1861 | end.
|
---|
1862 |
|
---|