Sto usando Windows XE2, il TVirtualStringTree
e un TComboBox
come un editor sul posto.Rotellina del mouse che invia il messaggio al controllo errato
Quando inserisco uno TComboBox
direttamente nel modulo, in fase di esecuzione posso scorrere verso il basso l'elenco e la rotellina del mouse scorre le voci nell'elenco su e giù (come desiderato). Tuttavia, quando il TComboBox
viene creato in fase di esecuzione da TVirtualStringTree
come un editor sul posto, anche se la casella combinata appena creata è attiva, il messaggio WM_MOUSEWHEEL
della rotella del mouse viene inviato al controllo struttura e non alla casella combinata.
Ciò è evidente perché gli elementi nell'elenco a discesa casella combinata non scorrono. Invece, il controllo dell'albero dietro la casella combinata scorre. La parte fissa della casella combinata si sposta con l'albero, ma l'elenco a discesa viene disconnesso dalla porzione fissa della casella combinata e non si sposta (come illustrato).
In entrambi i casi il TComboBox.Style
è impostato csDropDownList
. Quando la casella combinata è creato come editor sul posto dell'albero, si è fatto in questo modo:
FCBox := TComboBox.Create(TreeControl);
FCBox.Visible := False;
FCBox.Parent := TreeControl;
// ... add items to combo box ...
FCBox.Visible := True;
FCBox.SetFocus;
FCBox.DroppedDown := True;
non importa dove il mouse è in bilico. Può essere direttamente sopra gli elementi nell'elenco a discesa casella combinata e il controllo struttura ad albero in background è ancora quello che scorre. L'unico modo per scorrere gli elementi nella casella combinata consiste nell'utilizzare la barra di scorrimento.
Che cosa farebbe sì che il genitore del controllo focalizzato ricevesse i messaggi della rotellina del mouse invece del controllo stesso (in questo caso, lo TComboBox
)?
Ho trovato questo articolo (http://msdn.microsoft.com/en-us/library/windows/desktop/ms645617(v=vs.85).aspx) che spiega che il messaggio viene inviato al controllo, e se non lo gestisce, viene inviato alla catena fino a quando non viene gestito. Sto cercando ora di vedere se 'TVirtualStringTree' fa qualcosa che cambierebbe il modo in cui' TComboBox' gestisce il messaggio. –