Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Cursor hinkt nach (https://www.delphipraxis.net/171352-cursor-hinkt-nach.html)

josefkoller 1. Nov 2012 20:12

Cursor hinkt nach
 
Hallo,

ich verschiebe bei einem Edit den Text etwas nach links.

Delphi-Quellcode:
inflateRect(r, -2, 0);
Problem dabei: Der Textcursor hinkt um diese zwei Punkte nach. Er sitzt immer noch auf der "alten regulären" Position.

Weiß jemand, wie ich auch den Cursor um diese 2 Punkte verschieben kann?

Danke.

Josef

stahli 1. Nov 2012 20:16

AW: Cursor hinkt nach
 
Schau mal nach SetCursorPos.

josefkoller 1. Nov 2012 20:32

AW: Cursor hinkt nach
 
Hi,

Zitat:

Zitat von stahli (Beitrag 1189427)
Schau mal nach SetCursorPos.

Nein, da wird nur der Cursur eben dahingesetzt, wo man ihn haben will, also ans erste zweite usw.-Zeichen.

Dann hinkt halt der Cursor an dieser Stelle um besagte 2 Punkte nach.

Vielleicht sonst noch eine Idee?

Danke.

Josef

lbccaleb 1. Nov 2012 20:41

AW: Cursor hinkt nach
 
Gleich nen Befehl zum "Neuzeichnen" hinterher schicken?

josefkoller 1. Nov 2012 21:06

AW: Cursor hinkt nach
 
Zitat:

Zitat von lbccaleb (Beitrag 1189430)
Gleich nen Befehl zum "Neuzeichnen" hinterher schicken?

Ich erzeuge einen ControlCanvas und dies PaintWindow Procedure schreibt das Ganze dann auf den EditCanvas.

Delphi-Quellcode:
procedure TKEdit.PaintWindow(DC: HDC);
begin
  FCanvas.Lock;
  try
   FCanvas.Handle := DC;
   try
     TControlCanvas(FCanvas).UpdateTextFlags;
     Paint;
     updateWindowRgn;
  finally
     FCanvas.Handle := 0;
   end;
  finally
   FCanvas.Unlock;
  end;
end;
In einer Paint Prozedure wird ein Rahmen gemalen und eben der Text des Editfeldes um 2 Punkte nach rechts gesetzt.

Delphi-Quellcode:

procedure TKEdit.Paint;
begin
....
inflateRect(r, -2, 0);
DrawText{Ex}(Canvas.Handle, PChar(Text),-1, R, DT_LEFT or DT_NOPREFIX or
  DT_WORDBREAK or DT_NOCLIP or DrawTextBiDiModeFlagsReadingOnly{, @params});
.....

end;
Es paßt sonst alles. Nur eben der Textcursor hinkt um besagte Stellen nach.

Ich wüßte jetzt auch nicht, wo ich da noch einen Befehl zum "Neuzeichnen", also RecreateWnd oder so nachschicken soll.

Josef

ConnorMcLeod 1. Nov 2012 21:24

AW: Cursor hinkt nach
 
Hat vllt etwas mit EM_SETMARGINS zu tun?

josefkoller 1. Nov 2012 21:34

AW: Cursor hinkt nach
 
Hallo,

Zitat:

Zitat von ConnorMcLeod (Beitrag 1189435)
Hat vllt etwas mit EM_SETMARGINS zu tun?

Das hab ich auch schon probiert. Deswegen beim Aufruf von DrawText die geschweiften Klammern um {ex} und um {@params}

Die Params selber hab ich so probiert:

Delphi-Quellcode:
var
  Params: TDrawTextParams;
  ...
begin
  with Params do
  begin
    Cbsize       := SizeOf(DrawTextParams);
    iTabLength   := 0;
    iLeftMargin := 2; <----
    iRightMargin := 0;
    uiLengthDrawn := Length(text);
  end;
end;
Das funktioniert auch, also der Text im Edit Feld wird nach links gerückt. Aber halt mein Cursor, der hinkt nach, das Schwein.:lol:

Josef

ConnorMcLeod 3. Nov 2012 08:20

AW: Cursor hinkt nach
 
Zitat:

Zitat von josefkoller (Beitrag 1189425)
Delphi-Quellcode:
inflateRect(r, -2, 0);

Habe es sicherheitshalber nochmal selbst probiert und es funktioniert einwandfrei:
Delphi-Quellcode:
  SendMessage(Edit1.Handle, EM_SETMARGINS, EC_LEFTMARGIN or EC_RIGHTMARGIN, MakeLong(16, 16));
- ohne InflateRect etc.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:21 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