例如memo中有这么一行: ad=a×b
现在想提取“=”号左侧包括“=”在内的字符串,即提取这段“ad=”字符串,当我按下键盘回车键时,memo下一行即自动生成“ad=”的样式。效果要的是这样:
ad=a×b //第一行
ad= //键盘回车,产生第二行
ad= //键盘回车,产生第三行
ad= //键盘回车,产生第四行
请问该如何做呢?请高手解答,谢谢!因为右侧的字符串要进行数学计算,所以存为数组。
现在想提取“=”号左侧包括“=”在内的字符串,即提取这段“ad=”字符串,当我按下键盘回车键时,memo下一行即自动生成“ad=”的样式。效果要的是这样:
ad=a×b //第一行
ad= //键盘回车,产生第二行
ad= //键盘回车,产生第三行
ad= //键盘回车,产生第四行
请问该如何做呢?请高手解答,谢谢!因为右侧的字符串要进行数学计算,所以存为数组。
解决方案 »
- 为什么ACTIVEX签名后和没有签名一样?
- 子进程怎么通过WaitForSingleObject判断主进程存在?
- 如何得到窗口Z序
- 关于子窗体的命名
- delphi里怎样调用NetMeeting及关闭它?
- 期待高==========================================================手参加讨论,小弟不胜感激
- 如何缩放图片???
- form的小问题,帮个忙
- Delphi开发的WebService如何用Tomcat发布
- 68分,祝大家春节一路走好(各位大侠路过请进来坐坐,喝杯茶再走,请教treeview问题)
- 我真的变了吗
- 怎么能让delphi 屏幕录像 录制falsh格式的文件?
index:=pos(memo1.lines[0],'=');memo1.lines.add(leftstr(memo1.lines[0],index));
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.
在memo的按键消息中处理:
if key=#13 then
if memo.lines.count>0 then
if pos('=',memo.lines[0] > 0)
memo.lines.add(memo.lines.name[0]+'=');