Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Buchstabe/Position unter Maus auslesen

  Alt 13. Jan 2020, 13:20
Ich hatte das Thema eigener Controls und der Caret-Position auch schon einmal.
Du kannst mal hier schauen: https://www.delphipraxis.net/185623-...-controls.html
Dort sind auch 2 Videos verlinkt.

Ich zeichne "Controls" einfach in ein Bitmap und verwalte die gezeichneten Positionen.

Zunächst ermittle ich das Offset des betreffenden Controls und suche dann die passende X-Position, indem ich den Originaltext immer weiter verkürze und den Länge ermittle. Die Position mit der geringsten Abweichung zur Klickposition nehme ich dann.

Der Cursor selbst wird einfach als Strich in das Bild gezeichnet. Der blinkende Cursor wird durch zyklisches Neuzeichnen mit und ohne Cursorstrich erreicht.


Ich glaube nicht, dass Di der Code hilft, aber für alle Fälle füge ich ihn mal ein:


Delphi-Quellcode:
  if (fCaretCalcPos) then
  begin
    if (fCaretXPosNear > 0) then
    begin
      DX := fCaretXPosNear - ClientRect.Left;
      fCaretXPosNear := 0;
    end
    else
      DX := _MX;
    L := 0;
    R := Length(lText);
    CaretXPos := 0;
    XD := MaxInt;
    repeat
      XC := L + ((R - L) div 2);
      XP := X + aBitmap.Canvas.TextExtent(Copy(lText, 1, XC)).Width - 1;
      XD_ := Abs(DX - XP);
      if (XD_ < XD) then
      begin
        CaretXPos := XC;
        XD := XD_;
      end;
      if (DX <= XP) then
      begin
        if (R > XC) then
          R := XC
        else
          R := Pred(XC);
      end
      else
      begin
        if (L < XC) then
          L := XC
        else
          L := Succ(XC);
      end;
    until (L > R);
    fCaretCalcPos := False;
  end;
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat