Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > RichEdit гиперссылки


Автор: Proxin 3.11.2009, 12:11
Проблема в следущем: пишу свой компонент (точнее, свожу его из имеющихся, плюс, по мелочи, своё - за основу взят старенький re_lne, вполне себе рабочий).
Не получается добавить автоматическое определение ссылок.
Пишу следующий код в разделе CreateWnd:
Код

procedure TRichEdit20A.CreateWnd;
begin
inherited;
SendMessage (handle, EM_SETEVENTMASK, 0,sendmessage(handle, EM_GETEVENTMASK, 0,0) or ENM_LINK);
if FLinkIsAutodetect then
SendMessage(Handle, EM_AUTOURLDETECT, Integer(True), 0); //проблема тут. не получается добавить автоопределение, хотя сообщение, вроде, это.
end;

В чём может быть ошибка?
UPD. FLinkIsAutodetected объявлено в секции private, устанавливается published-свойством AutodetectLinks: Boolean read FLinkIsAutodetect write FLinkIsAutodetect в runtime, когда на форму компонент кидаешь.

Автор: Proxin 3.11.2009, 14:00
Проблема, кажется в свойстве FLinkIsAutodetect. Как вызавать событие добавления/удаления поддержки автодетекта при смене этого свойства?

Автор: Rrader 4.11.2009, 08:08
Рабочий пример:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, CommCtrl, RichEdit;

type
  TRichEdit = class(ComCtrls.TRichEdit)
  private
    FLinkIsAutodetect: Boolean;
    procedure SetLinkIsAutodetect(Value: Boolean);
  protected
    procedure CreateWnd; override;
  public
    constructor Create(Aowner: TComponent); override;  
  published
    property LinkIsAutodetect: Boolean read FLinkIsAutodetect write
      SetLinkIsAutodetect default False;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    RichEdit1: TRichEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TRichEdit }

constructor TRichEdit.Create(Aowner: TComponent);
begin
  inherited Create(AOwner);
  FLinkIsAutodetect := False;
end;

procedure TRichEdit.CreateWnd;
begin
  inherited;
  SendMessage(Handle, EM_SETEVENTMASK, 0,
    SendMessage(Handle, EM_GETEVENTMASK, 0, 0) or ENM_LINK);
end;

procedure TRichEdit.SetLinkIsAutodetect(Value: Boolean);
begin
  if FLinkIsAutodetect <> Value then
    if SendMessage(Handle, EM_AUTOURLDETECT, WPARAM(Value), 0) = 0 then
      FLinkIsAutodetect := Value;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  RichEdit1.LinkIsAutodetect := True;
end;

end.

Автор: Proxin 4.11.2009, 14:41
Спасибо.
Только проблема - при выставлении AutodetectLinks в true и вводе текста в мой richedit в среде проектирования, после запуска url не выделяется. Пытался в CreateWnd делать repaint - не помогло. Как сделать, чтобы при запуске приложения в тексте, который лежит в моём ричедите уже были выделены ссылки?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)