współrzędne tekstu na ekranie

Odpowiedz Nowy wątek
2004-04-22 14:13
kalifat
0

Przejrzałem zasoby, ale nic co by mi pasiło nie znalazłem.

Czy może ktoś wie jak powiązać pozycję kursora myszy nad polem edycyjnym typu RichEdit z jego zawartością. Chodzi mi o to, że w RichEdicie mam jakiś tekst a wraz nim posiadam pewne odnośniki.

Tekst w RichEditcie to ja znajduję bez problemu (linia, znak itp.), mogę go sobie spokojowo zaznaczyć, ale NIE WIEM gdzie jest on na ekranie (jakie ma współrzędne). Zatem nie potrafię odpalić procedury swojej procedury gdy mysz jest nad żądanym tekstem. Chcę aby po najechaniu na jakiś odnośnik myszką pojawiło się jego rozwinięcie w dymku.

Zresztą powinno to być "odporne" na zmianę położenia żadanego tekstu (ot chyćby przewijanie, dopisanie czy usunięcie treści).

Pozdrawiam
i mam nadzieję, że mi postu admin nie wywali

Pozostało 580 znaków

2004-04-22 15:07
kalifat
0

Panowie banalnie proste!!!!!!!

mniej więcej cóś takiego

function PobierzWyrazPodMysza(RE: TRichEdit; pt: TPoint): String;
var i, charindex, lineindex, charoffset: Integer;
sWord: String;

function ZnajdzCalywyraz(Line: String; var Index: Integer): String;
var
i, iBeg, iEnd: Integer;
temp: String;
begin
iBeg := 0;
iEnd := Length(Line);
if Index=0 then Inc(Index);
//znajdź koniec wyrazu
for i:= index to Length(Line) do begin
if Line[i] = ' ' then begin
iEnd := i;
Break;
end;
end;
// znajdź początek wyrazu
for i := index downto 1 do begin
if Line[i] = ' ' then begin
iBeg := i+1;
Break;
end;
end;
Result := Copy(Line, iBeg, iEnd-iBeg);
end;

begin
charindex := RichEd.Perform(Messages.EM_CHARFROMPOS, 0, integer(@pt));

if charindex >= 0 then begin
lineindex := RichEd.Perform(EM_EXEXLINEFROMCHAR, 0, charindex);
charoffset := charindex - RichEd.Perform( EM_LINEINDEX, lineindex, 0 );
sWord := RichEd.Lines[lineindex];

if Length(Trim(sWord)) > 0 then begin
sWord := GetWordFromCharIndex(sWord, charoffset);
end;
end;
Result := sWord;
end;

procedure TForm1.RichEdit1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var pt: TPoint;
begin
pt:= Point(X, Y);
Label1.Caption := GetTheWordUnderTheMouse(Sender as TRichEdit, pt);
end;

zresztą znalezione na
http://www.delphipages.com/threads/thread.cfm?ID=38219&G=38062

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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