2011-07-22 28 views

回答

15

處理這樣的事件OnPopup彈出菜單:

procedure TForm1.PopupMenu1Popup(Sender: TObject); 
begin 
    if ListView1.SelCount=0 then begin 
    Abort; 
    end; 
end; 

不要嘗試使用鼠標光標在你的邏輯,因爲在彈出菜單可以從被調用鍵盤。


事實證明,您要禁用取決於選擇的菜單上的某些項目。您應該使用此操作,然後您可以集中控制UI屬性。一個動作可以鏈接到一個按鈕,一個彈出菜單項,一個主菜單項等等。您不想編寫啓用和禁用所有這些單獨操作來解決此問題的代碼。

對此使用OnUpdate事件。

procedure TForm1.Action1Update(Sender: TObject); 
begin 
    Action1.Enabled := ListView1.SelCount>0; 
end; 

或者有時候你想爲你將代碼表這麼多動作相同OnUpdate

procedure TForm1.FileActionsUpdate(Sender: TObject); 
begin 
    (Sender as TAction).Enabled := ListView1.SelCount>0; 
end; 
+0

當我點擊列表視圖時,你會建議不會顯示彈出窗口,但是我想顯示菜單但是禁用菜單。建議請 – CyprUS

+1

'對於i = 0到PopupMenu1.Items.Count-1做PopupMenu1。 Items [i] .Enabled:=(ListView.SelCount> 0);' –

+1

@CyprUS再次閱讀您的問題,看看您是否能看到我爲什麼得出這個結論。 –

0

易短anwser,啓用或通過其名稱禁用一個菜單項:

YourPopup.EntryNameYouWantToDisable.Enable:=(YourBooleanCondition); 

每個TMenuItem都有一個.Enable屬性,您可以將其設置爲True或False。

易短anwser,啓用或通過其位置索引禁用一個菜單項:

YourPopup.Items[TheIndex].Enable:=(YourBooleanCondition); 

你可以去,雖然所有的人與項目使用一個循環:.Items[TheIndex]和知道多少與.Items.Count

P.D .:他們也有.Visible,所以你可以隱藏/顯示你想要的。

相關問題