TListView (vsIcon) を一種のタブとして使用したいので、タブと同じように 1 つの項目のみを選択できます。項目を 1 つだけ選択しても問題ありません (Multiselect プロパティを無効にします)。リストビューのアイコンとテキストの間の空白の場所をクリックすると、項目の選択が解除されるという問題があります。
これが私がこれまでに試したことです:
void __fastcall TForm::ListViewChanging(TObject *Sender, TListItem *Item, TItemChange Change, bool &AllowChange)
{
if (Change == ctState)
{
TPoint CursorRel = ListView->ScreenToClient(Mouse->CursorPos);
AllowChange = (ListView->GetItemAt(CursorRel.x, CursorRel.y) != NULL);
StatusBar->SimpleText = (AllowChange)? "YES" : "NO";
}
}
上記は機能しますが、問題があります。空白の領域でマウスをクリックすると、アイテムの選択が解除され、アイテムがまだ選択されているように見えても、キーボードの上下矢印が機能しなくなります。キーボードを無視すると、マウスの選択で正常に機能し、ステータスバーに「いいえ」というメッセージが表示された空白領域のクリックが無視されます。
これを修正して、考えられるすべての選択方法(キーボード、マウス(その他?))で動作するようにする方法についてのアイデア。