Ich verwende Windows XE2, die TVirtualStringTree
und eine TComboBox
als ein platzierter Editor.Mausrad sendet Nachricht an das falsche Steuerelement
Wenn ich eine TComboBox
direkt auf dem Formular platzieren, kann ich zur Laufzeit die Liste und das Mausrad blättern die Elemente in der Liste nach oben und unten (wie gewünscht). Wenn jedoch die TComboBox
zur Laufzeit von TVirtualStringTree
als In-Place-Editor erstellt wird, obwohl das neu erstellte Kombinationsfeld Fokus hat, wird die WM_MOUSEWHEEL
Nachricht des Mausrads an das Struktursteuerelement und nicht das Kombinationsfeld gesendet.
Dies ist offensichtlich, da die Elemente in der Dropdownliste Dropdown-Liste nicht scrollen. Stattdessen scrollt das Struktursteuerelement hinter dem Kombinationsfeld. Der feste Teil des Kombinationsfelds bewegt sich mit dem Baum, aber die Dropdown-Liste wird von dem festen Teil des Kombinationsfelds getrennt und bewegt sich nicht (wie dargestellt).
In beiden Fällen wird die TComboBox.Style
auf csDropDownList
gesetzt. Wenn das Kombinationsfeld als der Baumes in-Place-Editor erstellt wird, wird es auf diese Weise:
FCBox := TComboBox.Create(TreeControl);
FCBox.Visible := False;
FCBox.Parent := TreeControl;
// ... add items to combo box ...
FCBox.Visible := True;
FCBox.SetFocus;
FCBox.DroppedDown := True;
Es spielt keine Rolle, wo die Maus schwebt. Es kann direkt über die Elemente in der Auswahlliste des Kombinationsfeldes sein und das Baum-Steuerelement im Hintergrund ist immer noch dasjenige, das scrollt. Die einzige Möglichkeit zum Scrollen der Elemente im Kombinationsfeld besteht darin, die Bildlaufleiste zu verwenden.
Was würde dazu führen, dass das übergeordnete Element des fokussierten Steuerelements anstelle des Steuerelements die Mausradmeldungen empfängt (in diesem Fall TComboBox
)?
Ich fand diesen Artikel (http://msdn.microsoft.com/en-us/library/windows/desktop/ms645617(v=vs.85).aspx), der erklärt, dass die Nachricht an das Steuerelement gesendet wird, und wenn es nicht damit klarkommt, dann wird es die Kette zum Elternteil hinaufgeschickt, bis es gehandhabt wird. Ich schaue jetzt, ob 'TVirtualStringTree' alles tut, was die' TComboBox' verändert. –