2015-04-23 118 views
-3

我想在Delphi中製作菜單和子菜單和子菜單。總長度爲4000個項目,它將會非常明確地定義它們並單獨採取行動。我知道我可以使用循環來定義他們的標題和他們的onclick。我嘗試了不同的命令,但程序沒有找到這些命令。如何使用循環制作菜單

例如我想比較不同公司的產品,比如說食物。有機或無機。奶製品有牛奶,酸奶,奶酪,奶油等,每種都有天然,中等或低脂肪。等其他食品。我在一個文件中創建了一個產品列表,以便我可以從文件中讀取每個項目,並在創建它們時將它們放在menuitem的標題中。但我不知道如何創建菜單項並在其標題中添加文本。我已經使用了xtem.Index [i],但程序無法識別。

當我準備好菜單的定義時,我必須做一個循環,當我在菜單欄中選擇一個項目時,它必須出現在編輯框中作進一步計算,所以我沒有問題。

另外我的問題是使兩種類型的食品有機廣告非有機 每個有超過1000個子菜單,每個子菜單至少有1個項目,它可以是一些subsubmenus有幾個項目。所以我想用循環來製作菜單。

之後,當我選擇一個項目,它應該出現在編輯框中,所以我必須在循環中使用適當的命令。

我希望和願望,欣賞,如果你能幫助我爲我的請求,並告訴我一些命令,所以我可以完成我的計劃

+6

這多少項聽起來並不像菜單,而是一個樹形視圖的工作。在長時間搜索物品後意外關閉菜單的用戶不佳。 – TLama

+0

4000菜單項......他們甚至都能放在正常的屏幕上嗎? Heed TLama建議。也請將您的問題更新爲更好的格式。請參閱[如何提問](http://stackoverflow.com/help/how-to-ask) –

+0

您的UI設計當然是有缺陷的。除此之外,可以動態創建菜單。如果你沒有這樣做,那麼我猜你在代碼中犯了一個錯誤。我們看不到。請重新訪問該問題,並添加一個用於動態製作菜單的代碼的簡短示例。哦,當你編輯問題時,請添加一些結構。有些段落會有所幫助。 –

回答

3

你是不是很具體你想要什麼,所以我做了你一個如何在運行時創建MainMenu的小例子。但我同意評論這是一個壞的解決方案。

但這裏任何方式有云:

uses 
    Menus; 


procedure TForm17.CreateMainMenu; 
var 
    MainMenu: TMainMenu; 
    TopMenuItem, MenuItem, SubMenuItem: TMenuItem; 
    i, j, k: Integer; 
begin 
    MainMenu := TMainMenu.Create(Self); 

    for i := 0 to 5 do 
    begin 
    TopMenuItem := TMenuItem.Create(MainMenu); 
    TopMenuItem.Caption := 'Top menu item #' + i.ToString; 
    TopMenuItem.OnClick := MenuItemClick; 
    MainMenu.Items.Add(TopMenuItem); 
    TopMenuItem := MainMenu.Items[i]; 

    for j := 0 to 10 do 
    begin 
     MenuItem := TMenuItem.Create(MainMenu); 
     MenuItem.Caption := 'Menu item #' + j.ToString; 
     MenuItem.OnClick := MenuItemClick; 
     TopMenuItem.Add(MenuItem); 
     MenuItem := TopMenuItem.Items[j]; 

     for k := 0 to 10 do 
     begin 
     SubMenuItem := TMenuItem.Create(MainMenu); 
     SubMenuItem.Caption := 'Sub Menu item #' + k.ToString; 
     SubMenuItem.OnClick := MenuItemClick; 
     MenuItem.Add(SubMenuItem); 
     SubMenuItem := MenuItem.Items[k]; 
     end; 
    end; 
    end; 
end; 


procedure TForm17.FormCreate(Sender: TObject); 
begin 
    CreateMainMenu; 
end; 

procedure TForm17.MenuItemClick(Sender: TObject); 
begin 

end;