delphi编辑文本
发布网友
发布时间:2022-10-10 07:19
我来回答
共2个回答
热心网友
时间:2023-10-03 09:58
不知道上边的那些点你是存在那呢?
给两种思路:
1.使用数据库
将点坐标存在数据库表里。解析memo1的数据,查询括号里的两个点,依次取出每个点的x,y,z赋值给memo2.
2.使用stringlist
将点依次存入stringlist,解析了数据后,直接取stringlist.string[x],转换后赋值给memo2
关键语句如:
tmpstrlist := tstringlist.create;
tmpstrlist.text := memo1.text;
for i := 0 to tmpstrlist.count-1 do
begin
tempstr := tmpstrlist.strings[i];
tempstr := copy(tempstr,pos('(',tempstr)+1,pos(')',tempstr)-pos('(',tempstr)-1);
tempx := copy(tempstr,1,pos(',',tempstr)-1);
tempy := copy(tempstr,pos(',',tempstr)+1,length(tempstr));
//如此就 取得了线的两个点
//这里采用方法2吧,方法1,用数据库操作应该很简单,查询出来后,依值赋值就行了
//这里假设第一个点存为0,0,0,如果如楼主那样的自己转换一下就行
tempintx := strtoint(tempx);
tempinty := strtoint(tempy);
tempstr := linestrlist.strings[tempintx];
memo2.items.add('line'+inttostr(i));
meme2.items.add('x'+inttostr(tempintx)+' '+copy(tempstr,1,pos(',',tempstr)-1);
tempstr:=copy(tempstr,pos(',',tempstr)+1,length(tempstr));
meme2.items.add('y'+inttostr(tempintx)+' '+copy(tempstr,1,pos(',',tempstr)-1);
tempstr:=copy(tempstr,pos(',',tempstr)+1,length(tempstr));
meme2.items.add('z'+inttostr(tempintx)+' '+copy(tempstr,1,length(tempstr));
//y照着弄就行了
end; //结束循环
热心网友
时间:2023-10-03 09:59
又在问?
TDHPoint = record
Idx:Integer;
x,y,z:Single;
end;
TDHLine = record
Idx:Integer;
T1,T2:Integer;
P1,P2:TDHPoint;
T3:Integer;
end;
var
Form1: TForm1;
PointList:array of TDHPoint;
sl,sl1:TStringList;
implementation
{$R *.dfm}
function GetPointByIdx(idx:Integer):TDHPoint ;
var
i:Integer;
begin
for i:=0 to Length(PointList)-1 do
if PointList[i].Idx=idx then
begin
Result:=PointList[i];
Exit;
end;
end;
function StrToPoint(const s:string;var P:TDHPoint):Boolean;
begin
Result:=False;
if s='' then
Exit;
sl.Clear;
try
sl.Delimiter:=',';
sl.DelimitedText:=s;
if sl.Count<>4 then
Exit;
P.Idx:=StrToInt(sl[0]);
P.x:=StrToFloat(sl[1]);
P.y:=StrToFloat(sl[2]);
P.z:=StrToFloat(sl[3]);
Result:=True;
except
end;
end;
function GetPointList(const s:string):Boolean;
var
I:Integer;
begin
Result:=False;
sl1.Clear;
try
sl1.Text:=s;
SetLength(PointList,sl1.Count);
for I:=0 to sl1.Count-1 do
if not StrToPoint(sl1[i],PointList[i]) then
Exit;
Result:=True;
except
end;
end;
function StrToLine(const S:string;var Line:TDHLine):Boolean ;
var
idx1,idx2,C:Integer;
begin
Result:=False;
if s='' then
Exit;
sl.Clear;
sl.Delimiter:=',';
sl.DelimitedText:=s;
if sl.Count<>7 then
Exit;
try
C:=Length(PointList);
idx1:=StrToInt(sl[4]);
idx2:=StrToInt(sl[5]);
if (idx1<0)or(idx1>=C)or(idx2<0)or(idx2>=c) then
Exit;
Line.Idx:=StrToInt(sl[0]);
Line.T1:=StrToInt(sl[2]);
Line.T2:=StrToInt(sl[3]);
Line.P1:=GetPointByIdx(idx1);
Line.P2:=GetPointByIdx(idx2);
Line.T3:=StrToInt(sl[6]);
Result:=True;
except
end;
end;
procere TForm1.btn1Click(Sender: TObject);
var
Idx,I:Integer;
Sl2:TStringList;
L:TDHLine;
B:Boolean;
begin
B:=True;
Sl2:=TStringList.Create;
Sl:=TStringList.Create;
Sl1:=TStringList.Create;
mmo2.Clear;
try
for I:=0 to mmo1.Lines.Count-1 do
if (mmo1.Lines[i]='') then
begin
//获得所有点.
if B then
begin
if not GetPointList(Sl2.Text) then
Exit;
B:=False;
Sl2.Clear;
end;
end
else
sl2.Add(mmo1.Lines[i]);
for i:=0 to sl2.Count-1 do
begin
if not StrToLine(sl2[i],L) then
Exit;
mmo2.Lines.Add('Line'+ IntToStr(L.Idx));
mmo2.Lines.Add('x1') ;
mmo2.Lines.Add(' '+FloatToStr(L.P1.x)) ;
mmo2.Lines.Add('y1') ;
mmo2.Lines.Add(' '+FloatToStr(L.P1.y)) ;
mmo2.Lines.Add('z1') ;
mmo2.Lines.Add(' '+FloatToStr(L.P1.z)) ;
//
mmo2.Lines.Add('x2') ;
mmo2.Lines.Add(' '+FloatToStr(L.P2.x)) ;
mmo2.Lines.Add('y2') ;
mmo2.Lines.Add(' '+FloatToStr(L.P2.y)) ;
mmo2.Lines.Add('z2') ;
mmo2.Lines.Add(' '+FloatToStr(L.P2.z)) ;
end;
finally
sl.Free;
sl1.Free;
sl2.Free;
end;
end;