2011-10-13 10 views
6

Chcę narysować obraz wewnątrz combobox (prawą krawędź) w Delphi/Win32.Umieszczanie obrazu wewnątrz combobox (prawy brzeg) w Delphi/Win32

Zestaw combobox ma styl csDropDown. To nie działa z kodem csOwnerDrawFixed lub csOwnerDrawVariable.

Comobox powinien być edytowalny podobnie do paska adresu przeglądarki.

Czy istnieje rozwiązanie Win32 bez tworzenia dodatkowego składnika Delphi?

Próbowałem następujące, ale to nie działa. Czy mogę to zrobić z 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; 

Odpowiedz

2

Aby to zrobić, należy wdrożyć Owner-Drawn Combo Boxes. Zobacz Owner-Drawn Combo Boxes na MSDN lub poszukaj próbki Delphi, np. Owner Draw - ComboBox.

+0

Combobox ma styl ** csDropDown **. To nie działa z csOwnerDrawFixed lub csOwnerDrawVariable. Combobox powinien być edytowalny podobnie do paska adresu przeglądarki. Dodam tę informację do mojego pytania, przepraszam, że o tym zapomniałem. – Codr

Powiązane problemy