2011-10-13 18 views
6

Tôi muốn vẽ một hình ảnh bên trong một combobox (cạnh phải) trong Delphi/Win32.Đặt một hình ảnh bên trong một combobox (cạnh phải) trong Delphi/Win32

Hộp tổ hợp có kiểu csDropDown. Điều này không hoạt động với csOwnerDrawFixed hoặc csOwnerDrawVariable.

Hộp kết hợp có thể chỉnh sửa tương tự với thanh địa chỉ của trình duyệt.

Có giải pháp Win32 nào mà không tạo thành phần Delphi bổ sung không?

Tôi đã thử cách sau, nhưng nó không hoạt động. Tôi có thể làm điều đó với Delphi 7 không?

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; 

Trả lời

2

Cách thực hiện là triển khai Owner-Drawn Combo Boxes. Xem Owner-Drawn Combo Boxes trên MSDN hoặc tìm mẫu Delphi, ví dụ: Owner Draw - ComboBox.

+0

Hộp tổ hợp có kiểu ** csDropDown **. Điều này không hoạt động với csOwnerDrawFixed hoặc csOwnerDrawVariable. Hộp kết hợp có thể chỉnh sửa tương tự với thanh địa chỉ của trình duyệt. Tôi sẽ thêm thông tin này vào câu hỏi của tôi, xin lỗi vì đã quên điều đó. – Codr

Các vấn đề liên quan