MEMO控件如何判断当前行是空行?(0分)

  • 主题发起人 主题发起人 samen
  • 开始时间 开始时间
S

samen

Unregistered / Unconfirmed
GUEST, unregistred user!
MEMO控件如何判断当前行是空行?
procedure TForm1.Memo2KeyPress(Sender: TObject;
var Key: Char);
begin
if length(memo2.Lines.Text)=0 then
begin
messagedlg('请输入内容!',mterror,[mbok],0);
exit;
end;
end;

同样在procedure TForm1.Memo2KeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
begin
if length(memo2.Lines.Text)=0 then
begin
messagedlg('请输入内容!',mterror,[mbok],0);
exit;
end;
end;
也不行,到底应该怎样判断?
 
memo.lines[n]=''
 
怎么确定当前行的N?
 
C++ Builder的例子,你试着改成delphi的,应该没有问题
新建一个应用,在窗体Form1上添加两个TLabel组件名为Label1,Label2;
添加两个TButton组件名为Button1,Button2;添加一个TMemo组件名为Memo1。
然后在代码编辑器中添加以下代码。
  void __fastcall TForm1::Button1Click(TObject *Sender)
  {
  Label1→Caption=SendMessage(Memo1→Handle,EM_LINEFROMCHAR,-1,0)+1;
  }
  
  void __fastcall TForm1::Button2Click(TObject *Sender)
  {
  Label2→Caption=Memo1→SelStart-SendMessage(Memo1→Handle,EM_LINEINDEX,-1,0)+1;
  }
  这种方法同样适用于RichEdit。
 
转贴给你
通过调用API确定MEMO控件中的当前行和列。
你可以调用WINDOWSAPI中的EM—LINEFROM?CHAR和EM—LINEINDEX函数来确定MEMO控件中的当前行和列,具体调用的过程见下面的过程。
var
LineNum:longint;
CharsBeforeLine:longint;
begin
LineNumΚSendMessage(Memo1.Handle,EM—LINEFROMCHAR,Memo1.SelStart,0);
CharsBeforeLine:=SendMessage(Memo1.Handle,EM—LINEINDEX,LineNum,0);
Label1.Caption:=′Line′+IntToStr(LineNum+1)
Label2.Caption:=′Position′+IntToStr((Memo1.SelStart-CharsBeforeLine)+1);
end;
 
后退
顶部