Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como saber la posicion Fila, Columna en un MEMO? (https://www.clubdelphi.com/foros/showthread.php?t=27221)

bustio 15-11-2005 16:57:59

Como saber la posicion Fila, Columna en un MEMO?
 
Hola a todos:

Necesito saber en que posicion FILA, COLUMNA se encuentra el cursos de edicion dentro de un MEMO.. algo mas o menos asi como lo que tienen todos los editores de codigo que te dicen en que lugar exactamente esta para do el cursor,,, y que cuando lo mueva con las teclas del cursor del teclado pues que se actualice esta informacion. Probe con el truco que se encuentra en TrucoMania y no funciona.. no se por que sera.

Código Delphi [-]
procedure TFrmChild.SynEditorKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  Row : Integer;
  Col : Integer;
  LineLength : Integer;

begin
 Row := SendMessage(SynEditor.Handle,EM_LINEFROMCHAR,SynEditor.SelStart,0);
 Col := SendMessage(SynEditor.Handle,EM_LINEINDEX,Row,0);
 LineLength := SendMessage(SynEditor.handle, EM_LINELENGTH, Col, 0);
 Col := SynEditor.SelStart - Col;

 StatusBar1.Panels[1].Text :=  IntToStr(Row) + ': ' + IntToStr(Col);
end;

NOTA: Utilizo un SynEditor para mostrar los textos, que a la larga es lo mismo que un TMEMO.

alvaro2007 26-01-2013 16:49:43

Funciona
 
Efectivamente Es el mismo proceso en un TMemo.

dec 26-01-2013 18:36:42

Hola,

Si usas un "SynEdit", como dices, prueba con algo así:

Código Delphi [-]
  StatusBar.Panels[ 0 ].Text := Format
  (
    'Line %d - Column %d',
    [ SynEdit.CaretY, SynEdit.CaretX ]
  );

dec 26-01-2013 18:37:30

:rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

nlsgarcia 28-01-2013 16:57:31

bustio,

Cita:

Empezado por bustio
Necesito saber en que posicion FILA, COLUMNA se encuentra el cursos de edicion dentro de un MEMO...

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ShellAPI;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    StatusBar1: TStatusBar;
    procedure MemoCursorPosition;
    procedure MemoChange(Sender: TObject);
    procedure MemoClick(Sender: TObject);
    procedure MemoEnter(Sender: TObject);
    procedure MemoKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure MemoKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MemoCursorPosition;
begin
   StatusBar1.Panels[0].Text := IntToStr(Memo1.CaretPos.Y+1);
   StatusBar1.Panels[1].Text := IntToStr(Memo1.CaretPos.X+1);
end;

procedure TForm1.MemoChange(Sender: TObject);
begin
   MemoCursorPosition;
end;

procedure TForm1.MemoClick(Sender: TObject);
begin
   MemoCursorPosition;
end;

procedure TForm1.MemoEnter(Sender: TObject);
begin
   MemoCursorPosition;
end;

procedure TForm1.MemoKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   MemoCursorPosition;
end;

procedure TForm1.MemoKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   MemoCursorPosition;
end;

end.
El código anterior permite Determinar la Posición del Cursor (Fila y Columna) en un Control TMemo por medio del Método CaretPos, el cual es implementado en los eventos OnChange, OnClick, OnEnter, OnKeyDown y OnKeyPress del citado control para capturar el movimiento del cursor de forma análoga al editor de Delphi.

Quizás este código sea aplicable al control SynEdit por medio de SynEdit.CaretY (Fila) y SynEdit.CaretX (Columna).

El ejemplo esta disponible en el link: http://terawiki.clubdelphi.com/Delph...orPosition.rar

Espero sea útil :)

Nelson.

nlsgarcia 28-01-2013 17:56:48

bustio.

Cita:

Empezado por nlsgarcia
...OnChange, OnClick, OnEnter, OnKeyDown y OnKeyPress...

Corrección del Msg #5:

No es el evento OnKeyPress, es el evento OnKeyUp del control TMemo tal como se indica en el código del citado mensaje.

Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 04:37:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi