Używam Windows XE2, TVirtualStringTree
i TComboBox
jako edytora umieszczonego w folderze.Koło myszy wysyła wiadomość do niewłaściwej kontrolki
Po umieszczeniu bezpośrednio na formularzu, w czasie wykonywania mogę upuścić listę, a kółko myszy przewija pozycje na liście w górę iw dół (zgodnie z życzeniem). Jednak, gdy TComboBox
jest tworzony w czasie wykonywania przez TVirtualStringTree
jako edytor lokalny, nawet jeśli nowo utworzone pole kombi ma fokus, wiadomość kółka myszy jest wysyłana do kontrolki drzewa, a nie do pola kombi.
Jest to oczywiste, ponieważ pozycje na rozwijanej liście rozwijanej listy rozwijanej nie są przewijane. Zamiast tego kontrolka drzewa znajdująca się za polem kombi przewija. Stała część pola kombi porusza się wraz z drzewem, ale lista rozwijana zostaje odłączona od stałej części pola kombi i nie porusza się (jak pokazano).
W obu przypadkach TComboBox.Style
jest ustawiony na csDropDownList
. Gdy pole kombi jest tworzony jako redaktora drzewa w miejscu, że odbywa się to w ten sposób:
FCBox := TComboBox.Create(TreeControl);
FCBox.Visible := False;
FCBox.Parent := TreeControl;
// ... add items to combo box ...
FCBox.Visible := True;
FCBox.SetFocus;
FCBox.DroppedDown := True;
To nie ma znaczenia, gdzie mysz jest uciążliwy. Może znajdować się bezpośrednio nad pozycjami na rozwijanej liście rozwijanej listy rozwijanej, a kontrolka drzewa w tle jest wciąż tą, która się przewija. Jedynym sposobem przewijania elementów w polu kombi jest użycie paska przewijania.
Co spowodowałoby, że rodzic aktywnej kontroli odebrałby komunikaty kółka myszy zamiast samej kontrolki (w tym przypadku TComboBox
)?
Znalazłem ten artykuł (http://msdn.microsoft.com/en-us/library/windows/desktop/ms645617(v=vs.85).aspx), który wyjaśnia, że wiadomość jest wysyłana do kontrolki, a jeśli go nie obsługuje, jest wysyłany do łańcucha do rodzica, dopóki nie zostanie obsłużony. Teraz szukam, czy 'TVirtualStringTree' robi coś, co zmieni sposób, w jaki' TComboBox' obsługuje wiadomość. –