마음의 안정을 찾기 위하여 - 간단한 방법으로 Label에 하이퍼링크 기능 추가하기
2277417
125
743
관리자새글쓰기
태그위치로그방명록
별일없다의 생각
dawnsea's me2day/2010
색상(RGB)코드 추출기(Color...
Connection Generator/2010
최승호PD, '4대강 거짓말 검...
Green Monkey**/2010
Syng의 생각
syng's me2DAY/2010
천재 작곡가 윤일상이 기획,...
엘븐킹's Digital Factory/2010
간단한 방법으로 Label에 하이퍼링크 기능 추가하기
Delphi/Etc Tip | 2011/01/05 11:31
Delphi 2009에서부터는 TLinkLabel이라는게 존재해서 Text 안의 HyperLink를 표현하는게 손쉬운데, 이전 버전에서는 아무래도 불편한게 좀 많다.

"SysLink"를 서브클래싱해서 사용 가능한 방법이 있어 소개하기는 하지만, 아무래도 Delphi2009 이상에서의 TLinkLabel에 비해 부족한건 사실.... -_-;;;; 좀더 좋은 방법이 없으려나..? 고민을 해봐야겠다.

사용법 #1]
function CreateSysLink(hDlg: HWND; hInst: THandle; rect: TRECT): HWND;
begin
    Result := CreateWindowEx(WS_EX_TRANSPARENT, WC_LINK,
        'For more information, <A HREF="http://www.microsoft.com">click here</A> ' +
        'or <A ID="idInfo">here</A>.',
        WS_VISIBLE or WS_CHILD or WS_TABSTOP,
        rect.left, rect.top, rect.right, rect.bottom,
        hDlg, 0, hInst, nil);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  w : HWND;
begin
  w := CreateSysLink(Handle, HInstance, Rect(10, 50, 200, 40));
end;


사용법 #2]
unit SysLink;

interface

uses
  Windows, SysUtils, Classes, Controls, StdCtrls, CommCtrl, Messages;

type
  TOnClickLink = procedure(Sender: TObject; AID, AURL: string) of object;

  TSysLink = class(TStaticText)
  private
    FOnClickLink: TOnClickLink;
    procedure SetOnClickLink(const Value: TOnClickLink);
  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure WndProc(var Msg: TMessage); override;
  public
  published
    property OnClickLink: TOnClickLink read FOnClickLink write SetOnClickLink;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Win32', [TSysLink]);
end;

{ TCustomSysLink }

procedure TSysLink.CreateParams(var Params: TCreateParams);
begin
  inherited;
  CreateSubClass(Params, WC_LINK);
end;

procedure TSysLink.SetOnClickLink(const Value: TOnClickLink);
begin
  FOnClickLink := Value;
end;

procedure TSysLink.WndProc(var Msg: TMessage);
var
  plink: PNMLink;
begin
  case Msg.Msg of
    CN_NOTIFY:
      case TWMNotify(Msg).NMHdr.code of
        NM_CLICK, NM_RETURN:
          begin
            plink := PNMLINK(TMessage(Msg).LParam);
            if Assigned(FOnClickLink) then
            begin
              FOnClickLink(Self,
                           WideCharToString(plink.item.szID),
                           WideCharToString(plink.item.szUrl));
            end;
          end;
      end;
  else
    inherited;
  end;
end;

end.

// 사용 Demo:<a id="test" href="http://kingron.com" color="red">Test</a> Help Test
procedure TForm1.syslnk1ClickLink(Sender: TObject; AID, AURL: string);
begin
  ShowMessage(AID);
  ShowMessage(AURL);
end;

2011/01/05 11:31 2011/01/05 11:31
Article tag list Go to top
View Comment 0
Trackback URL :: 이 글에는 트랙백을 보낼 수 없습니다
 
 
 
 
: [1] ... [138][139][140][141][142][143][144][145][146] ... [1317] :
«   2024/04   »
  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        
전체 (1317)
출판 준비 (0)
My-Pro... (41)
사는 ... (933)
블로그... (22)
My Lib... (32)
게임 ... (23)
개발관... (3)
Smart ... (1)
Delphi (93)
C Builder (0)
Object... (0)
VC, MF... (10)
Window... (1)
Open API (3)
Visual... (0)
Java, JSP (2)
ASP.NET (0)
PHP (5)
Database (12)
리눅스 (29)
Windows (25)
Device... (1)
Embedded (1)
게임 ... (0)
Web Se... (2)
Web, S... (21)
잡다한... (6)
프로젝트 (0)
Personal (0)
대통령... (13)
Link (2)