Конференция "WinAPI" » Как перерисовать выпадающий список COMBOBOX`а?
 
  • neversleep (02.12.11 13:39) [0]
    Создаю вот такой combobox: CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_OWNERDRAWFIXED | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP.

    При отрисовки итемов при определённых условиях к тексту итема добавляется ещё кое-какой текст и далее следует DrawText. (то есть фактически текст самого итема не меняется). Иногда в тот момент когда выпадающий список находится в состоянии DROPPED условия поменялись, и нужно его перерисовать, как это сделать?

    Пробывал:

    // Никакого эффекта
    UpdateWindow(hCombo);

    // Перерисовывает только сам комбобокс:
    InvalidateRect(hCombo, nil, True);

    // Тоже самое:
    RedrawWindow(hCombo, nil, 0, RDW_ERASENOW or RDW_FRAME or RDW_INVALIDATE or RDW_UPDATENOW or RDW_ERASE or RDW_ALLCHILDREN);

    // Перерисовывает только итем над которым мышь:
    SendMessage(hCombo, WM_SETREDRAW, 0, 0);
    SendMessage(hCombo, WM_SETREDRAW, 1, 0);



    Вобщем нужно перерисовать и комбобокс и его список(если дроппед).
    ---
    WinXP/Win7 Delphi7.
  • neversleep (02.12.11 16:13) [1]
    Решение найдено.

    var
     CbInfo: TComboBoxInfo;
    ...
    FillChar(CbInfo, SizeOf(CbInfo), 0);
    CbInfo.cbSize := SizeOf(CbInfo);

    GetComboBoxInfo(hCombo, CbInfo);

    InvalidateRect(CbInfo.hwndList, nil, False);

 
Конференция "WinAPI" » Как перерисовать выпадающий список COMBOBOX`а?
Есть новые Нет новых   [134430   +4][b:0][p:0.001]