我有一個錯誤消息「無效的浮點操作」的問題。彈出菜單是一個設計時間控件,它被命名爲NavPop
。它沒有分配菜單項。它被指定爲Panel1
的彈出菜單。德爾福Dyncam創建彈出式菜單項 - 無效的指針操作/訪問衝突
然後,我從列表框中動態創建菜單項,並指定標題和單擊事件。就我所要完成的事情而言,一切都有效。即它工作。
只有當我關閉程序,做我得到
無效的浮點運算
或以其他方式:
訪問衝突地址000007355.讀Addrss 0000007355.
的
請請注意,除了關閉程序時發生的錯誤,所有內容都可以正常工作。我將不勝感激任何幫助。
// I declare the Array of TMenuItems
private
{ Private declarations }
ItemArray : array of TMenuItem;
...
procedure TMainForm.Button1Click(Sender: TObject);
begin
CreateNavPop;
end;
// Create the menu items from listbox(Navlist) items and Link them
// to events on a navigation bar.
procedure TMainForm.CreateNavPop;
var
I: Integer;
NavIndex: Integer;
begin
SetLength(ItemArray, NavList.Items.Count);
NavIndex:=0;
For I:=0 to NavList.Items.Count-1 do
begin
NavIndex:=NavBar1.Items.ItemByCaption(NavList.Items.Strings[i]).Index;
ItemArray[i]:=TMenuItem.create(Nil);
ItemArray[i].Caption:=NavList.Items.Strings[i];
ItemArray[i].OnClick:=NavBar1.Items.Items[Navindex].OnClick;
NavPop.Items.Add(ItemArray[i]);
end;
end;
// Call the Items free on program close
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeItems(ItemArray);
end;
// Free Dynamically created Menu Items on Form Close
procedure TMainForm.FreeItems(MItems : array of TMenuItem);
var
cnt : integer;
begin
for cnt := High(MItems) downto Low(MItems) do
begin
MItems[cnt].Free;
MItems[cnt] := nil;
end;
end;
不應該在構造函數中分配「TMenuItem」的所有者嗎?你現在將它設置爲「nil」。 – Pateman
在保持TMenuItem列表中有一點值得注意嗎?只要像Pateman說的那樣在構造函數(navpop)中分配一個所有者就足夠了。 –
有關示例,請參見[如何動態添加項目(保存自定義屬性)到TPopUp菜單](http://delphi.about.com/od/kbcurt/a/dynamicmenuitem.htm)。要調試您的程序,請使用FastMM和調試選項,如下所示:[如何打開/關閉Delphi XE下的FastMM內存泄漏報告?](http://stackoverflow.com/q/6075554/576719)或在這裏:[如何在FastMM4中啓用完整調試模式?](http://stackoverflow.com/a/8601505/576719)。 –