-
Ничего удивительного, Sender всегда само меню. Для доступа к тагу пункта меню надо его взять: Sender.Items[Item].Tag
-
Самое удивительное, что взял меню присвоил Tag, опять нуль приходит!
-
ОЙ, вру, все нормально. Я забыл пересобрать проект.
-
Santa, Есть вариант еще проще. У меню назначаешь обработчик OnMenuItem и в нем:
procedure TForm1.mnuMainMenuItem(Sender: PMenu; Item: Integer);
begin
case Item of
mnuA:
;
mnuB:
.....
-
> program Project1; > > uses > KOL; > > var sl: PStrList; > > begin > sl := NewStrList; > // sl.Add('1'); > sl.Sort(False); > ShowMessage('1'); > end.
Можно исправить так: procedure TStrList.Sort(CaseSensitive: Boolean);
asm
MOV [EAX].fCaseSensitiveSort, DL
MOV [EAX].fAnsiSort, 0
MOV ECX, offset[StrComp]
CMP DL, 0
JNZ @@01
MOV ECX, offset[StrComp_NoCase]
MOV ECX, [StrComp_NoCase]
@@01:
MOV EAX, [EAX].fList
test eax, eax
jz @exit
MOV EDX, [EAX].TList.fCount
CMP EDX, 1
JLE @@02
MOV EAX, [EAX].TList.fItems
CALL SortArray
@@02:
PUSH Offset[TStrList.Swap]
MOV ECX, Offset[CompareStrListItems_Case]
CMP DL, 0
JNZ @1
MOV ECX, Offset[CompareStrListItems_NoCase]
@1: MOV EDX, [EAX].fCount
CALL SortData
@exit:
end;
-
Ну это на все меню хорошо, если оно почти одинаковое. А если две разные структуры надо реализовать на разные части, то по сути эта процедура будет состоять как бы из двух логических частей, что смысла в таком случае все сводить в одну процедуру не вижу. Хотя дела вкуса.
-
procedure TForm1.MainMenuN200Menu(Sender: PMenu; Item: Integer);
Тогда почему не юзать Item? =)
|