例如memo中有这么一行:  ad=a×b
 现在想提取“=”号左侧包括“=”在内的字符串,即提取这段“ad=”字符串,当我按下键盘回车键时,memo下一行即自动生成“ad=”的样式。效果要的是这样:
 
 ad=a×b    //第一行
 ad=        //键盘回车,产生第二行
 ad=        //键盘回车,产生第三行
 ad=        //键盘回车,产生第四行
 请问该如何做呢?请高手解答,谢谢!因为右侧的字符串要进行数学计算,所以存为数组。

解决方案 »

  1.   

    处理memo的按键消息如果是回车,则提取第一行的字符串例如
    index:=pos(memo1.lines[0],'=');memo1.lines.add(leftstr(memo1.lines[0],index));
      

  2.   

    就是个简单的字符串截取,pos,copy
      

  3.   

    新建一个工程、双击窗体、用下列代码覆盖你的unit1所有内容:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        procedure MemoKeyPress(Sender: TObject; var Key: Char);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationvar v1,v2:array of integer;
        arrayindex:integer;
        StatusBar:TStatusBar;
        Memo:TMemo;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var i:integer;
    begin
      Form1.Height:=240;
      Form1.Width:=260;
      Form1.Position:=poScreenCenter;
      Form1.Caption:='分解memo中的字符';
      Memo:=TMemo.Create(self);
      Memo.Parent:=form1;
      Memo.OnKeyPress:=MemoKeyPress;
      Memo.Align:=alClient;
      StatusBar:=TStatusBar.Create(self);
      StatusBar.Parent:=form1;
      for i:=0 to 4 do
      begin
        StatusBar.Panels.Add;
        StatusBar.Panels[i].Width:=66;
      end;
      StatusBar.Panels[2].Width:=12;
    end;procedure TForm1.MemoKeyPress(Sender: TObject; var Key: Char);
    var i,j,y,len,tmp1,tmp2:integer;
        s,ls,ms,rs:string;
    begin
      if key=#13 then
      begin
        key:=#0;   //不让转行
        y:=Memo.CaretPos.Y;//当前行索引
        s:=memo.Lines.Strings[y];//当前行的字符串
        len:=length(s);//当前行的长度
        i:=pos('=',s); //等号在当前行的位置
        j:=pos('x',s); //乘号在当前行的位置
        if (i=0)or(j=0)or(i>j)or(j<i+2)or(len<j+1) then //如果当前行式子不符合格式
          showmessage('式子未完整或不符合格式,回车无效。')
        else
        begin
          ls:=copy(s,1,i);
          ms:=copy(s,i+1,j-i-1);
          rs:=copy(s,j+1,len-j);
          try
            tmp1:=strtoint(ms);
            tmp2:=strtoint(rs);
          except
            showmessage('乘号两则不是整数,请更正。');
            exit;
          end;
          memo.Lines.Add(ls);
          inc(arrayindex);
          setlength(v1,arrayindex);
          setlength(v2,arrayindex);
          v1[arrayindex-1]:=tmp1; //存入数组
          v2[arrayindex-1]:=tmp2; //存入数组
          StatusBar.Panels[0].Text:=StringOfChar(' ',10-length(ls))+ls;
          StatusBar.Panels[1].Text:=StringOfChar(' ',10-length(ms))+ms;
          StatusBar.Panels[2].Text:='x';
          StatusBar.Panels[3].Text:=StringOfChar(' ',10-length(rs))+rs;
        end;
      end;
    end;end.
      

  4.   

    除了1楼的方法外还可以利用TString的特性来做
    在memo的按键消息中处理:
    if key=#13 then
      if memo.lines.count>0 then
        if pos('=',memo.lines[0] > 0)
          memo.lines.add(memo.lines.name[0]+'='); 
      

  5.   

    你们楼上的代码谁的都试过了,不行,代码给完整点啊。小弟初学delphi,有的概念都还没搞明白。
      

  6.   

    开玩笑!我的代码是经过校验才放上来的,足够完整的了,除非你对自己的要求表述出了问题,我的代码是根据你的要求弄的。你新开一个工程、双击工程中的窗体、复制我在三楼的代码,粘贴并覆盖你的unit1中所有内容,然后编译和运行,试着输入 12=3x4 回车,看看效果。