PDA

Ver la Versión Completa : Necesito un memo que muestre link de paginas web


Durbed
29-10-2005, 02:52:39
Necesito un control similar al memo que cuando escribas dentro de un texto una pagina web, lo marque como un enlace y al picarlo se cargue la pagina web, al estilo del messenger o programas similares.

Un saludo y gracias.

vtdeleon
29-10-2005, 04:05:09
Saludos

No tengo base, porque no lo tengo instalado, pero creo que el Xeditor (www.xeditor.tk) (hecho por dec) usa un componente de la libreria SynEdit (http://synedit.sourceforge.net) el cual cumple con lo que necesitas.

dec
29-10-2005, 08:21:26
Hola,



(...) usa un componente de la libreria SynEdit (http://synedit.sourceforge.net/) el cual cumple con lo que necesitas.

Ya lo creo que cumple... acaso hasta demasiado. ;)

A ver qué les parece este componente muy basado en los que se citan y en "TRichEdit":


{ *********************************************************************** }
{ }
{ TDecRichEdit - TRichEdit con soporte para Urls }
{ }
{ Copyright (c) 2005 dec - dec@ClubDelphi.com }
{ bajo la licencia GNU GPL >> ver en www.gnu.org }
{ }
{ Créditos: }
{ }
{ TJvRichEdit - (Jedi Library) http://www.delphi-jedi.org/ }
{ TRichEditWithHyperlinks (AuRoom Group - http://auroom.obninsk.ru/) }
{ }
{ *********************************************************************** }

unit UDecRichEdit;

interface

uses
Windows, ComCtrls, RichEdit,
Classes, Controls, Messages,
SysUtils, ShellApi;

type
TDecRichEditClicUrl = procedure(Sender: TObject; const url: string) of object;

type
TDecRichEdit = class(TRichEdit)
private
FAutoAbrirUrls: boolean;
FOnClicUrl: TDecRichEditClicUrl;
procedure CNNotify(var Msg: TWMNotify); message CN_NOTIFY;
protected
procedure CreateWnd; override;
procedure AbrirUrl(const url: string);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property OnClicUrl: TDecRichEditClicUrl read FOnClicUrl write FOnClicUrl;
property AutoAbrirUrls: boolean read FAutoAbrirUrls write FAutoAbrirUrls default true;
end;

procedure Register;

implementation

{ TDecRichEdit }

constructor TDecRichEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FAutoAbrirUrls := true;
end;

destructor TDecRichEdit.Destroy;
begin
inherited Destroy;
end;

procedure TDecRichEdit.AbrirUrl(const url: string);
begin
if url <> EmptyStr then
ShellExecute(Handle, 'open',
PChar(url), nil, nil, SW_NORMAL);
end;

procedure TDecRichEdit.CreateWnd;
begin
inherited CreateWnd;
SendMessage(Handle, EM_AUTOURLDETECT, 1, 0);
SendMessage (Handle, EM_SETEVENTMASK, 0, ENM_LINK);
end;

procedure TDecRichEdit.CNNotify(var Msg: TWMNotify);
type
PENLink = ^TENLink;
var
RT: TextRange;
begin
case Msg.NMHdr^.code of
EN_LINK:
begin
if (PENLink(Msg.NMHdr).Msg=WM_LBUTTONDOWN) then
begin
RT.chrg := PENLink(Msg.NMHdr).chrg;
GetMem(RT.lpstrText, RT.chrg.cpMax - RT.chrg.cpMin + 2);
try
SendMessage(Handle, EM_GETTEXTRANGE, 0, Integer(@RT));
if Assigned(FOnClicUrl) then
FOnClicUrl(Self, RT.lpstrText);
if FAutoAbrirUrls then AbrirUrl(RT.lpstrText);
finally
FreeMem(RT.lpstrText);
end;
end;
Msg.Result := 0;
end;
else {case}
inherited;
end;
end;

procedure Register;
begin
RegisterComponents('Samples', [TDecRichEdit]);
end;

end.

Durbed
29-10-2005, 09:45:09
Muchas gracias eso era justo lo que necesitaba.

Ya que veo que estais tan puestos, a ver si sabeis de un componente que me de un masaje en la espalda http://clubdelphi.com/foros/images/smilies/biggrin.gif (http://clubdelphi.com/foros/images/smilies/biggrin.gif)http://clubdelphi.com/foros/images/smilies/biggrin.gif

vtdeleon
29-10-2005, 09:50:02
Ya que veo que estais tan puestos, a ver si sabeis de un componente que me de un masaje en la espaldaPues ve a ver si lo encuentras en la JVCL:p:p, vaya que si tienen componentens:D:D