unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Label1: TLabel;
    procedure Label1Click(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
    procedure Memo1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Memo1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Memo1Change(Sender: TObject);
var
  I: Integer;
  H: Integer;
  S: string;
begin
  H := Canvas.TextHeight('|');
  for I := 0 to TMemo(Sender).Lines.Count - 1 do begin
    S := TMemo(Sender).Lines[I];
    Label1.Tag := Pos(Label1.Caption, S);
    if Label1.Tag > 0 then begin
      Label1.Tag := Pos(Label1.Caption, S);
      Label1.Top := H * I + 1;
      Label1.Left := Canvas.TextWidth(Copy(S, 1, Label1.Tag - 1)) + 1;
      Break;
    end;
  end;
  Label1.Visible := False;
  Label1.Visible := Label1.Tag > 0;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  Label1.Font.Color := clBlue;
  Label1.Font.Style := [fsUnderline];
  Label1.Cursor := crHandPoint;
  Label1.Parent := Memo1;
  Label1.Transparent := True;
  Label1.Caption := 'www.csdn.com';
  Memo1.Text := 'go www.csdn.com click';
end;procedure TForm1.Label1Click(Sender: TObject);
begin
  ShowMessage('你自己试试看');
end;procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Label1.Visible := False;
  Label1.Visible := Label1.Tag > 0;
end;procedure TForm1.Memo1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Label1.Visible := False;
  Label1.Visible := Label1.Tag > 0;
end;end.

解决方案 »

  1.   

    在FormCreate中作如下修改才算完美,呵呵:procedure TForm1.FormCreate(Sender: TObject);
    begin
      form1.Font.Size:=memo1.Font.Size;  //令字体大小保持同步
      form1.Font.Name:=memo1.Font.Name;  //令字体名称保持同步
      Label1.Font.Color := clBlue;
      Label1.Font.Style := [fsUnderline];
      Label1.Cursor := crHandPoint;
      Label1.Parent := Memo1;
      Label1.Transparent := True;
      Label1.Caption := 'http://www.csdn.net';
      Memo1.Text := 'go http://www.csdn.net click';
    end;
      

  2.   

    不知道有没有理解错误,在memo或richedit中获得光标在控件中的位置(行列之后),用clienttoscreen应该就可以得到像素坐标值了吧
      

  3.   

    procedure TForm1.RichEdit2MouseDown(Sender: TObject; Button: TMouseButton;        //获取RICHEDIT的当前坐标位置    
      Shift: TShiftState; X, Y: Integer);
    begin
    Lpos:=SendMessage(richedit2.Handle, em_linefromchar,richedit2.SelStart,0);//行
    Cpos:=SendMessage(richedit2.Handle,EM_LINEINDEX,Lpos,0);                  
    LineLength:=SendMessage(richedit2.handle,EM_LINELENGTH,Cpos,0);
    Cpos:=richedit2.SelStart-CPos;                                          //列
    count:=lpos*16+cpos;
    lpos:=lpos;
    edit4.Enabled:=true;
    edit4.Font.Color:=clred;
    edit5.Enabled:=true;
    edit5.Font.Color:=clteal;
    edit4.Text:=inttohex(lpos,2);
    edit5.Text:=inttohex(cpos,2);
    end;
      

  4.   

    to lifenqidelphi(血)
      Memo1.CaretPos for Delphi6