| [541] | 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 |  | 
|---|