通常 Memo1.Lines.Count というように処理すると思います。実際にデータが入っている行数を取得する分にはこれで十分だと思います。
しかし、最終行に改行コードが入っていると、見た目にはもう一行空行が存在することになります。
たとえば、新規にフォームに追加したTMemoは“Memo1[改行コード]”といったTextを持っています。このとき Memo1.Lines.Count では“1”が取得できますが、Windows API のEM_GETLINECOUNT を使えば、表示しているままの“2”が取得できます。
些細なことかもしれませんが、Memoの行数を制限したい場合などには有効に働きます。
そのほか、コントロールの横幅が内容よりも小さくワードラップする場合には、TMemo の Count プロパティは論理行(エディタ的、改行コード+1)を返すようですが、Windows API を用いると物理行(ワープロ的、見た目どおり)を返すようです。
unit UMemoLine;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Linesで行数取得' + IntToStr(Memo1.Lines.Count));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('WinAPIで行数取得' + IntToStr(
SendMessage(Memo1.Handle, EM_GETLINECOUNT, 0, 0)));
end;
end.
コメント (0件)