如何设定richedit的每行显示指定数量的字数? (10分)

  • 主题发起人 主题发起人 任远
  • 开始时间 开始时间

任远

Unregistered / Unconfirmed
GUEST, unregistred user!
1、请问如何能任意设定richedit每行显示的字数?
2、如何直接将光标定位到richedit的某行?
 
unit Unit1;

interface

uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
StdCtrls, ExtCtrls, Forms;

type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure Memo1KeyPress(Sender: TObject; var Key: Char);
public
MaxCharsPerLine, MaxLines: Integer;
function MemoLine: Integer;
function LineLen(r: Integer): Integer;
function NRows: Integer;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

function TForm1.NRows: Integer;
begin
with Memo1 do
Result := 1 + SendMessage(Handle, EM_LINEFROMCHAR, GetTextLen-1, 0);
end;

function TForm1.LineLen(r: Integer): Integer;
var r1, r2: Integer;
begin
with Memo1 do begin
r1 := SendMessage(Handle, EM_LINEINDEX, r, 0);
if (r < NRows-1) then
r2 := SendMessage(Handle, EM_LINEINDEX, r+1, 0)-2 {-CR/LF}
else
r2 := GetTextLen;
end;
Result := r2-r1;
end;

function TForm1.MemoLine: Integer;
begin
with Memo1 do
Result := SendMessage(Handle, EM_LINEFROMCHAR, SelStart, 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
MaxCharsPerLine := 8;
MaxLines := 4;
end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
with Memo1 do begin
case Key of
' '..#255: if (LineLen(MemoLine) >= MaxCharsPerLine) then
Key := #0;
#10, #13: if (NRows >= MaxLines) then
Key := #0;
#8: if (SelStart = SendMessage(Handle, EM_LINEINDEX, MemoLine, 0)) then
Key := #0;
end;
end;
end;

end.

 
呵呵,zhucp已经回答了嘛
 
呵呵,可是不对呀!
 
后退
顶部