Maks150988
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ShIvADeSt Опа, что-то я запутался немного. В уме крутил вертел представлял как пункты будут обрабатываться... Было так: Код: //узнаем сколько подменю у главного меню iCount := GetMenuItemCount(hAppMenu); //проходимся по всем подменю for mIndex := 0 to iCount do begin //узнаем сколько пунктов в подменю и проходимся по ним iSubCount := GetMenuItemCount(GetSubMenu(hAppMenu, mIndex)); for mSubIndex := 0 to iSubCount do begin iSubID := GetMenuItemID(GetSubMenu(hAppMenu, mIndex), mSubIndex); iState := GetMenuState(hAppMenu, iSubID, MF_BYCOMMAND); if (iState and MF_SEPARATOR = MF_SEPARATOR) then ModifyMenuW(GetSubMenu(hAppMenu, mIndex), iSubID, MF_SEPARATOR or MF_BYCOMMAND or MF_OWNERDRAW, iSubID, nil) else begin //itemData.iData := itemIcon; ModifyMenuW(GetSubMenu(hAppMenu, mIndex), iSubID, MF_BYCOMMAND or MF_OWNERDRAW, iSubID, PWideChar(itemData.itemIcon)); Inc(itemData.itemIcon); end; end; end; | Стало так: Код: //узнаем сколько подменю у главного меню iCount := GetMenuItemCount(hAppMenu); //проходимся по всем подменю for mIndex := 0 to iCount do begin //узнаем сколько пунктов в подменю и проходимся по ним iSubCount := GetMenuItemCount(GetSubMenu(hAppMenu, mIndex)); for mSubIndex := 0 to iSubCount do begin //iSubID := GetMenuItemID(GetSubMenu(hAppMenu, mIndex), mSubIndex); //идентификатор пункта нам не нужен теперь //в цикле теперь определяем тип каждого пункта подменю разделитель он или нет iState := GetMenuState(GetSubMenu(hAppMenu, mIndex), mSubIndex, MF_BYPOSITION); if (iState and MF_SEPARATOR = MF_SEPARATOR) then ModifyMenuW(GetSubMenu(hAppMenu, mIndex), mSubIndex, MF_SEPARATOR or MF_BYPOSITION or MF_OWNERDRAW, mSubIndex, nil) else begin //itemData.iData := itemIcon; ModifyMenuW(GetSubMenu(hAppMenu, mIndex), mSubIndex, MF_BYPOSITION or MF_OWNERDRAW, mSubIndex, PWideChar(itemData.itemIcon)); Inc(itemData.itemIcon); end; end; end; | Вот, думаю код отрисовки в оконной процедуре приводить не надо. Там через MF_BYCOMMAND реализовано рисование строк. Думаю от этого не зависит конечная отрисовка, ведь флаг для команды соответствующий, ну и там как раз lpdis.itemID вкачестве идентификатора. А трабл сейчас вот какой. Почему-то отображаются пункты от предыдущего подменю на следующем вместо его необходимых - в моем случае от первоо подменю текст отображается на всех последующих. |