unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, RichEdit;
type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
StatusBar1: TStatusBar;
procedure RichEdit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.RichEdit1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
chr, line, chpos, k, j: Integer;
Pt: TPoint;
s, WordUnderCur: string;
inter: set of char;
begin
inter := [' ', ',', '.', '?', '!'];
with TRichEdit(Sender) do
begin
Pt := Point(X, Y);
chr := Perform(EM_CHARFROMPOS, 0, Integer(@Pt));
if chr < 0 then Exit;
line := Perform(EM_EXLINEFROMCHAR, 0, chr);
chpos := chr - Perform(EM_LINEINDEX, line, 0);
if Lines.Count - 1 < line then Exit;
s := Lines[line];
k := chpos;
while (k > 0) and (not (s[k] in inter)) do k := k - 1;
k := k + 1;
j := k;
while (j <= Length(s)) and (not (s[j] in inter)) do Inc(j);
WordUnderCur := Copy(s, k, j-k);
end;
StatusBar1.SimpleText := WordunderCur;
end;
end. |
|