Помещение изображения в поле со списком (правый край) в Delphi / Win32

Я хочу нарисовать изображение внутри поля со списком (правый край) в Delphi / Win32.

Поле со списком имеет стиль csDropDown . Это не работает с csOwnerDrawFixed или csOwnerDrawVariable .

Поле со списком должно быть редактируемым, как и в адресной строке браузера.

Есть ли решение Win32 без создания дополнительного компонента Delphi?

Я пробовал следующее, но это не сработало. Могу ли я сделать это с помощью Delphi 7?

TForm1 = class(TForm)
  ...
private
  FChDirComboWndProc: TWndMethod;
  procedure ChDirComboWndProc(var Message: TMessage);
  ...

procedure TForm1.FormCreate(Sender: TObject);
begin
  FChDirComboWndProc := ChDirComboBox.WindowProc; // save old window proc
  ChDirComboBox.WindowProc := ChDirComboWndProc; // subclass
end;

procedure TForm1.ChDirComboWndProc(var Message: TMessage);
begin
    WM_ERASEBKGND: begin    // WM_PAINT ?
        SetBkMode(Message.WParam, TRANSPARENT);
        SetTextColor(Message.wParam, GetSysColor(COLOR_GRAYTEXT));
        FillRect(Message.wParam, Rect(3,3,300,30), GetStockObject(BLACK_BRUSH ));
        Rectangle(Message.wParam, 15,15, 100, 100); //Test
        OutputDebugString(PCHar(Format('aa %d %d %d',[Message.WParam, Message.LParam, ChDirComboBox.Handle])));
      end;
  end;
  FChDirComboWndProc(Message); // process message
end;
6
задан Cœur 4 February 2018 в 03:20
поделиться