Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi richedit - caretpos (https://www.delphipraxis.net/49616-richedit-caretpos.html)

fritziiiii 13. Jul 2005 19:59


richedit - caretpos
 
hi leute,

hab wiedermal ein kleines problem
ich hab eine richedit-komponente, und wenn ich auf diese mit der maus klicke, will ich wissen, auf welches wort ich geklickt habe.
hab als lösungsansatz richedit.carepos.x bzw. y herangezogen, um die cursor-position zu bestimmen. leider ist diese vorgehensweise nur bedingt zu gebrauchen, da carepos auch dann ergebnisse liefert, wenn ich mit der maus auf "Nicht-Text-Bereiche" klicke.

wäre für ratschläge sehr dankbar!!!


Gruß Fritziiiii

Luckie 13. Jul 2005 20:14

Re: richedit - caretpos
 
Google kommt selbst mit kompliziertesten Suchanfragen zu recht: Bei Google suchendelphi wort unter cursor.

marabu 13. Jul 2005 20:30

Re: richedit - caretpos
 
Luckie, hast ja recht, aber ich will das jetzt nicht umsonst aus meinem Code herausoperiert haben:

Delphi-Quellcode:
procedure TMainForm.MemoClick(Sender: TObject);
var
  p: TPoint;
begin
  GetCursorPos(p);
  p := Memo.ScreenToClient(p);
  Memo.SelStart := LoWord(SendMessage(Memo.Handle, EM_CHARFROMPOS, 0, p.Y shl 16 + p.x));
end;
Grüße vom marabu

marabu 16. Jul 2005 08:32

Re: richedit - caretpos
 
Liste der Anhänge anzeigen (Anzahl: 1)
So ein Blödsinn - fritzi* will ja das Wort unter dem Cursor. Das geht recht einfach, da beim Ereignis OnMouseDown() das Caret schon versetzt ist:

Delphi-Quellcode:
function CurrentWord(ce: TCustomEdit): string;
const
  WordChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ'
   + 'abcdefghijklmnopqrstuvwxyzäöüß';
var
  i, iStart: integer;
  s: string;
begin
  s := ce.Text;
  iStart := ce.SelStart;
  while (iStart > 0) and (Pos(s[iStart], WordChars) > 0) do
    Dec(iStart);
  i := ce.SelStart;
  while (Succ(i) < Length(s)) and (Pos(s[Succ(i)], WordChars) > 0) do
    Inc(i);
  Result := Copy(s, Succ(iStart), i - iStart);
end;
marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz