RichEdit - Caret position w pikselach

0

Jak to obliczyć?

0

Spłodziłem coś takiego:

[code]
function GetCaretPixPos(RE:TRichEdit):TPoint;
var
pix_pos,index_pos,index_pos_cur:TPoint;
x,y,char_index:Integer;
stop:Boolean;
begin
Result.x:=-1;
Result.y:=-1;
with RE do
begin
index_pos_cur:=CaretPos;
stop:=False;
for x:=0 to Width do
begin
if stop then
Break;
for y:=0 to Height do
begin
pix_pos.x:=x;
pix_pos.y:=y;
char_index:=Perform(Messages.EM_CHARFROMPOS,0,Integer(@pix_pos));
if char_index>=0 then
begin
index_pos.y:=RE.Perform(EM_EXLINEFROMCHAR,0,char_index);
index_pos.x:=char_index-RE.Perform(EM_LINEINDEX,index_pos.y,0);
end;
if (index_pos.x=index_pos_cur.x)and(index_pos.y=index_pos_cur.y) then
begin
Result.x:=x;
Result.y:=y;
stop:=True;
Break;
end;
end;
end;
end;
end;
[/code]

0

To wyżej proszę potraktować jako ciekawostkę przyrodniczą. Powinno być chyba tak:

function GetCaretPixPos(RE:TRichEdit):TPoint;
var
   char_index:Integer;
begin
   with RE do
   begin
      char_index:=Perform(EM_LINEINDEX,CaretPos.y,0)+CaretPos.x;
      SendMessage(RE.Handle,EM_POSFROMCHAR,Integer(@Result),char_index);
   end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1