TcxMCListBox.ItemAtPos(TPoint,Boolean) Method
Returns the index of the item located under the specified point.
Declaration
function ItemAtPos(const APos: TPoint; AExisting: Boolean): Integer;
Parameters
Name | Type |
---|---|
APos | TPoint |
AExisting | Boolean |
Returns
Type |
---|
Integer |
Remarks
Use the ItemAtPos method to determine the item located under the specified point. The test point is specified by the APos parameter. This parameter must specify the point in the control’s client coordinates (relatively to its top-left corner). If you have screen coordinates, use the ScreenToClient method of the control to obtain the control’s client coordinates.
The AExisting parameter value affects the return value of the ItemAtPos method. If True, the method will return -1 if the specified point is within the control but below the last item. Otherwise, the method will return the index of the last item in such cases.
Most commonly, the ItemAtPos method is used to determine the item located under the mouse cursor. The following sample code shows how this can be used. It handles the OnMouseDown event to select the right-clicked item and invoke the popup menu. The popup menu must contain a single item that removes selected items from the control. Below are the handlers of the menu item’s OnClick and list box’s OnMouseDown events.
procedure TForm1.Delete1Click(Sender: TObject);
begin
cxMCListBox1.DeleteSelected;
end;
procedure TForm1.cxMCListBox1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
ClickedItemIndex: Integer;
PopupMenuOrigin: TPoint;
begin
if Button <> mbRight then Exit;
ClickedItemIndex := cxMCListBox1.ItemAtPos(Point(X, Y - 16), True);
if ClickedItemIndex <> -1 then
begin
cxMCListBox1.ClearSelection;
cxMCListBox1.Selected[ClickedItemIndex] := True;
PopupMenuOrigin := cxMCListBox1.ClientToScreen(Point(X, Y));
PopupMenu1.Popup(PopupMenuOrigin.X, PopupMenuOrigin.Y);
end;
end;
The result of handling events in such a manner is illustrated in the image below.