2011-10-13 5 views
6

Voglio disegnare un'immagine all'interno di una casella combinata (lato destro) in Delphi/Win32.Inserimento di un'immagine all'interno di una casella combinata (lato destro) in Delphi/Win32

La casella combinata ha lo stile csDropDown. Questo non funziona con csOwnerDrawFixed o csOwnerDrawVariable.

La casella combinata deve essere modificabile in modo simile alla barra degli indirizzi del browser.

Esiste una soluzione Win32 senza creare un componente Delphi aggiuntivo?

Ho provato quanto segue, ma non funziona. Posso farlo con 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; 

risposta

2

Il modo per farlo è quello di implementare un Owner-Drawn Combo Boxes. Vedere Owner-Drawn Combo Boxes su MSDN oppure cercare l'esempio di Delphi, ad es. Owner Draw - ComboBox.

+0

La casella combinata ha lo stile ** csDropDown **. Questo non funziona con csOwnerDrawFixed o csOwnerDrawVariable. La casella combinata dovrebbe essere modificabile in modo simile alla barra degli indirizzi del browser. Aggiungerò queste informazioni alla mia domanda, mi spiace dimenticarle. – Codr