memo读取分隔符一侧的字符串并存成数组
时间:2011-09-20
来源:互联网
现在想提取“=”号左侧包括“=”在内的字符串,即提取这段“ad=”字符串,当我按下键盘回车键时,memo下一行即自动生成“ad=”的样式。效果要的是这样:
ad=a×b //第一行
ad= //键盘回车,产生第二行
ad= //键盘回车,产生第三行
ad= //键盘回车,产生第四行
请问该如何做呢?请高手解答,谢谢!因为右侧的字符串要进行数学计算,所以存为数组。
作者: lcop2011 发布时间: 2011-09-20
index:=pos(memo1.lines[0],'=');memo1.lines.add(leftstr(memo1.lines[0],index));
作者: m617105 发布时间: 2011-09-20
作者: bdmh 发布时间: 2011-09-20
Delphi(Pascal) code
unit Unit1; interface uses 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; implementation var 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.
作者: gzzai 发布时间: 2011-09-20
在memo的按键消息中处理:
if key=#13 then
if memo.lines.count>0 then
if pos('=',memo.lines[0] > 0)
memo.lines.add(memo.lines.name[0]+'=');
作者: xiaxia421 发布时间: 2011-09-20
作者: lcop2011 发布时间: 2011-09-20
作者: lcop2011 发布时间: 2011-09-20
你新开一个工程、双击工程中的窗体、复制我在三楼的代码,粘贴并覆盖你的unit1中所有内容,然后编译和运行,试着输入 12=3x4 回车,看看效果。
作者: gzzai 发布时间: 2011-09-20
作者: gzzai 发布时间: 2011-09-20
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28