PDA

Ver la Versión Completa : Como saber la posicion Fila, Columna en un MEMO?


bustio
15-11-2005, 16:57:59
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.


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
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í:


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,


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

Revisa este código:

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/Delphi/Ejemplos/Controles/?download=MemoCursorPosition.rar

Espero sea útil :)

Nelson.

nlsgarcia
28-01-2013, 17:56:48
bustio.


...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.