RAD Studio VCL Reference
|
Returns the index of the list box item indicated by the coordinates of a point on the control.
function ItemAtPos(Pos: TPoint; Existing: Boolean): Integer;
__fastcall int ItemAtPos(TPoint Pos, Boolean Existing);
Use ItemAtPos to detect if an item exists at a particular point in the control.
The Pos parameter is the point in the control in window coordinates. If Pos is beyond the last item in the list box, the value of the Existing variable determines the returned value. If Existing is set to true, ItemAtPos returns -1, indicating that no item exists at that point. If Existing is set to false, ItemAtPos returns the index of the last item in the list box plus one.
C++ Examples:
/* For the following example, add a button, a status bar, and a list box to the form. Set the SimplePanel property of the status bar to true, using the object inspector. Also, populate the OnMouseUp event handler for the list box. The following code fills a list box with the names of all components on the form when the user clicks the button. References to the components themselves are inserted along with the names. The components are all inserted at the front of the list, so that the last component added to the form is the first component in the list. When the user right-clicks the name of an object in the list, the component’s coordinates are displayed on the status bar. Note that because we are using the right- click, the item need not be selected. */ void __fastcall TForm1::Button1Click(TObject *Sender) { for (int i = 0; i < ComponentCount; i++) ListBox1->Items->InsertObject(0, Components[i]->Name, dynamic_cast<TObject *>(Components[i])); } void __fastcall TForm1::ListBox1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (Button == mbRight) { TClass ClassRef; int Index = ListBox1->ItemAtPos(Point(X,Y), true); // only components that are controls have a position // make sure the component is a control for (ClassRef = ListBox1->Items->Objects[Index]->ClassType(); ClassRef != NULL; ClassRef = ClassRef->ClassParent()) if (String(ClassRef->ClassName()) == "TControl") { TControl *TheObject = dynamic_cast<TControl *>(ListBox1->Items->Objects[Index]); StatusBar1->SimpleText = TheObject->Name + " is at (" + IntToStr(TheObject->Left) + ", " + IntToStr(TheObject->Top) + ")"; break; } if (ClassRef == NULL) // if it wasn't a control MessageBeep(0); } }
Delphi Examples:
{ For the following example, add a button, a status bar, and a list box to the form. Set the SimplePanel property of the status bar to true, using the object inspector. Also, populate the OnMouseUp event handler for the list box. The following code fills a list box with the names of all components on the form when the user clicks the button. References to the components themselves are inserted along with the names. The components are all inserted at the front of the list, so that the last component added to the form is the first component in the list. When the user right-clicks the name of an object in the list, the component’s coordinates are displayed on the status bar. Note that because we are using the right- click, the item need not be selected. } procedure TForm1.Button1Click(Sender: TObject); var I: Integer; begin for I := 0 to Form1.ComponentCount-1 do ListBox1.Items.InsertObject( 0, Form1.Components[I].Name, Form1.Components[I] as TObject); end; procedure TForm1.ListBox1MouseUp( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,Y: integer); var APoint: TPoint; Index: integer; TheObject: TControl; begin if Button = mbRight then begin APoint.X := X; APoint.Y := Y; Index := ListBox1.ItemAtPos(APoint, True); if (ListBox1.Items.Objects[Index] is TControl) then begin TheObject := (ListBox1.Items.Objects[Index] as TControl); StatusBar1.SimpleText := TheObject.Name + ' is at (' + IntToStr(TheObject.Left) + ', ' + IntToStr(TheObject.Top) + ') '; end else Beep; end; end;
Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
|
What do you think about this topic? Send feedback!
|