Salut,
Voici un petit exemple qui permet de définir et/ou récuperer la position du curseur dans un TEdit, TMemo ... etc
{Function qui récupère la position du Curseur} Function GetCaretPos(aHandle : THandle): TPoint; Begin Result.X := LongRec(SendMessage(aHandle, EM_GETSEL, 0, 0)).Hi; Result.Y := SendMessage(aHandle, EM_LINEFROMCHAR, Result.X, 0); Result.X := Result.X - SendMessage(aHandle, EM_LINEINDEX, -1, 0); End;
{Procedure qui définit la position du Curseur} Procedure SetCaretPos(aHandle : THandle; Value: TPoint); var CharIdx: Integer; begin SetFocus(aHandle); CharIdx := SendMessage(aHandle, EM_LINEINDEX, Value.y, 0) + Value.x; SendMessage(aHandle, EM_SETSEL, CharIdx, CharIdx); end;
{ Utilisation } procedure TForm1.btn_GetCaretPosClick(Sender: TObject); Var Point : TPoint; begin Point := GetCaretPos(Edit1.Handle); Label1.Caption := Format('X : %d, Y : %d', [Point.X, Point.Y]); end;
procedure TForm1.btn_SetCaretPosClick(Sender: TObject); var Value : TPoint; begin Value.x := 2; Value.y := 0; // dans un Edit il n'y a qu'une ligne ... donc Y = 0 SetCaretPos(Edit1.Handle, Value); end;
@+ Cirec
|