1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| unit LabelURL;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ShellAPI;
type
TLabelURL = class(TLabel)
private
{ Déclarations privées }
FURL : string;
FActiveFont, TempFont : TFont;
procedure Click; override; //Surcharge de la méthode qui gère le clic sur le composant
procedure SetActiveFont(SelFont : TFont);
protected
{ Déclarations protégées }
procedure WndProc(var Message : TMessage); override; //procedure gérant les messages destinés au composant
public
{ Déclarations publiques }
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
published
{ Déclarations publiées }
property URL : string read FURL write FURL;
property ActiveFont : TFont read FActiveFont write SetActiveFont;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Standard', [TLabelURL]);
end;
constructor TLabelURL.Create(AOwner : TComponent);
begin
inherited;
FActiveFont := TFont.Create;
FActiveFont.Color := clBlue;
FActiveFont.Style := [fsUnderline];
TempFont := TFont.Create;
TempFont.Assign(Font);
Cursor := crHandPoint;
end;
destructor TLabelURL.Destroy;
begin
FActiveFont.Free;
TempFont.Free;
inherited;
end;
procedure TLabelURL.SetActiveFont(SelFont : TFont);
begin
FActiveFont.Assign(SelFont);
end;
procedure TLabelURL.WndProc(var Message : TMessage);
begin
case Message.Msg of
CM_MOUSEENTER : begin // La souris 'entre' sur le composant
TempFont.Assign(Font);
Font.Assign(FActiveFont);
end;
CM_MOUSELEAVE : // La souris 'sort' du composant
Font.Assign(TempFont);
end;
inherited;
end;
procedure TLabelURL.Click;
begin
inherited;
if (Parent <> nil) then
ShellExecute(Parent.Handle, 'Open', PChar(URL), '', '', SW_SHOWNORMAL);
end;
end. |
Partager