我定义了如下一个指针。
PTTriList=^TTriList;
TTriList=RECORD
GUIDInt:LongWord;
RImage:TRotateImage;
Flage:Byte;
End;
定义了一个list
TRIList:TList;
我用如下函数操作这个list
function TMainWindow.AddNode(WControl: TWinControl):Integer;
//添加一条横线条到list中。
var
GUID:TGUID;
TempTTriList:PTTriList;
TempInt:Integer;
Begin
if(TRIList=nil) then Begin
TRIList:=TList.Create;
TRIList.Clear;
End;
CreateGuid(GUID);
GetMem(TempTTriList,Sizeof(PTTriList));
TempTTriList^.RImage:=TRotateImage.Create(WControl);
TempTTriList^.RImage.Parent:=WControl;
TempTTriList^.GUIDInt:=GUID.D1;
TempTTriList^.RImage.Name:='Image'+intToStr(GUID.D1);
TempTTriList^.Flage:=1;
TempTTriList^.RImage.PopupMenu:=PopupMenu8;
TempTTriList^.RImage.OnDblClick := RotateImage1DblClick; //鼠标双击事件
TempTTriList^.RImage.OnMouseDown := RotateImage1MouseDown; //鼠标 OnMouseDown事件
TempTTriList^.RImage.OnMouseMove := RotateImage1MouseMove; //鼠标OnMouseMove事件
TempTTriList^.RImage.OnMouseUp := RotateImage1MouseUp;//鼠标OnMouseUp事件
TempTTriList^.RImage.Tag:=TRIList.Count;
TempInt:=TRIList.Add(TempTTriList);
Result:=TempInt;
End;function TMainWindow.DeleteNode(IndexInt:Integer):Integer;
//删除一条横线
Begin
if(TRIList=nil) Then Exit;
if(TRIList.Count=0) Then Exit;
PTTriList(TRIList.Items[IndexInt])^.RImage.Free;
PTTriList(TRIList.Items[IndexInt])^.RImage:=nil;
//FreeMem(TRIList.Items[IndexInt], Sizeof(PTTriList));
TRIList.Delete(IndexInt);
End;function TMainWindow.GetNode(IndexInt:Integer):PTTriList;
//
//获取一个指定位置的线条
Begin
Result:=PTTriList(TRIList.Items[IndexInt]);
End;在删除一个节点后,DeleteNode,退出程序提示:Invalid pointer operation
不退出依然可以删除下个,退出就提示这个错误。
我在获取一个节点后,GetNode,发现RImage为nil,而Flage和guid却有值。
请问各位高手,我错在哪里?是不是addnode函数中,创建timage方式不对?
PTTriList=^TTriList;
TTriList=RECORD
GUIDInt:LongWord;
RImage:TRotateImage;
Flage:Byte;
End;
定义了一个list
TRIList:TList;
我用如下函数操作这个list
function TMainWindow.AddNode(WControl: TWinControl):Integer;
//添加一条横线条到list中。
var
GUID:TGUID;
TempTTriList:PTTriList;
TempInt:Integer;
Begin
if(TRIList=nil) then Begin
TRIList:=TList.Create;
TRIList.Clear;
End;
CreateGuid(GUID);
GetMem(TempTTriList,Sizeof(PTTriList));
TempTTriList^.RImage:=TRotateImage.Create(WControl);
TempTTriList^.RImage.Parent:=WControl;
TempTTriList^.GUIDInt:=GUID.D1;
TempTTriList^.RImage.Name:='Image'+intToStr(GUID.D1);
TempTTriList^.Flage:=1;
TempTTriList^.RImage.PopupMenu:=PopupMenu8;
TempTTriList^.RImage.OnDblClick := RotateImage1DblClick; //鼠标双击事件
TempTTriList^.RImage.OnMouseDown := RotateImage1MouseDown; //鼠标 OnMouseDown事件
TempTTriList^.RImage.OnMouseMove := RotateImage1MouseMove; //鼠标OnMouseMove事件
TempTTriList^.RImage.OnMouseUp := RotateImage1MouseUp;//鼠标OnMouseUp事件
TempTTriList^.RImage.Tag:=TRIList.Count;
TempInt:=TRIList.Add(TempTTriList);
Result:=TempInt;
End;function TMainWindow.DeleteNode(IndexInt:Integer):Integer;
//删除一条横线
Begin
if(TRIList=nil) Then Exit;
if(TRIList.Count=0) Then Exit;
PTTriList(TRIList.Items[IndexInt])^.RImage.Free;
PTTriList(TRIList.Items[IndexInt])^.RImage:=nil;
//FreeMem(TRIList.Items[IndexInt], Sizeof(PTTriList));
TRIList.Delete(IndexInt);
End;function TMainWindow.GetNode(IndexInt:Integer):PTTriList;
//
//获取一个指定位置的线条
Begin
Result:=PTTriList(TRIList.Items[IndexInt]);
End;在删除一个节点后,DeleteNode,退出程序提示:Invalid pointer operation
不退出依然可以删除下个,退出就提示这个错误。
我在获取一个节点后,GetNode,发现RImage为nil,而Flage和guid却有值。
请问各位高手,我错在哪里?是不是addnode函数中,创建timage方式不对?
New(TempTTriList);
TempTTriList^.…… := ……;
TempTTriList^.RImage := …….Create(nil);
……;
TRIList.Add(TempTTriList);
删除结点:
FreeAndNil(TempTTriList^.RImage);
Dispose(TempTTriList);
TRIList.Delete(i);
//删除一条横线
Begin
if(TRIList=nil) Then Exit;
if(TRIList.Count=0) Then Exit;
PTTriList(TRIList.Items[IndexInt])^.RImage.Free;
PTTriList(TRIList.Items[IndexInt])^.RImage:=nil;
FreeMem(TRIList.Items[IndexInt], Sizeof(PTTriList));//或者用Dispose(TRIList.Items[IndexInt])
TRIList.Delete(IndexInt);
End;