Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TRichEdit: Abfragen Attribute ohne SelAttributes (https://www.delphipraxis.net/215698-trichedit-abfragen-attribute-ohne-selattributes.html)

Kaiserone 22. Aug 2024 19:58

TRichEdit: Abfragen Attribute ohne SelAttributes
 
Grundsatz
Mein TRichEdit enthält unter anderem Links, diese sind farblich hervorgehoben (cl_Link). Durch einen Klick mit Strg (Ctrl) wird der Link ausgeführt.

Ziel
Nun möchte ich, dass sich der Cursor in crHandPoint verwandelt, sobald die Maus auf einem solchen Link steht. Dazu verwende ich OnMouseMove.

Jetzige Prozedur
Code:
procedure RtfShowLink (x, y : integer; Rtf : TRichEdit);
var
  CharIndex,
  ss        : integer;
  Pt        : TPoint;
begin
    with Rtf do begin
      Pt := Point(X, Y);
      CharIndex := Perform(Messages.EM_CHARFROMPOS, 0, @Pt);

      if CharIndex >= 0 then begin
        ss := SelStart;
        SelStart := CharIndex;
        if SelAttributes.Color = cl_Link then Cursor := crHandpoint
                                         else Cursor := crArrow;
        SelStart := ss;
      end;
    end;
end;
Problem
Das ganze Feld flackert unerträglich bei jeder Mausbewegung.

Frage
Daher die Frage, ob ich die Attribute von Textstellen auch ohne SelStart, SelAttributes abfragen kann. So in etwa wie RichEdit.TextAttributes[index].

Uwe Raabe 22. Aug 2024 21:50

AW: TRichEdit: Abfragen Attribute ohne SelAttributes
 
Kannst du ein simples Beispielprojekt bereitstellen?

Kaiserone 22. Aug 2024 23:13

AW: TRichEdit: Abfragen Attribute ohne SelAttributes
 
Lösung gefunden:
Ich kopiere das TRichEdit, suche im unsichtbaren Hilfs-RichEdit nach dem Link-Code und platziere dann den Cursor im Original-RichEdit.

Code:
Code:
procedure RtfShowLink (x, y : integer; Rtf, Hilf : TRichEdit);
var
  CharIndex : integer;
  Pt        : TPoint;
begin
    RtfAssign(Rtf, Hilf);

    Pt := Point(X, Y);
    CharIndex := Rtf.Perform(Messages.EM_CHARFROMPOS, 0, @Pt);

    if CharIndex >= 0 then begin
      Hilf.SelStart := CharIndex;
      if Hilf.SelAttributes.Color = cl_Link then Rtf.Cursor := crHandpoint
                                            else Rtf.Cursor := crArrow;
    end;
end;

Redeemer 23. Aug 2024 09:53

AW: TRichEdit: Abfragen Attribute ohne SelAttributes
 
Da gab es doch mal ein uraltes TLinkRichEdit oder wie das hieß...

Uwe Raabe 23. Aug 2024 10:24

AW: TRichEdit: Abfragen Attribute ohne SelAttributes
 
TRichEdit unterstützt ja ab Version 2.0 eh schon Links: https://docwiki.embarcadero.com/Libr...ttributes.Link


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:58 Uhr.

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