Mega Code Archive

 
Categories / Delphi / VCL
 

Link Label Component

Title: Link Label Component Question: I have seen many tips on how to call the default browser and open a web page, yet no component on Delphi3000 that allows to simply be placed on a form at design time. Well, here it is. Answer: This component was developed for the German-language forum Delphi-PRAXiS by myself. There is not much to say about it. Simply copy the source code into a new Delphi unit save it and install the component in Delphi. Afterwards you may place it on your form, set link and caption, adjust the colors for Hot-Link, Visited and Unvisited. Just like a link within your HTML. You may place a link to an e-mail address also, by simply preceding the email address with a mailto:. ======================== CODE START ======================== {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Unit Name : uDPLinkLabel * Copyright : Copyright 2001, 2002 by gate(n)etwork. All Rights Reserved. * Author : Daniel Wischnewski * Freeware : This source is released under the Mozilla Public License. It may * be reproduced, as long as all references to its original source * are maintained. * The most recent version is publicly available at * http://www.Delphi-PRAXiS.net * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} //: Enthlt eine Internetlink-Label-Komponente fr die Mitglieder der Delphi-PRAXiS. unit uDPLinkLabel; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type //: Komponente zur Bereitstellung von Links innerhalb von Delphi-Anwendungen TDPLinkLabel = class (TCustomLabel) private FHoverLinkFont: TFont; FHyperLink: string; FLinkFont: TFont; FMouseHover: Boolean; FVisited: Boolean; FVisitedLinkFont: TFont; procedure FontChanged(Sender: TObject); procedure SetHoverLinkFont(Value: TFont); procedure SetHyperLink(Value: string); procedure SetLinkFont(Value: TFont); procedure SetVisited(Value: Boolean); procedure SetVisitedLinkFont(Value: TFont); procedure UpdateLinkFont; protected procedure Click; override; procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure ExecuteHyperLink(aLink: String = ''); published property Align; property Alignment; property Anchors; property AutoSize; property BiDiMode; property Caption; property Color; property Constraints; property DragCursor; property DragKind; property DragMode; property Enabled; property FocusControl; property HoverLinkFont: TFont read FHoverLinkFont write SetHoverLinkFont; property HyperLink: string read FHyperLink write SetHyperLink; property Layout; property LinkFont: TFont read FLinkFont write SetLinkFont; property OnClick; property OnContextPopup; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEndDock; property OnEndDrag; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDock; property OnStartDrag; property ParentBiDiMode; property ParentColor; property ParentShowHint; property PopupMenu; property ShowAccelChar; property ShowHint; property Transparent; property Visible; property Visited: Boolean read FVisited write SetVisited; property VisitedLinkFont: TFont read FVisitedLinkFont write SetVisitedLinkFont; property WordWrap; end; procedure Register; implementation uses ShellAPI; procedure Register; begin RegisterComponents('Delphi-PRAXiS', [TDPLinkLabel]); end; { TDPLinkLabel } constructor TDPLinkLabel.Create(AOwner: TComponent); begin inherited Create(AOwner); // create default link font object FLinkFont := TFont.Create; FLinkFont.OnChange := FontChanged; FLinkFont.Color := clBlue; FLinkFont.Style := [fsUnderline]; // set inherited font Font := LinkFont; // create visit link font object FVisitedLinkFont := TFont.Create; FVisitedLinkFont.OnChange := FontChanged; FVisitedLinkFont.Color := clPurple; FVisitedLinkFont.Style := [fsUnderline]; // create hover link font object FHoverLinkFont := TFont.Create; FHoverLinkFont.OnChange := FontChanged; FHoverLinkFont.Color := clRed; FHoverLinkFont.Style := [fsUnderline]; // initialize vars FMouseHover := False; FVisited := False; Caption := 'Delphi-PRAXiS'; FHyperLink := 'http://www.Delphi-PRAXiS.net'; // override initialization of previous vars Cursor := crHandPoint; end; destructor TDPLinkLabel.Destroy; begin inherited Destroy; // free link font objects FLinkFont.Free; FHoverLinkFont.Free; FVisitedLinkFont.Free; end; procedure TDPLinkLabel.Click; begin // the onClick method will be overriden only, if a link is assigned to the // Link property of the component and no custom on-click handler is assigned if (not Assigned(OnClick)) and (Action = nil) and (ActionLink = nil) and ( HyperLink '') then // call link ExecuteHyperLink else // work standard control click routine inherited; end; procedure TDPLinkLabel.CMMouseEnter(var Message: TMessage); begin inherited; // mouse enters link - hover color effective FMouseHover := True; UpdateLinkFont; end; procedure TDPLinkLabel.CMMouseLeave(var Message: TMessage); begin inherited; // mouse leaves link - hover color not effective anymore FMouseHover := False; UpdateLinkFont; end; procedure TDPLinkLabel.ExecuteHyperLink(aLink: String = ''); var UseLink: string; begin // set link for execution if Trim(aLink) = '' then UseLink := Trim(HyperLink) else UseLink := Trim(aLink); // check link data if Trim(UseLink) = '' then // raise exception on empty link raise Exception.Create('No link for launching web browser.'); // load default browser with link ShellExecute(0, nil, PChar(HyperLink), nil, nil, SW_SHOW); // HyperLink was visited, no special link passed if Trim(aLink) '' then Visited := True; end; procedure TDPLinkLabel.FontChanged(Sender: TObject); begin // need to inform preceding class of possible changes in font UpdateLinkFont; end; procedure TDPLinkLabel.SetHoverLinkFont(Value: TFont); begin FHoverLinkFont.Assign(Value); UpdateLinkFont; end; procedure TDPLinkLabel.SetHyperLink(Value: string); begin if FHyperLink Value then begin FHyperLink := Value; Visited := False; if Caption = '' then Caption := HyperLink; end; end; procedure TDPLinkLabel.SetLinkFont(Value: TFont); begin FLinkFont.Assign(Value); UpdateLinkFont; end; procedure TDPLinkLabel.SetVisited(Value: Boolean); begin if FVisited Value then begin FVisited := Value; UpdateLinkFont; end; end; procedure TDPLinkLabel.SetVisitedLinkFont(Value: TFont); begin FVisitedLinkFont.Assign(Value); UpdateLinkFont; end; procedure TDPLinkLabel.UpdateLinkFont; begin // assign font property the appropriate font data if FMouseHover then Font := HoverLinkFont else if Visited then Font := VisitedLinkFont else Font := LinkFont; end; end. ========================= CODE END ========================= Regards, Daniel Wischnewski Delphi-PRAXiS