Tmemo控件的相关讨论

tudouwujun 2004-04-06 11:28:48
Tmemo控件用来存放文件的大小,但是对文件的大小有没有限制?
如果没有,如何得到TMemo控件中当前行的行数?
如果有,能用什么方法来解决?用Tstream可以吗?如何操作?
谢谢!
希望能附上源码!
...全文
79 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yantao14 2004-04-06
  • 打赏
  • 举报
回复
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.

cll007 2004-04-06
  • 打赏
  • 举报
回复
当前行列可以用 鼠标当前的位置 来确定
很简单 :
Memo1.CaretPos.X;
Memo1.CaretPos.Y;
-----
至于memo的可取的文件大小,最好自己去试一下,打开一个大文件
tudouwujun 2004-04-06
  • 打赏
  • 举报
回复
还是不明白,感谢楼上的,但是代码太难懂了。大侠们帮帮我?

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧