Показать сообщение отдельно
  #7  
Старый 14.07.2010, 23:40
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Цитата:
Сообщение от NumLock
ну если очень хочется, то можно:
Код:
BOOL DrawEdge(
    HDC hdc,	// handle to device context
    LPRECT qrc,	// pointer to rectangle coordinates
    UINT edge,	// type of inner and outer edge to draw
    UINT grfFlags	// type of border
   );	
к примеру


Код:
...  
WM_DRAWITEM:
      begin

        case PDRAWITEMSTRUCT(lParam).CtlType of
          ODT_MENU :
            begin
             lpdis := Pointer(LParam);
             item := Pointer(lpdis.ItemData);

             Arrow:=LoadBitmap(0,Pchar(ArrowNum));
             h2DC := CreateDC('DISPLAY', nil, nil, nil);
             h1DC := CreateCompatibleDC(h2DC);
             SetBkMode(h1DC, TRANSPARENT);
             SelectObject(h1DC, Arrow);
             GetObject(Arrow,SizeOf(GetArrow),@GetArrow);
             CheckWidth:=GetArrow.bmWidth;

            //Рисуем Рамку меню
              drawMenuWnd(lpdis.hDC);


if (lpdis.itemState and ODS_SELECTED = ODS_SELECTED) then begin
 //- тут узнаём что рисуется Выделенный пункт меню и отрисовываем его
FillRect(lpdis.hDC,lpdis.rcItem, GetSysColorBrush(COLOR_HIGHLIGHT); //к примеру
 DrawIconEx(бла,бла,бла); // Рисуем иконку, текс и прочие шалости веделенного пункта меню в lpdis.rcItem - Rect этого пункта меню.
... 
end Else begin
//Тут узнаем о не выделенных пунктах меню ну и отрисовывем их как хотим. lpdis.rcItem - Rect'ы этИХ менюх
...
end; 
//Это всё опозналось, прекрасно, пробуем опознать сепаратор.

 mii.cbSize := sizeof(mii); //Структура Информации о Пункте меню
            mii.fMask:=MIIM_STATE or MIIM_TYPE or MIIM_ID or MIIM_DATA or MIIM_SUBMENU;
            mii.cbSize:=sizeof(MENUITEMINFO);
            GetMenuItemInfo(PopupMenu1, lpdis.itemID, true, &mii); //Получаем информацию о текущем пункте меню (lpdis.itemID)
             if (mii.fType = MFT_SEPARATOR) then begin //Смотрим - сепаратор или нет, если да то отрисовываем его.

            FillRect(lpdis.hDC,lpdis.rcItem, GetSysColorBrush(COLOR_WINDOWTEXT));

             end;  


         end;
...
Как рисовать это понятно, но мне не понятно другое
Вот вродебы должно отрисовать, но нет,.. if mii.fType = MFT_SEPARATOR - не даёт координаты сепаратора на менюхе lpdis.rcItem - остаётся темеже что и на выделенном меню...
Вот мне и надо узнать что рисуется Сепаратор, и получить его TRECT...
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием