2014-11-29 4 views
0

나는 TPopupMenu을 런타임에 추가했습니다. 나는 캡션으로 그들을 분류하고 싶다 : "Abc", "MyItem", "Zztop". 메뉴 항목 목록에서 Sort 메서드를 찾을 수 없습니다.캡션별로 PopupMenu 항목 정렬

델파이 7.

+2

항목을 정렬 된 순서로 menue에 추가하십시오. –

+0

@Sir 그렇게 할 수있는 기회가 있다고 가정합니다. 메뉴가 단계적으로 또는'Assign' 구조체 또는'ActionList'에 의해 채워지거나, 다른 언어로 번역 될 필요가 있다고 생각하면 ... 그러나 OP는 확실히 그것에 대해 더 분명 할 수 있습니다! – NGLN

+0

@NGLN 문제를 해결하는 무언가를 만드는 것은 일반적인 프로그래머들의 삶입니다. 단계별로 추가하고 유추하는 유스 케이스가있는 경우 분류, 번역 및 프리젠 테이션을 위해 항목을 관리하는 클래스를 만들어야합니다. –

답변

5

런타임에 항목을 추가하기 때문에 선호하는 방법은 이미 정렬 된 항목을 추가하는 것입니다.
이미 항목이 포함 된 메뉴에 항목을 추가해야하는 경우 해당 항목의 MenuIndex을 원하는 값으로 설정하여 항목을 정렬 할 수 있습니다.
쉬운 방법은 Items를 정렬 된 StringList로 가져 와서 MenuIndex 양식을 적용하는 것입니다.

Procedure SortMenuItems(Menu: TPopupMenu); 
var 
    i: Integer; 
    sl: TStringList; 
begin 
    sl := TStringList.Create; 
    try 
    sl.Sorted := true; 
    for i := 0 to Menu.Items.Count - 1 do 
    begin 
     sl.AddObject(Menu.Items[i].Caption, Menu.Items[i]); 
    end; 
    for i := 0 to sl.Count - 1 do 
     TMenuItem(sl.Objects[i]).MenuIndex := i; 
    finally 
    sl.Free; 
    end; 
end; 
+0

좋습니다. SpTbx와 동일한 방법을 알고 있습니까? 'TTbCustomItem'은 아이템과 서브 메뉴 아이템을위한 기본 클래스입니다. 그것 안에'MenuIndex'가 없습니다 – Prog1020

+0

@R 프로그램 죄송합니다, 나는 SpTbx에 익숙하지 않습니다. 소스를 가지고 있습니까? 조상에서 Move 나 비슷한 것을 찾을 수 있습니다. – bummi

+1

'이동 (Previndex, Newindex)'이 (가) 발견되었습니다. – Prog1020