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